本文地址: http://t.dbdao.com/archives/mysql-configuration.html
Mysql技术学习QQ群:146959374
除了通过命令行来进行MySQL参数项配置之外,你还可以将设置写入一个配置文件中来实现设置。标准的MySQL客户端程序会在启动时查找此类配置文件并使用文件中的相应设置项。通过写配置文件可以大大减少你运维工作时间,因为你不必在每次调用程序的时候通过命令来重新定义这些参数项。
【 dbdao.com 数据岛 】
默认情况下,MySQL server会在运行时使用其预编译的值作为其配置项值。如果这些默认值在实际环境中是不适合的,你可以在server运行时给予不同的运行时参数值:
--basedir
参数设置告知服务正确的目录位置,否则服务无法启动。同样的,如果你并非使用安装目录下的data子目录作为你的数据存放目录的话,你就必须使用 –datadir项设置来告诉服务正确的位置。 --skip-innodb
项来节省内存(注意,由于现在InnoDB已成为标准配置,因此此参数在MySQL 5.7版本及其以后版本中被废用,这里仅作为例子进行说明)。你也可以设置默认存储引擎进行设置修改。 --innodb_autoextend_increment
, -- innodb_page_size
等,这些值也可以根据你的情况进行调整。 你可以通过定义运行时配置项在服务启动时改变其表现。通常,这种设置可以通过命令行和配置文件来达到你的目的。(例外的是,如果你是以Window Service服务运行MySQL服务的话,你可能不能通过命令行来进行配置设置,你必须在启动时使用 --defaults-file
参数项,将配置设置于配置文件中。请依据对应版本而定。)
为了了解哪些配置项是server支持的,我们可以手工调用以下命令:
# mysqld –verbose –help |
在帮助中所看到的那些配置项都可以使用mysqld命令时同时进行设置使用。当然,更常见的是将它们写入配置文件中,这都多方面原因:
标准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环境变量。)【 dbdao.com 数据岛 】
Unix配置文件的查找顺序中还包括了~/.my.cnf,配置文件可被放置在当前启动MySQL的用户HOME目录下。不过,由于此文件是一个特定于用户的文件,因此不太适合存放作为服务配置参数。(正常在你以root用户且使用 --user=mysql
调用mysql服务时,服务会读取的特定用户配置文件取决于你调用服务的那个登陆用户,这可能会导致不一致的配置信息被使用。)
按目录查找的顺序如下:最上面的文件先读。
更多信息可阅读: http://dev.mysql.com/doc/refman/5.7/en/option-files.html
在配置文件中定义服务启动配置项时,使用[mysqld]组。如果文件不存在,那么你可以使用编辑器新建一个平文件。建立和修改文件需要对应的写入权限。MySQL服务本身仅需要读取权限即可;它会读取其中信息,但并不会新建或改动文件。
以下例子中,我们例举了一些使用配置文件进行设置的方法:
--basedir
参数项告知服务对应路径。配置文件中的配置项前不用写双横杠【 --
】,你如下在配置文件中设置安装目录: [ mysqld ] basedir = E : / mysql |
--datadir
项,如: [ mysqld ] basedir = E : / mysql datadir = D : / mysql – data |
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 |
[ mysqld ] general – log log – bin log – slow – queries |
--default-storage-engine
项: [ mysqld ] default – storage – engine = InnoDB |
[ mysqld ] max_connections = 201 key_buffer_size = 134217728 |
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上。【 dbdao.com 数据岛 】
在配置文件中进行设置时,请将使用于命令行时的参数前的双横杠去掉。如果配置项设置一个值,可与允许在等号【=】两边有空格,不过在用于命令行时,这是不允许的。以下为一个配置文件例子:
[ 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 配置文件位置
配置文件的位置取决于你的操作系统。标准配置文件如:
MySQL(客户端)程序也可以对多个配置文件进行访问。程序会查找每个标准配置文件并在文件存在时进行读取。如果文件不存在也不会报错。
如果需要使用某个配置文件,你可以使用编辑器建立一个平文件进行编辑。
为了建立或修改此文件,你必须有相应的写权限。客户端程序仅需读权限即可。【 dbdao.com 数据岛 】
为了告知程序读取指定的配置文件,使用命令行启动时可使用以下参数项(在命令中必须是第一个参数项):
配置项 | 注释 |
--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)进行配置读取,在读完后回到之前跳出的配置文件完成余下的读取工作。 如果一个配置项被定义多次,不管是在同一个文件中还是在不同的多个配置文件中,配置项的值取最后设置的那个。
注意:在命令行中设置的配置项会最终覆盖配置文件读取的配置项的值。
by 汪伟华, dbdao.com 数据岛