本文地址:https://www.askmac.cn/archives/mysql-configuration.html
除了通过命令行来进行MySQL参数项配置之外,你还可以将设置写入一个配置文件中来实现设置。标准的MySQL客户端程序会在启动时查找此类配置文件并使用文件中的相应设置项。通过写配置文件可以大大减少你运维工作时间,因为你不必在每次调用程序的时候通过命令来重新定义这些参数项。
默认情况下,MySQL server会在运行时使用其预编译的值作为其配置项值。如果这些默认值在实际环境中是不适合的,你可以在server运行时给予不同的运行时参数值:
- 有几个配置项定义了MySQL重要目录和文件的位置信息。如,Windows下,默认预编译的安装目录(base directory)为C:\mysql。如果你系统将MySQL安装在其他地方,你就必须通过使用
--basedir
参数设置告知服务正确的目录位置,否则服务无法启动。同样的,如果你并非使用安装目录下的data子目录作为你的数据存放目录的话,你就必须使用 –datadir项设置来告诉服务正确的位置。 - 有些配置项对MySQL server写哪些日志进行了控制。
- 有些配置项被用于覆盖调整server中与性能相关的内部变量值,如控制最大同时连接数的配置项,控制buffer和cache大小的配置项等等。
- 一些存储引擎在预编译时的设置为启用或禁用状态。如,服务程序已经编译启用了InnoDB支持(默认为启用),假如你并不使用InnoDB表的话,你可以设置
--skip-innodb
项来节省内存(注意,由于现在InnoDB已成为标准配置,因此此参数在MySQL 5.7版本及其以后版本中被废用,这里仅作为例子进行说明)。你也可以设置默认存储引擎进行设置修改。 - 有些配置项也可对InnoDB表空间进行进行设置。在未显式配置的情况下,如
--innodb_autoextend_increment
,-- innodb_page_size
等,这些值也可以根据你的情况进行调整。
你可以通过定义运行时配置项在服务启动时改变其表现。通常,这种设置可以通过命令行和配置文件来达到你的目的。(例外的是,如果你是以Window Service服务运行MySQL服务的话,你可能不能通过命令行来进行配置设置,你必须在启动时使用 --defaults-file
参数项,将配置设置于配置文件中。请依据对应版本而定。)
为了了解哪些配置项是server支持的,我们可以手工调用以下命令:
# mysqld --verbose --help
在帮助中所看到的那些配置项都可以使用mysqld命令时同时进行设置使用。当然,更常见的是将它们写入配置文件中,这都多方面原因:
- 通过将配置项写入文件中,你可以不必每次在启动MySQL服务时将配置参数定义在命令中。这不仅方便,也可以避免太多复杂配置项造成的输入错误。
- 如果你是通过server启动脚本来调用服务的话,你就不能通过在命令中加入配置项来进行启动。因为此脚本仅有参数值start和stop,这里你不需使用配置文件来进行启动设置。
- 如果你在配置文件中列出有所有你所需的服务配置,你可以从文件中快速方便得了解你所进行的设置。
标准MySQL服务会在几个位置查找配置文件。它会使用那些在相应存放位置的配置文件,但是如果它找不到的话,服务也照样正常启动,不会报错。在Windows和Unix上,对应的标准配置文件有所不同。
在Windows上,程序会在目录(例如,C:\Winodws或C:\WinNT目录)中按以下顺序查找配置文件:my.ini,然后是my.cnf。
按目录查找的顺序如下:最上面的文件先读。
更多信息可阅读:http://dev.mysql.com/doc/refman/5.7/en/option-files.html
注意:如果你使用配置精灵进行的安装(即将MySQL server注册为一个Windows服务),那么服务就不会按照标准配置文件目录顺序进行查找,它仅会找MySQL安装目录下的my.ini文件。当然如果你在注册服务时使用 --defaults-file
指定过配置文件,那么服务只会找你指定位置的那份配置文件。因此,如果你需要进行配置修改,请将设置放在服务会读的那个配置文件中。
在Unix上,所查找的配置文件则包括两个通用配置文件,/etc/my.cnf和$MYSQL_HOME/my.cnf。第二个文件仅在MYSQL_HOME环境变量已设置好的情况下才会被使用。通常你可以设置它作为MySQL安装目录。(如果在启动服务时此参数未设置,则mysql_safe脚本在执行时会尝试设置此MYSQL_HOME环境变量。)
Unix配置文件的查找顺序中还包括了~/.my.cnf,配置文件可被放置在当前启动MySQL的用户HOME目录下。不过,由于此文件是一个特定于用户的文件,因此不太适合存放作为服务配置参数。(正常在你以root用户且使用 --user=mysql
调用mysql服务时,服务会读取的特定用户配置文件取决于你调用服务的那个登陆用户,这可能会导致不一致的配置信息被使用。)
按目录查找的顺序如下:最上面的文件先读。
更多信息可阅读:http://dev.mysql.com/doc/refman/5.7/en/option-files.html
在配置文件中定义服务启动配置项时,使用[mysqld]组。如果文件不存在,那么你可以使用编辑器新建一个平文件。建立和修改文件需要对应的写入权限。MySQL服务本身仅需要读取权限即可;它会读取其中信息,但并不会新建或改动文件。
以下例子中,我们例举了一些使用配置文件进行设置的方法:
-
- 如果在的MySQL安装在Windows上,服务假设默认安装目录为C:\mysql且数据子目录名为data。然而你希望将MySQL安装在其它地方,如: E:\mysql,你就必须使用
--basedir
参数项告知服务对应路径。配置文件中的配置项前不用写双横杠【--
】,你如下在配置文件中设置安装目录:[mysqld] basedir=E:/mysql
- 如果你将E:\mysql下的data子目录作为数据目录,那basedir值已近足够了。不过如果你希望使用不同的数据目录路径,你就必须设置
--datadir
项,如:[mysqld] basedir=E:/mysql datadir=D:/mysql-data
- 请注意,在这种情况下,你也需要将原数据目录的拷贝到新对应位置D:\mysql-data上。如果不这样的话,当启动服务时,由于找不到配置文件对应的数据目录,会导致服务启动失败。
- 对于配置参数中设置的Windows路径名,你可以使用斜杠【/】或者【\\】。例如,定义basedir值为E:\mysql,你可以以以下两种格式进行设置:
basedir=E:/mysql basedir=E:\mysql
- 如果路径名包含空格,你可以用双引号括起来,如:
basedir=” C:/Program Files/MySQL/MySQL Server 5.6”
- 在Windows上,默认共享内存(shared-memory)连接方式是未启用的。为了使用此连接方式,使用以下配置项:
[mysqld] shared-memory
类似,mysqld-nt和mysql-max-nt服务程序都在Windows平台上支持命名管道(named-pipe)连接方式,但它们都并未启用。为了启用这种连接方式,可使用以下配置项:
[mysqld] enable-named-pipe
- 为了启用日志,可以使用配置项启用你所希望的类型。以下配置项启用了通用查询日志,二进制日志以及长时间查询日志(以MySQL v5.7版本为例):
[mysqld] general-log log-bin log-slow-queries
- 为了定义默认存储引擎为InnoDB,可以使用
--default-storage-engine
项:[mysqld] default-storage-engine=InnoDB
- 配置文件中也可设置许多MySQL服务系统变量值。例如,为了将最大客户端连接数从默认151提升至201,并增加MyISAM的键缓存(key cache)从8MB到128MB,你需要设置max_connections和key_buffer_size变量:
[mysqld] max_connections = 201 key_buffer_size = 134217728
- 如果在的MySQL安装在Windows上,服务假设默认安装目录为C:\mysql且数据子目录名为data。然而你希望将MySQL安装在其它地方,如: E:\mysql,你就必须使用
MySQL版本在v5.6.8之前包含有几个模板配置文件。在Windows中,文件名如my-small.ini和my-large.ini。这些被安装时同时建立在安装目录中。在Unix中,它们名为my-small.cnf和my-large.cnf。在my-default.cnf v5.6.8之后,这些文件被my-default.cnf文件代替。
你可以通过拷贝模板文件到标准配置文件路径上,将其文件名修改为指定所用配置文件名。不过在使用模板文件时,你需要确保能读懂文件中的意思,理解其中配置项设置的效果并作出相应修改。
3.5.1 使用 --safe-updates
配置项
配置文件中的配置项按组进行组织,每组配置项前都有一个以中括号括起来的组名(如:[group-name])。通常情况下,组名为所使用配置项对应的程序名。例如, [mysql]和[mysqldump]组对应的配置项被用于mysql和mysqldump命令工具。而特别的组名如[client]则被用于所有客户端程序。一般[client]组被设置连接配置参数,因为不管你使用哪个客户端程序都连接到此相同server上。
在配置文件中进行设置时,请将使用于命令行时的参数前的双横杠去掉。如果配置项设置一个值,可与允许在等号【=】两边有空格,不过在用于命令行时,这是不允许的。以下为一个配置文件例子:
[client] host = myhost.example.com compress [mysql] safe-updates [mysqld] port=3011
注意:除非服务由root用户启动,否则端口号必须为1024或比之更大的值。
在上面这个例子中,[client]组定义了主机名,且设定C/S访问协议需使用压缩模式进行发送。组中的配置项应用于所有标准的客户端。而[mysql]组仅应用于客户端程序mysql。[mysql]组的设置要求了mysql命令应该使用 --safe-updates
项。(mysql命令程序将会同时使用[client]和[mysql]组中的配置,因此总共有3个配置项被mysql使用。)
3.5.2 配置文件位置
配置文件的位置取决于你的操作系统。标准配置文件如:
- 在Windows上,一般MySQL会按以下顺序查找配置文件: my.ini和cnf。而MSI安装精灵会将配置文件放置在服务注册设定时所指定的位置下)。
- 在Unix平台上,文件/etc/my.cnf将作为全局配置文件被所有用户使用。你也可以在你的HOME目录中建立用户自己定义的cnf文件。如果两个都存在,全局文件会被先读取。
- 当然,MySQL的命令行程序会在查找$HOME目录下的配置文件前,先在$MYSQL_HOME目录下查找配置文件(例如,../MySQL Server 5.6)。
MySQL(客户端)程序也可以对多个配置文件进行访问。程序会查找每个标准配置文件并在文件存在时进行读取。如果文件不存在也不会报错。
如果需要使用某个配置文件,你可以使用编辑器建立一个平文件进行编辑。
为了建立或修改此文件,你必须有相应的写权限。客户端程序仅需读权限即可。
为了告知程序读取指定的配置文件,使用命令行启动时可使用以下参数项(在命令中必须是第一个参数项):
配置项 | 注释 |
--defaults-file=file_name |
使用指定位置的配置文件 |
--defaults-extra-file=file_name |
使用指定位置的额外配置文件 |
--no-defaults |
使程序不使用配置文件 |
例如,使用mysql工具命令时使用C:\my-opts配置文件而不使用标准配置文件:
shell> mysql -–defaults-file=C:\my-opts
在配置文件中,你还可以使用 !include
和 !includedir
指令:
- 如果某行中出现
!include file_name
,那就会从这句指令开始跳转到对应file_name进行读取,读完后再调回原先的配置文件继续之前的读取。 - 如果某行中出现
!includedir dir_name
,那么类似的会从这句指令开始跳转到对应dir_name目录并查找尾缀为.cnf的文件(Windows平台上为.cnf和.ini)进行配置读取,在读完后回到之前跳出的配置文件完成余下的读取工作。
如果一个配置项被定义多次,不管是在同一个文件中还是在不同的多个配置文件中,配置项的值取最后设置的那个。
注意:在命令行中设置的配置项会最终覆盖配置文件读取的配置项的值。
Comment