本文参考自mysql 5.5的官方文档,说明mysql启动时用到的关键配置文件及简要说明
Mysql 配置说明:
1、 mysqld是MySQL server,可以通过命令行参数,或者配置文件,或者同时使用两个地方一起配置
2、 系统变量,可以在启动文件中配置。
3、 系统状态变量。包括各种内置的计数器,运行时操作的统计信息等
4、 设置sql mode
5、 Server关闭过程。
系统的默认配置说明:
1、 mysql默认提供了示例配置文件
a) my-small.cnf
b) my-medium.cnf
c) my-large.cnf
d) my-huge.cnf
2、 配置文件中各个组的生效范围
a) mysqld从配置文件中的[mysqld]和[server]组下读出参数信息,在启动时生效。
b) mysqld_safe从[mysqld] [server] [mysqld_safe]和[safe_mysqld]读出信息
c) mysql.server从[mysqld]和[mysql.server]读出信息
3、 嵌入式MySQL server(embedded MySQL server)通常从[server] [embedded]和[xxxxx_SERVER]读信息,xxxxx是嵌入的程序名称
4、 一些控制缓冲区或者缓存大小的参数,系统会根据平台或者默认限制情况,对设定的值做出一些调整,比如如果将一个最小为1024的参数设为0,系统会自动调整为1024.
5、 默认情况下,缓冲区、长度或者栈大小的长度单位都是字节
6、 默认情况下,与路径有关的默认值是配置的数据文件下的。例如数据文件目录为 /var/mysql/data
,其它参数的路径给出的是相对路径,则其它参数则位于目录 /var/mysql/data
下
7、 系统变量修改后,不会对当前连接使用的session变量生效,包括执行set global变量的session。
在一台机器上启动多个MySQL实例:
启动多个实例用的可以是不同版本的二进制文件,也可以是同一个二进制文件,只需要保证一些参数保持互不相同,已避免可能的实例间的冲突。这些参数可以设置在启动命令行参数中,也可以写在配置文件里,或者通过设置环境变量实现。
1、 启动一个实例最主要的资源是文件目录,每个实例需要有不同的文件目录,使用 --datadir=
path
选项来配置。
2、 --port控制每个实例有单独的端口号
3、 --socket=path控制Unix socket文件路径
4、 --pid-file=file_name记录server进程 id的文件
5、 与log有关的参数也需要单独配置。将不同实例的日志文件配置在不同的硬盘上可以获得更好的性能。
6、 --tmpdir=path 不同实例尽量部署在不同路径下。存放临时文件。
7、 --basedir=path 不同的实例配置不同的basedir后,每个实例自动的在该目录下创建文件目录,日志文件,pid文件。这种情况下,每个实例只需在单独配置端口和socket文件即可。
8、 如果是通过tar文件部署不同的MySQL,通过mysqld_safe启动时,只需配置socket文件和port文件,mysqld_safe会自动的创建合适的basedir并将它传递给mysqld
9、 --defaults-file 只从配置文件中读取配置(命令行中参数无效)。可以在启动多实例时使用。
创建多个数据文件目录的方法:
1、 新建的方式,状态与原目录一致,包含默认的MySQL账号,但不包含用户信息
2、 通过copy已有数据文件的方式
a) 这种方式下,所有MySQL账号和数据信息都会复制
b) 复制前需要停止实例,保证所有的信息能够写入磁盘
c) 复制并修改配置文件my.cnf,包括配置新的数据文件目录,绑定的端口号,使用的socket文件和pid信息机可能的log目录
3、 使用新配置文件启动新的实例
启动多个实例:
1、 通过mysqladmin查看variables,确认新的实例可以使用的参数
2、 使用mysql_safe –defaults-file=file_path启动各自的实例
查看已经启动的实例中的变量的命令:
shell> mysqladmin --host=host_name --port=port_number variables
启动方式及my.cnf内部说明,参考:
示例:
1、使用选项[mysqld17] 启动一个单独的实例
shell> mysqld_multi start 17
2、使用选项[mysqld8] 和 [mysqld10] - [mysqld13]停止多个实例
shell> mysqld_multi stop 8,10-13
说明:
选项 [mysqld_multi] 只是呈现mysqld_multi自己使用,选项 [mysqldN] 传递给指定的mysqld实例使用。