|
MySQL须注意的配置
1.日志同步与写入磁盘问题
1.1 innodb_flush_log_at_trx_commit = n
这个 n值决定什么时候把日志信息写入日志文件,以及什么把这些文件物理地(术语:同步)到硬盘上。
N= 0 ---- 每隔一秒写依次日志并且进行同步一次。意味:减少硬盘写操作,但是可能会造成数据丢失。
N=1 ---- 每执行完一条commit命令就写一次日志,并且进行同步。意味:可以防止数据丢失,但是增
加了硬盘的I/0操作次数,可能造成硬盘写操作频繁,造成性能下降。
N=2 ---- 每执行一条commit命令就写一次日志,每隔一秒进行一次同步。
1.2 sync_lbinog = n
这个参数用于设置每隔N次日志写操作就把日志文件写入硬盘一次(同步日志数据)。
N= 1 ---- 每写一次日志并且进行同步一次。
N= 0 ---- 由操作系统来负责二进制日志文件的同步工作。
1.3 innodb_fush_method
InnoDB引擎日志文件的同步方法(仅适用unix/linux系统),。有两种取值:fdatasync(用 fsync()函数进行同步);0_DSYNC (O_sync()函数进行同步)。默认为fdatasync,建议也是设置使用该方法,因为该方法比0_DSYNC块很多。
2.慢查询与未带索引查询SQL追踪
1.1 慢查询选项设置
在my.cnf文件中增加:
long_query-time = n # 默认为10秒,N表示为多少花费秒及以上的语句才算慢查询语句
#(SELECT/UPDATE/INSERT/DELETE等)
log-slow-queries = /usr/data/slow/slow.log
1.2 未带索引查询选项设置
log-queries-not-using-indexes #SQL语句也会记录到slow.log中
3.关于授予存储过程编辑权限
可能大家都碰到过,授予某帐号Create Routine/Alter Routine权限还是提示没有权限创建或修改存储过程,被
迫授予Super权限。这种情况下,需要设置参数:log_bin_trust_routine_creators = 1 ,该选项默认值为 0;执
行语句:SET log_bin_trust_routine_creator = 1。
4.InnoDB在关闭服务器时,缓存区数据写回时机设置
i nnodb_flush_shutdown =0/1,决定以最快的速度关闭InnoDB引擎,默认设置是1,意思是:不把缓存在INSERT缓存区的数据写入数据表,这些数据将在MySQL服务器下次启动时再写入(这么做没有什么风险,因为INSERT缓存区是表空间的一个组成部分,数据不会丢失)。0----表示在关闭InnoDB之前写回,但是可能出现还没写回完毕,操作系统就会强行关闭掉了InnoDB,从而会导致数据不完整。
5.MySQL复制时主机的innodb_flush_log_at_trx_commit与sync_lbinog设置
建议把设置如下:
innodb_flush_log_at_trx_commit = 1
sync_lbinog = 1
增加MySQL复制的耐受性和一致性。
6.关闭掉一些不需要的存储引擎
可以使用show engines 查看你MySQL版本所支持的储存引擎,把不需要的在my.cnf文件中禁用掉,例如:
skip-innodb。顺便介绍下,其他的也可以禁用掉,例如:skip-name-resolve。
7.对MyISAM表要定义进行检查与优化操作
mysqld服务关闭时,可使用的检查与修改命令:myisamchk [options] tabl_name…….
--silent –fast --------- 快速检查MyISAM表。
--silent --force –fast -------- 检查MyISAM表并修复任何破坏的表。
--check, -c ------- 检查表的错误。
--recover--可以修复几乎所有一切问题,除非唯一的键不唯一时(对于MyISAM表,这是非常不可能的情况)。
以上只是停止mysqld服务时候执行,为了防止还有读写操作等造成的MyISAM表损坏。我们还可以在不停止服务的情况下,在命令行上执行:
CHECK TABLE tbl_name [, tbl_name] ... [option] ...
option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
类型 意义
QUICK 不扫描行,不检查错误的链接。
FAST 只检查没有被正确关闭的表。
CHANGED 只检查上次检查后被更改的表,和没有被正确关闭的表。
MEDIUM 扫描行,以验证被删除的链接是有效的。也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。
EXTENDED 对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间较长。
在线修复命令:
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
REPAIR TABLE用于修复被破坏的表。默认情况下,REPAIR TABLE与myisamchk --recover tbl_name具有相同的效果。REPAIR TABLE对MyISAM和ARCHIVE表起作用。
如果给定了QUICK,则REPAIR TABLE会尝试只修复索引树。
如果您使用EXTENDED,则MySQL会一行一行地创建索引行,代替使用分类一次创建一个索引。
对于REPAIR TABLE,还有一种USE_FRM模式可以利用。如果.MYI索引文件缺失或标题被破坏,则使用此模式。在这种模式下,MySQL可以使用来自.frm文件重新创建.MYI文件。这种修复不能使用myisamchk来完成。 注释:只能在您不能使用常规REPAIR模式是,才能使用此模式。.MYI标题包含重要的表元数据(特别是,当前的AUTO_INCREMENT值和Delete链接)。这些元数据在REPAIR...USE_FRM中丢失。如果表被压缩,则不能使用USE_FRM。因为本信息也存储在.MYI文件中。
表优化命令:
如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
使用OPTIMIZE TABLE可以重新利用未使用的空间,并整理数据文件的碎片。
注意:OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用
8. 传送信息包最大值设置(max_allowed_packet)
通信信息包:是发送至MySQL服务器的单个SQL语句,或发送至客户端的单一行。
客户端和服务器均有自己的max_allowed_packet变量,因此,如你打算处理大的信息包,必须增加客户端和服务器上的该变量。如果你正在使用mysql客户端程序,其max_allowed_packet变量的默认值为16MB。要想设置较大的值,可用下述方式启动mysql:
mysql> mysql --max_allowed_packet = 32M
它将信息包的大小设置为32MB。服务器的默认max_allowed_packet值为1MB。如果服务器需要处理大的查询,可增加该值(例如,如果准备处理大的BLOB列)。增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。
还有其他的一些需要注意的配置或设置,大家一起来完善了! |
|