root@msc3:~# which mysqld /usr/sbin/mysqld root@msc3:~# /usr/sbin/mysqld --verbose --help |grep -A 1 'Default options' Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 一个典型的配置文件包含多个部分,每个部分的开头是一个方括号括起来的分段名称。MySQL程序通常读取跟它同名的分段部分,比如,许多客户端程序读取client部分。服务器通常读取mysqld这一段,一定要确认配置项放在了文件正确的分段中,否则配置是不会生效的。
# 设置全局变量,GLOBAL和@@global作用是一样的 set GLOBAL sort-buffer-size = <value> set @@global.sort-buffer-size := <value> # 设置会话级变量,下面6种方式作用是一样的 # 即:没有修饰符、SESSION、LOCAL等修饰符作用是一致的 set SESSION sort-buffer-size = <value> set @@session.sort-buffer-size := <value> set @@sort-buffer-size = <value> set LOCAL sort-buffer-size = <value> set @@ocal.sort-buffer-size := <value> set sort-buffer-size = <value> # set命令可以同时设置多个变量,但其中只要有一个变量设置失败,所有的变量都未生效 SET GLOBAL sort-buffer-size = 100, SESSION sort-buffer-size = 1000; SET GLOBAL max-connections = 1000, sort-buffer-size = 1000000; 动态的设置变量,MySQL关闭时这些变量都会失效。如果在服务器运行时修改了变量的全局值,这个值对当前会话和其他任何已经存在的会话都不起效果,这是因为会话的变量值是在连接创建时从全局值初始化而来的。注意,在配置修改后,需要确认是否修改成功。
// @exp 表示用户变量,上面的示例均是系统变量 // 错误 set @user = 123456; set @group = select GROUP from USER where User = @user; select * from USER where GROUP = @group; // 正确 SET @user := 123456; SELECT @group := `group` FROM user WHERE user = @user; SELECT * FROM user WHERE `group` = @group; 有一些配置使用了不同的单位,比如 table-cache变量指定表可以被缓存的数量,而不是表可以被缓存的字节数。而 key-buffer-size则是以字节为单位。
GENERAL 首先创建一个用户mysql来运行mysqld进程,请确保这个用户拥有操作数据目录的权限。设置默认端口为3306,有时为了安全,可能会修改一下。默认选择Innodb存储引擎,在大多数情况下是最好的选择。但如果默认是InnoDB,却需要使用MyISAM存储引擎,请显式地进行配置。许多用户认为其数据库使用了某种存储引擎但实际上却使用的是另外一种,就是因为默认配置的问题。
MySQL-checkpoint技术 How InnoDB performs a checkpoint innodb-flush-log-at-trx-commit 前面讨论了很多缓存,InnoDB日志也是有缓存的。当InnoDB变更任何数据时,会写一条变更记录到日志缓存区。在缓冲慢的时候、事务提交的时候,或者每一秒钟,InnoDB都会将缓冲区的日志刷新到磁盘的日志文件。如果有大事务,增加日志缓冲区大小可以帮助减少I/O,变量 innodb-log-buffer-size可以控制日志缓冲区的大小。通常不需要把日志缓冲区设置的非常大,毕竟上述3个条件,任一条件先触发都会把缓冲区的内容刷新到磁盘,所以缓冲区的数据肯定不会太多,出入你的数据中有很多相当大的BLOB记录。通常来说,配置1M~8M即可。