mysql数据库的比较与同步

3

分类 : 技术文摘 | 发表时间 29-08-2011

本资料主要内容为转载,起因主要是为了找mysql数据库的比较软件,比较新版本数据库比旧版本多了哪些表?表中多了哪些字段?以及多的字段的类型?

MySQL数据同步主要有三种方式:
1.利用MySQL自身的数据库同步功能
2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的
3.利用专用的MySQL数据库同步软件
1.利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了)
MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能.
数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf。
windows环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。
设置方法:
设置范例环境:
操作系统:window2000professional
mysql:4.0.4-beta-max-nt-log
Aip:10.10.10.22
Bip:10.10.10.53
A:设置
1.增加一个用户最为同步的用户帐号:
GRANTFILEON*.*TObackup@’10.10.10.53′IDENTIFIEDBY‘1234’
2.增加一个数据库作为同步数据库:
createdatabasebackup
B:设置
1.增加一个用户最为同步的用户帐号:
GRANTFILEON*.*TObackup@’10.10.10.22′IDENTIFIEDBY‘1234’
2.增加一个数据库作为同步数据库:
createdatabasebackup
主从模式:A->B
A为master
修改Amysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=1
log-bin
#设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录,
#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。
binlog-do-db=backup#指定需要日志的数据库
重起数据库服务。
用showmasterstatus命令看日志情况。
B为slave
修改Bmysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=2
master-host=10.10.10.22
master-user=backup#同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=60预设重试间隔60秒
replicate-do-db=backup告诉slave只做backup数据库的更新
重起数据库
用showslavestatus看同步配置情况。
注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info
所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。
双机互备模式。
如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。
在A的配置文件中mysqld配置项加入以下设置:
master-host=10.10.10.53
master-user=backup
master-password=1234
replicate-do-db=backup
master-connect-retry=10
在B的配置文件中mysqld配置项加入以下设置:
log-bin=c:mysqllogmysqllog
binlog-do-db=backup
注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart
重起AB机器,则可以实现双向的热备。
测试:
向B批量插入大数据量表AA(1872000)条
A数据库每秒钟可以更新2500条数据。
2.数据库目录同步,方法和文件同步一样,设置好需要同步的两个数据库目录就可以了!
缺点很明显,数据同步只能单向进行,可以作为备份方案
3.用专用的MySQL同步软件进行同步
这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能!
缺点和2一样,只能单项同步!
当然你也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿!
4.关于MySQL论坛的数据同步
由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢?
用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的!
不过,具体的应用我没有测试!稳定性不敢保证!
有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误!
比如镜像论坛数据同步:
1.母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序!
2.每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序!

 

NAME
    myreplicator – 第三方的MySQL复制工具

SYNOPSIS
    myreplicator [options] remote_binlog_name
   
DESCRIPTION
        myreplicator是一个独立于mysql的数据库复制程序,但它和mysql自身复制
    功能的原理相同,都是从master读取binlog,解析binlog,最后在slave上执行
    SQL语句。由于它独立于mysql,因此,myreplicator的最大特点是可以使一个
    slave指向多个master。
        myreplicator的配置文件格式和mysql的配置文件相同,都是标准的INI格式。
    myreplicator使用“myreplicator”作为模块标识。
    例如:
        [myreplicator]
        #master configure
        host=10.210.74.143
        #slave configure
        slave-host=10.210.74.143
        #master.info
        relay-info=/tmp/re.info
    其中最关键的一个配置项是relay-info,它实时记录着binlog的执行位置,为
    myreplicator退出后从断点继续执行提供了位置依据。它的格式与master.info
    文件的格式相同。
   
myreplicator OPTIONS
    主库配置信息:
        host=:主库主机名
        port=:主库服务端口
        user=:主库用户名
        password=:主库用户密码
        start-position=:复制起始位置,无relay-info文件时有效
    辅库配置信息:
        slave-host=:辅库主机名
        slave-port=:辅库服务端口
        slave-user=:辅库用户名
        slave-pass=:辅库用户密码
    其他配置:
        relay-info=:同步位置信息文件,实时记录binlog的执行位置,默认值为[./relay.info]
        defaults-file=:指定配置文件
        daemon:以守护进程的方式启动
        self-server-id=:myreplicator自身扮演的服务器角色。注意不能为0。
        replication-ignore-db=:过滤掉指定库的数据
        ignore-server-id=:过滤掉指定server-id的日志记录
        log-file=:myreplicator日志文件,默认值[./myrpl.log]
        skip-slave-error;当向slave写入数据出错时,设置该选项将忽略错误,否则程序停止。
       
    提示:
        以上选项要作为命令行参数要在前面加"–"
        以上选项带等号的表示需要参数,否则不需要
       
relay-info file format
    此文件格式与master.info大致相同,只在最后多了一个self server id
    mysql-bin.000003 => master binlog name
    106              => binglog position
    10.210.74.143    => master host
    repl             => master user name
    123qwe           => master user password
    3306             => master port
    128              => self server id

mysql中如何去掉字段中指定字到结尾的字符串

0

分类 : 编码知识 | 发表时间 05-12-2010

这是帮同事处理dedecms数据库中的一个字段问题

title字段的内容太长了,想用shorttitle字段中的内容来独立处理,达到使用shorttitle作为正文标题,title中的内容作为显示title。大概看了下,发现title中的内容大多包含单机游戏下载、单机游戏中文版下载,前面的内容为游戏的具体名称,所以决定用游戏的具体名称作为正文标题。

在mysql中使用语句来处理这个,稍费了点周折,记录一下;

Update `dede_archives` set shorttitle=left(shorttitle,instr(shorttitle,’下载’)-1)  where shorttitle like ‘%下载%’

注意,不能少后面的like条件,操作之前,备份下数据库。

phpMyAdmin 3.3.1发布多语言下载 可能修复了某漏洞

1

分类 : 技术文摘 | 发表时间 17-03-2010

前几天还在说phpmyadmin3.3.0正式版本发布(phpmyadmin 3.3.0正式版本的配置),用着比较方便,解决了以前版本的一个问题,但当时说了,发现一个跨站的漏洞(phpmyadmin 3.3.0 Cross Site Scripting Vulnerability),Linker对此了解不深,也没甚解。今天发现,phpmyadmin3.3.1发布下载了,可能修复了之前所说的那个漏洞。高手确认下。

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的资料库管理工具。

可以管理整个MySQL服务器(需要超级用户),也可以管理单个数据库。为了实现后一种,你将需要合理设置MySQL用户,他只能对允许的数据库进行读/ 写。那要等到你看过MySQL手册中相关的部分。

下载:phpMyAdmin 3.3.1 Final

- new import and export modules
- changes tracking
- synchronizing structure and data between servers
- replication support

phpmyadmin 3.3.0正式版本的配置

6

分类 : 网络日志 | 发表时间 14-03-2010

下午在使用phpmyadmin2.9.2时,总是在使用sql语句时,遇到用户名和密码不正确的提示,明智非用户名和密码的问题,总是提示这个,郁闷。

搜索网上,很多这方面问题,有网友说,是php.ini的配置问题,或者是ntfs权限的问题,是因为session_save_path的存储目录,权限有问题,已经检查,不是这方面问题;又有网友说是phpmyadmin的配置文件有问题,这方面,Linker接触多年,各执一词,也懒得试验了,干脆重新配置来过。

Linker喜欢玩新版本,大概一搜索,phpmyadmin3.3.0正式版本刚出,多语言版本也有了。下载后,拷贝至目录,大概看了下,把根目录下,config.sample.inc.php文件,复制一份,重命名为:config.inc.php,然后修改其中的blowfish_sccret为任意数据,那个登陆config已经不用修改了,这个版本自动为cookie,也就是登陆用户名和密码验证式的。保存此文件,已经可以使用了。

相比较以前版本的配置,要简单得太多了。

但在搜索phpmyadmin问题的过程中,也发现了刚刚发布的一个有关phpmyadmin跨站漏洞,不知道是否确切,怕怕耶!……

有兴趣的,看看:phpmyadmin 3.3.0 Cross Site Scripting Vulnerability

至于之前那个2.9.2版本的用户名和密码错误问题,懒得研究了,太浪费时间,干正事去也!

帝国备份王备份数据时显示空白的原因和解决方法

1

分类 : 网络日志 | 发表时间 28-12-2009

在合用php和mysql的环境时,有时候网站系统自带的备份系统比较弱智,虽然功能倒是很强大,但同时,基本功能却很弱智,弱智在哪呢?就是网站在没有配置好数据库连接和原始数据库安装好时,不能登陆后台来恢复数据库,这就有些矛盾了,我们在移动网站和数据库时,需要的是直接拷贝网站数据和直接备份、恢复数据库,而不是安装好网站以后,再在后台恢复数据库,麻烦了。

有了帝国备份王,这一切就变得简单多了,linker始终佩服帝国备份王的开发者,是一个真正的网站开发者,站在站长的位置来考虑问题。帝国cms系统和帝国备份王都是优秀的作品。

Linker经常合用帝国备份王来备份和恢复数据,也推荐很多站长来使用。

有一次,在备份数据时,点备份,确认备份以后,页面空白,看备份目录,只有一点点数据内容,备份失败。换用备份方式和调整备份数据大小都不行,修复和优化数据库表也不行。

后来对比了下,发现在备份到以数字开头的表时,会空白,这比较奇怪,Linker对数据库开发比较弱智,不太明白为什么遇到数字开头的表时,会空白。

没有办法,也要备呀,先修改表名称,在备份,恢复后,再把表名称给修改回来。

修改表名称语句:ALTER TABLE table_name RENAME TO new_table_name

利用mysql数据库中的TMD表修复论坛错误“is marked as crashed and last (automatic?) repair failed”

6

分类 : 网络日志 | 发表时间 09-03-2009

洗了把手,回到座位上,重新换了茶叶,续上水,然后点了根烟,吐一口舒心的烟圈,然后来细细描述一下,刚才的惊心之旅,是修复mysql数据库的惊险经历。

有几个朋友,论坛搞得都比较大,几位朋友都属于那种只会运营网站但几乎不懂任何网站技术的那种类型,现在这样类型的成功站长越来越多,相反,像Linker这样的崇拜技术至上的半吊子,总是在初级阶段,不断徘徊,不能不说是一种讽刺。由于接触时间长了,关系都比较要好,因此这些论坛在技术支持上,几乎全部都由Linker来维护,这问题倒也不大,几年都过来了,一直按计划有条不紊的维护、升级,期间有些小问题,都有惊无险的度过了,但这次,虽然事后也可以说是有惊无险,但不能不说是,是近几年来,比较险的一次了。

其中一位朋友的综合论坛,运营已经有快三年了,会员达到了十几万,每天也有上万的ip,几万的会员浏览登陆,近几天他说,论坛运行可能有些问题,主要体现在速度上,在执行写入、浏览页面时,页面会有明显的停顿现象,并且还有会员反映,会看到打不开页面,页面出现sql乱码的情况。针对这些情况,Linker心中已经有些概念,于是今晚午夜,决定对数据库进行一下例行维护。

修复论坛错误“is marked as crashed and last (automatic?) repair failed”的几种方法一文中(有些朋友可不大厚道,摘录了此文,作为自己的原创,更有甚至,改头换面,取其精华,作为自己的投稿、原创来做,让人汗颜,今晚搜索有关这方面问题时,才知道竟然有了这么多的CP,在遗憾之余也有些欣慰),第三种方法来修复数据库中的一些碎片,优化数据库的效果还是比较好的,并且速度也比较快,使用phpmyadmin太麻烦,使用discuz论坛提供的tools集合工作,修复起来速度太慢不说,几乎没有起过作用的,可能对于一些小的表错误问题,会起些作用。

登陆上服务器,以前的例行维护,是按照以下方法来做:

停掉mysql:net stop mysql,然后cd命令符至mysql的bin目录,再执行命令:myisamchk -r D:\MySQL\data\数据库名称\*.MYI,回车确定后,修复进程就在不断的一个表一个表,一行一行的修复中,这是discuz论坛上的童虎推荐的方法,效果比较好,推荐拥有独立服务器的使用,长期以来,Linker也一直在使用此方法来优化数据库,效果很好。但这次使用时,犯了一个错误。

也许是例行维护时间太长了吧,有些麻痹大意了,登陆上去以后,首先作了一些其它系统维护,然后就直接打开cmd,执行:myisamchk -r D:\MySQL\data\数据库名称\*.MYI,突然之间,本地主板的小喇叭连串的响了起来,这一报警不打紧,Linker立刻想起来,mysql服务还没有停掉,这样修复会直接破坏掉表的。马上关掉命令行窗口,然后立刻停掉mysql服务,再次打开cmd,执行:myisamchk -r D:\MySQL\data\数据库名称\*.MYI,本地主板小喇叭依然在响了七八次以后,然后才正常修复其它表,直至结束。心中有感不妙。

开启mysql服务,打开网站,惨了’members’ is marked as crashed and last (automatic?) repair failed,很明显,members表坏掉了,并且使用myisamchk 命令还修复不好。登陆phpmysql,显示cdb_members表在使用中,查看物理路径下表,对比了一下,一个月以前的备份,大小似乎正常。

到google、百度上搜索有关修复mysql数据库表crashed的文章,发现有关这方面的话题,除了Linker的“修复论坛错误“is marked as crashed and last (automatic?) repair failed”的几种方法”外,就属discuz论坛的这个页面流行度比较广,不外勿文初所述的三种方法,这三种方法,皆不能解决这个问题。查到国外的vbulletin.com论坛,看到有关帖子,并且还是由总版主、管理员回答的这方面问题,都是说此表已经损坏,修复几乎不可能,建议用备份来恢复,看到这些“权威”的论断,Linker心里真是“拔凉拔凉”的,由于朋友的论坛数据库比较大,因此Linker就有些懈怠,一个月左右才备份一次,这要把这个cdb_members表恢复到一个月前去,上万名会员数据就这样没了,并且可能还有着其它一些不可知的问题。

有关修复mysql数据库,还有一个命令:mysqlcheck

mysqlcheck -a -c -o -r –all-databases -uroot -p //这条命令是即可最佳化所有db数据库。

参数的意义如下:
-a = Analyse given tables.
-c = Check table for errors
-o = Optimise table
-r = Can fix almost anything except unique keys that aren’t unique

如果是在win主机下,修复指定的表,使用:mysqlcheck -o -r 数据库名称 -u root -p,在提示输入密码的框中,输入mysql的root管理密码,mysqlcheck即会对数据库进行检测修复。但很遗憾,Linker在使用了这个命令后,虽然成功执行了,但论坛表错误依旧,没有解决问题。

难道真的只有使用备份数据表来恢复了?……

打开备份的数据库目录,打开当前使用的数据库目录,看cdb_members三个表,两个目录切换来切换去,但突然感觉到,怎么有点不对?备份中的是:cdb_members.MYD,但有问题的数据库中,这个名称的表却是:cdb_members.TMD,奇怪了?正常情况下,没有看到TMD扩展名的表啊?这个TMD的扩展名可是味够浓的。

mysql数据库,数据表有三个文件支持,比如表 a041574875:
a041574875.MYI –> 索引文件
a041574875.MYD –> 数据内容文件
a041574875.frm –> 表结构文件

这个时候,却变成了
a041574875.MYI –> 索引文件
a041574875.TMD –> ?
a041574875.frm –> 表结构文件

mysql的TMD表究竟是什么文件?TMD文件是执行myisampack后生成的压缩文件,它可使文件压缩40%—70%。Linker也没查到更多的相关说明,只是发现有评论,称此文件出现,可能与硬盘问题有关,比如逻辑坏道等。Linker由此想来,估计和没有停掉mysql服务而执行myisamchk有关,这个TMD文件可能是一个备份或者待恢复机制下产生的文件。

不管那么多,通过扩展名排列目录结构,把所有TMD扩展名结尾的表全部修改为MYD结尾,然后再次执行“myisamchk -r D:\MySQL\data\数据库名称\*.MYI”(这些操作是在停掉mysql服务情况下进行的),这次没有再出现小喇叭报警的情况,执行完毕后,打开论坛,天啊,论坛页面打开正常了。赶快停掉数据库,重新备份数据库至其他服务器。至此,数据库总算给修复回来了。另:如果数据库表修复后,还会有出现TMD扩展名表的情况,就要真的查一查是否是硬盘的问题了。

这里说明一下,mysqlcheck 用在数据库服务器在运行的时候,而 myisamchk 必须是在数据库服务器被关闭的时候,因为它可能会和数据库本身的操作起冲突,会导致你的错误还没被修复,而新的损坏确已经出现。务必务必!

在有关使用mysql的TMD表恢复数据库的方法中,Linker最终查到的是知盾安全论坛中,2006年的一个帖子:用 TMD 文件修复损坏的 mysql 的数据库某个表,Linker到最后才发现,作者和Linker的问题几乎一致,并且解决思路也一样
,只是有一点点区别,Linker修改表的扩展名由TMD修改为MYD,执行Myisamchk后,数据库正常了,而知盾论坛文中,却没有解决,而是在使用mysqldump恢复数据库了以后,然后修改扩展名,数据库才正常的。

直到最后,总结一下,经历了那么多,查询了很多解决方案和实例,想了那么多思路,尝试了很多方法,事实上最终解决方法也是比较简单的。其中,也确实有幸运的成份。

给自己提个醒,硬盘有价,数据无价,再上两个硬盘,组Raid,专用来备份数据,使用计划任务来自动备份。另外,在处理长年累月的例行维护时,千万要头脑清醒,有条不紊、按步就班的持续进行,千万不要自恃已经非常熟悉了,而马虎大意;往往给事情造成重大损失的,不是什么也不会的生手,反而是有比较高权限的熟手。

上述的教训和敬告,要千万注意了。

结合以前实例来分析优化discuz的误区

0

分类 : 技术文摘 | 发表时间 12-07-2008

有关于discuz的话题,本博提得不太少数,实在是对之爱之有佳,但也有无奈的无力感;之前关于discuz的乱码问题discuz论坛乱码的又一例解决方法discuz论坛W3WP.exe占用CPU100%的几个解决办法,还有那个虚拟股市6占用mysql资源的问题,最后以关闭虚拟股市了事;上述一系列的问题探索中,采取的方面也包括下述discuz优化误区中的几个方面当中,不过,在一定方面来说,适合度最重要,这关系着以下的操作是优化还是误区?

之前点石论坛中也有贴在讲述disduz的优化问题,大部分表现在模板方面,对于php、mysql方面的优化比较少;在落伍论坛也看到一个叫小勤的,好像就是那个给落伍写点击量统计查询插件的那位,有一篇日志被转到discuz论坛,是他跟踪一个客户的案例,其中提到用到了mysql慢查询来跟踪查询语句,并在最后对discuz的论坛数据库结构提出了改进索引的意见。我在改进那个discuz论坛W3WP.exe占用CPU100%的几个解决办法时,也确实用了下,感觉也确实有些作用,但在下述的所谓误区操作中,针对增加索引,提出了反面意见,而事实上,近一段时期,结合论坛实际发展情况,感觉也确实有些道理。

1、SQL 慢,加索引:多数情况下,数据库可能是瓶颈。通过 Slow Query Log 发现执行时间比较长的 SQL 并不难,于是有的人一看 SQL 走了全表扫描,干脆添加个索引好了。

其实这个地方值得商榷的。第一,必须确定一下该 SQL 执行次数到底是怎样的?执行真的很频繁? 那么对应的页面是否通过 Cache 可以减少对 DB 的冲击?如果可以,尽量不要添加索引,索引本身对表的负面影响也是很大的,比如降低更新速度影响并发能力等。就此看来,增加索引也确实是双刃剑,具体是否增加还要进一步的跟踪分析,从cache方面结合考虑查询的问题。

2、瓶颈一定在数据库上:数据库"可能"是瓶颈,很多时候,图片访问带来的压力甚至比数据库压力还大;有的用户数据库、用户上传的图片文件、Web 服务器都扔到一台服务器上,这时候,第一手去调整 MySQL 或许会有作用,但价值不大。因此,分析并确定瓶颈点,就是关键了。

3、盲目的静态编译 MySQL:静态编译 MySQL 有好处,但如果系统已经在线上运行了,在原有环境中进行静态编译未必能带来多大好处。对于 PHP 也是这样,如果一次优化从其它方式上能带来更清晰、直接的开销,就不要重新编译;我的看法是:如果论坛发展初期,哪怕是开始没来得及静态化,也要转为静态化,毕竟发展初期,大多数网站对于搜索引擎的依赖性还是比较大的,如果发展到一定地步或者是以实力领先、发展已经比较稳定的论坛团体,那就没必要再次静态化了。静态化,在一定方面,还是要以消耗部分性能为代价的。

4、反复尝试,但不建立基准数据;建立基准数据,实在应该是优化的最基本的步骤。这样才能有效的评估优化的效果。否则的话,象误区一描述的,添加了一个索引,短期内可能感觉快了,长期看,性能可能又会慢下来。这个基准数据建立的代价就大了,我当初也没有在增加索引之前保留数据库的备份,也没有太长时间对比效果,这工作量太大了点,像七十二松的那位管理员,那家伙有条件有精力来研究,还差不多。唉,国外的空间,忘记放在他们那里了,这样就省事太多了,那sir也是个优化狂人!佩服一把!本博一贯佩服技术领先、追求技术至境的网络人!

5、一次进行多个优化步骤:如果一次调整多个参数或是多个环境的设置,然后观察效果。如果每个步骤都是"对"的话,那么效果看起来是好的。如果有的步骤调节"错"的话,可能会抵消那些有效果的优化步骤。这方面不再多说了,再多分析嘛,分析后确定优化点。

上述部分内容源自:http://www.bullog.cn/blogs/dbanotes/archives/157025.aspx,我看这内容时搜索了下,有两个地址,并且是不同域名不同路径的相同内容,作者也相同,奇怪了,这作者排名不低呀,不会犯这样的重复性网页错误吧?

discuz的优化方面,实在有些疲累的感觉,毕竟数据库也比较大了,每次调整面临的压力与等待都比较辛苦,并且这也是在探索中前进,discuz官方对此的答案一向是那个“苦砂”回答,但这位似是一个应用层级别的高手,对于深层次的代码级修改和mysql深层次优化,似乎心有余而力不足,而discuz官方开发团队中,除了那个童虎偶尔展示一下风采外,其他人和其他解决性方案,更是难得一见。可能这就是对待免费下载使用用户的服务吧,理解吧,不理解也得理解吧!phpwind在速度方面,一向都是高出discuz一筹,但phpwind官方对于免费服务群体的态度,比之discuz官方更是过份,phpwind安装应用区的问题,就可见一斑,失望之下,才转至discuz的,但discuz近来的资源占用情况,似乎又在迫使我寻求其他的解决之路。VBB?还是aspx?还是静态化?还是在硬件方面加大投入?四核?还是分布式应用?扯淡!我这么high?我还谈优化干嘛?呵

优化,是个技术活,更是一个让人心力交瘁的活,有兴趣的,留言多交流!

如何限制SQL SERVER用户对表和字段的删除添加权限?

1

分类 : 网站技术 | 发表时间 21-06-2008

使用sqlserver2000已经五六年了,但对于sqlserver的使用,一直也在边缘阶段,除非有特殊问题,才专门研究一番;有朋友是做IDC的,最近在一块讨论,说有一个客户,是自己写的asp程序,最近总中木马并且还在sql数据库中建立了一些垃圾表,虽然不影响服务器安全,但这样一来,也总是问题,看能不能解决下?

这问题算是比较普遍的asp类问题了,业余asp编写者,在编写asp代码时,难免对于过滤特殊字符,没有考虑周全,这方面可以利用网上比较通用的asp木马注入过滤程序来缓步解决,具体方法,不多赘述;

sqlserver的安全,本站中有很多文章都有提及,不仅涉及删除危险的存储过程,建立sql独立运行用户,设置sqlserver的目录权限等,来设置sqlserver以及整体服务器的安全,另外,虚拟主机各用户都有独立的sql访问权限,不会影响到其它数据库,更不会影响到sql整体和服务器安全;朋友所提到的,第二个问题,就是随意在数据库中建立表,把木马注入问题解决后,这个问题可以得到缓解,但还可以更进一步做出设置,就是限制虚拟主机sql独立用户对数据库的管理权限,一般,虚拟主机会给该sql独立数据库用户分配该数据库的完全db_ower权限,这时,该用户对此数据库的所有表、字段有着一切管理权限,包括建立表、删除表、新建字段等,一般数据库在表结构建立以后,对于数据库结构的修改,会比较少,主要会对数据库进行读取、写入操作,因此,可以考虑,只给此sql独立访问用户对该数据库的读、写权限,其它权限暂时封闭。进入“sql   server企业管理器”,点击要进行限制的数据库,选择“用户”,比如test用户,在test上点击鼠标右键,选择属性,去掉db_owner权限,加上db_datareader和db_datawriter权限即可。

有关设置可以参考:设置sqlserver2000运行安全在最小权限普通用户下的方法 修改sqlserver数据库所有者

my.ini描述之mysql的十条另类优化参数

2

分类 : 网站技术 | 发表时间 24-03-2008

mysql服务优化对于经常做服务器系统的,不管针对apache还是针对iis,都要经常接触,都要配置服务、优化服务,监测日志、分析日志等,不断的在运行中,根据运行状态来调整优化参数,今天,收录十条有关mysql的很少接触到的优化配置参数:

1)、back_log:
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。

(2)、interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。

(3)、key_buffer_size:
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为402649088(400MB)。

(4)、max_connections:
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。

(5)、record_buffer:
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M)

(6)、sort_buffer:
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。

(7)、table_cache:
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8)、thread_cache_size:
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。

(10)、wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。

注:参数的调整可以通过修改 /etc/my.cnf 文件并重启 MySQL 实现。这是一个比较谨慎的工作,上面的结果也仅仅是我的一些看法,你可以根据你自己主机的硬件情况(特别是内存大小)进一步修改。

优化之前,记着备份原my.ini备份,这是一个很好的习惯,避免优化后一旦重启mysql引起服务故障、网站访问故障等;优化之后,要注意观察mysql的运行情况,分析日志,观察网站的运行情况等,这是一个网管类技术人员,应该俱备的常识。

如何实现MySQL中的用户管理?

0

分类 : 技术文摘 | 发表时间 28-09-2007

MySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中比较难以理解的一个部分。本文通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统。

本文主要参考了MySQL安装所附的使用手册第六章中的部分内容。

1、授权机制的主要作用是什么?

授权机制的基本作用是给某个主机上的用户对某个数据库以select,insert,update和detete的权限。而其额外的功能还包括是否允许匿名使用数据库,使用MysQL的一些特定函数,如:LOAD DATA INFILE之类。在这里请注意,MySQL中的用户名和Unix系统中的用户名并没有什么关系。虽然许多客户端程序允许你可以用当前的用户名进行登录,但是最标准的做法还是通过–user的选项。
 
2、授权机制是如何进行运作的?

在MySQL中主机和用户的联合视为唯一标志。比如说,在主机1和主机2上的用户lee实际上是不同的,他们对MySQL的使用权限也可以是有差别的。而整个授权机制的核心问题就是要解决授予从某个主机上登录的某个用户对某个数据库的使用权限。你可以通过脚本mysqlaccess测试一个主机上用户的对数据库操作的权限。而所有的授权信息都被存储在数据库mysql的user、host和db表中。我们可以通过mysql MySQL的指令连接到这个数据库中,并且通过select * from user(或者db,host)显示每个数据表中的内容。user表中所授予的权限是整个授权机制的基本授权,也就是说,user中的定义对于任何一个用户+主机来说都是适用的,除非在db表中另外有所定义,因此,对于用户来说最好是就某个数据库为基础进行授权。而host表的主要目的是维护一个“安全”服务器的列表。而在具体考虑某个用户/主机对某个数据库的权限的的时候,我们还需要研究一下授权机制的的匹配搜索机制:

其次,在授权机制中可以对一个用户的口令进行加密,而且是必须加密,加密的方法是password(口令),如果直接填写口令的话,会导致数据库无法访问。user表中所授予的权限是整个授权机制的基本授权,也就是说,user中的定义对于任何一个用户+主机来说都是适用的,除非在db表中另外有所定义,因此,对于用户来说最好是就某个数据库为基础进行授权。而host表的主要目的是维护一个“安全”服务器的列表。而在具体考虑某个用户/主机对某个数据库的权限的的时候,我们还需要研究一下授权机制的的匹配搜索机制:

首先,我们需要介绍一下统配符的概念,统配符包括“%”,其意思为任意(的主机、用户或者数据库),而如果一条记录为空的话,也表示任意的意思。其次,在授权机制中可以对一个用户的口令进行加密,而且是必须加密,加密的方法是password(口令),如果直接填写口令的话,会导致数据库无法访问。
从我们对这三个表的显示我们可以看到,这三个表中的每一条记录包含了对于某个用户的授权情况的描述,MySQL数据库中几个相关的授权机制的数据表被搜索的顺序为:user,db,host。也就是说,我们将首先首先检索user数据表,找到第一个匹配的记录,我们把在user数据表中首先匹配的记录称之为Priv;然后搜索db表,获得相应的授权。如果在db数据表相应记录中host字段的为空,并且Priv记录中主机也被包含在host表的host字段之中,这样的话,对于某个user来说,则可以在user表中加入在host表中的一些为“Y”的权限设定。如果在db表中的host字段不为空的话,那么也就不会对该用户/主机的授权产生什么影响了。
了解了这一点之后,我们需要讨论在各个数据表中的记录的搜索的优先权的问题,也就是说,怎样确定第一匹配的记录,这并不是按照数据表中的记录的自然先后顺序来确定的。在各个数据表内的各条记录的优先权排列如下:
(1)user表:根据先host后user的顺序确定。搜索规则如下:不包含统配符的记录,包含统配符的记录,空记录。而在同样一个host里面,继续按照user来排列,规则和上述的一样。
(2)db表:检索的顺序根据host字段确定:不包含统配符的记录,包含统配符的记录,空记录。
(3)host表:检索的顺序根据host字段确定:不包含统配符的记录,包含统配符的记录,空记录。我们用下面的例子来说明进行匹配搜索的规则:请记住如果你更改了这些数据表,你必须使用MySQLadmin reload使其生效。
下面是演示系统是如何进行搜索的:
+———–+———+-
| Host | User | …
+———–+———+-
| % | root | …
| % | jeffrey | …
| localhost | root | …
| localhost | | …
+———–+———+-
搜索的顺序应当是:
localhost/root
localhost/any
any/jeffrey
any/root
这样,如果在localhost的用户jeffrey要连接数据库的话,那么其授权应当根据localhost/“任意” 行所规定的权限而非“任意”/jeffrey行所规定的权

限,请大家注意这一点,因为如果不合适的配置完全可能会使得你无法正常地使用这个数据库系统。
我们现在来看一个添加一个用户的例子:需要添加一名叫做“custom”用户,他分别从主机localhost, server.domain 和 whitehouse.gov连接到数据库中,他的口令为“stupid”,对于数据库bankaccount他只想从“localhost”进行访问,而“customer”数据库则应当被上述3个主机所访问。我们通过以下的sql语句来完成其操作。

shell> mysql MySQL.
MySQL> insert into user (host,user,password)
values(localhost,custom,password(stupid));
MySQL> insert into user (host,user,password)
values(server.domain,custom,password(stupid));
MySQL> insert into user (host,user,password)
values(whitehouse.gov,custom,password(stupid));

MySQL> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
(localhost,bankaccount,custom,Y,Y,Y,Y,Y,Y);
MySQL> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
(%,customers,custom,Y,Y,Y,Y,Y,Y);

3、授权数据表

授权数据表对表的行操作包括select,insert,update和delete,对表和数据库的操作包括create和drop。其它的授权还包括如LOAD DATA INFILE和SELECT INTO OUTFILE和管理命令:shutdown, reload, refresh 和process.三个授权数据表的结构如下所示:
user表
字段 类型 健 默认值
Host char(60) PRI ""
User char(16) PRI ""
Password char(16) – ""
Select_priv enum(N,Y) – N
Insert_priv enum(N,Y) – N
Update_priv enum(N,Y) – N
Delete_priv enum(N,Y) – N
Create_priv enum(N,Y) – N
Drop_priv enum(N,Y) – N
Reload_priv enum(N,Y) – N
Shutdown_priv enum(N,Y) – N
Process_priv enum(N,Y) – N
File_priv enum(N,Y) – N

db表
字段 类型 健 默认值
Host char(60) PRI ""
Db char(64) PRI ""
User char(16) PRI ""
Select_priv enum(N,Y) – N
Insert_priv enum(N,Y) – N
Update_priv enum(N,Y) – N
Delete_priv enum(N,Y) – N
Create_priv enum(N,Y) – N
Drop_priv enum(N,Y) – N

host 表只有在db的数

无觅相关文章插件,快速提升流量