MySQL-配置文件
参考文献
- MySQL是咋样运行的
MySQL
获取配置信息路径
-
命令行参数
mysqld_safe --datadir=/data/sql_data
-
配置文件
-
确定配置的文件路径
1
2
3
4
5
6
7
8
9
10-- 方法一
root@2dd900ce424a:/# which mysqld
/usr/sbin/mysqld
root@2dd900ce424a:/# /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
-- 方法二
[root@holelin ~]# mysql --help |grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf- 从左到右,MySQL数据库是从
/etc/my.cnf --> /etc/mysql/my.cnf --> /usr/local/mysql/etc/my.cnf --> ~/.my.cnf
的顺序读取配置文件的.
- 从左到右,MySQL数据库是从
-
配置文件通常分成多个部分,每个部分的开头是一个方括号括起来的分段名称.
MySQL
程序通常读取跟它同名的分段部分,很多客户端程序还会读取client部分,这是一个存放共用设置的地方.服务器通常读取mysqld
这一段.一定要确认配置项放在了文件正确的分段中,否则配置是不会生效的.
-
配置文件的路径
-
在类
UNIX
操作系统中,MySQL会按照以下路径来依次寻找配置文件路径 备注 /etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf
$MYSQL_HOME/my.cnf
特定于服务器的选项(仅限服务器) defaults-extra-file
命令行指定的额外配置文件路径 ~/.mycnf
特定于用户的选项 ~/.mylogin.cnf
特定于用户的登录路径选项(仅限客户端) SYSCONFDIR
表示使用CMake
构建MySQL
时使用SYSCONFDIR
选项指定的目录
配置文件的内容
1 | [server] |
-
在配置文件中指定启动选项的语法类似于命令行语法,但是在配置文件中只能使用长形式的选项,而且在配置文件中指定的启动选项不允许加
--
前缀,并且每行只指定一个选项,等号=
周围可以有空白字符(在命令行中,选项名,=
,选项值之间不允许有空白字符). -
在配置文件中,可以使用
#
来添加注释,从#
出现直至行尾的内容都属于注释内容 -
在配置文件中,不同的选项组是给不同的程序使用的.如果选项组名称与程序名称相同,则组中选项将专门应用于该程序.例如,
[mysqld]
和[mysql]
组分别应用于mysqld
服务器程序和mysql
客户端程序.不过有两个选项组比较特别:[server]
组项目的启动选项将作用于所有的服务器程序[client]
组下面的启动选项将作用于所有的客户端程序
程序名 类别 能读取的组 mysqld
启动服务器 [mysqld],[server]
mysqld_safe
启动服务器 [mysqld],[server],[mysqld_safe]
mysql_server
启动服务器 [mysqld],[server],[mysqld_server]
mysql
启动客户端 [mysqld],[client]
mysqladmin
启动客户端 [mysqladmin],[client]
mysqldump
启动客户端 [mysqldump],[client]
特定MySQL
版本的专用选项组
- 可以使用选项组的名称后加上特定的
MySQL
版本号.比如对于[mysqld]
选项组来说,可以定义一个[mysqld-5.7]
,它的含义和[mysqld]
一样,只不过只有版本号为5.7的mysqld
程序才能使用这个选项组中的选项
配置文件的优先级
MySQL
将按照上述配置文件的表格中的顺序依次读取各个配置文件.如果配置文件不存在,则忽略.值得注意的是,如果我们在多个配置文件中设置了相同的启动选项,则以最后一个配置文件中的为准.
同一个配置文件中多个组的优先级
-
如果在同一个配置文件中(比如
~/.my.cnf
),在[mysqld],[server]
组里出现了同样的启动选项,将以最后一个出现在组中的启动选项为准.1
2
3
4
5[server]
default-storage-engine=InnoDB
[mysqld]
default-storage-engine=MyISAM
defaults-file
的使用
-
不想让
MySQL
到默认的路径下搜索配置文件,则可以在命令指定defaults-file
选项1
mysqld --defaults-file=/tmp/myconfig.txt
- 注意:
defaults-extra-file
和defaults-file
的区别,使用defaults-extra-file
可以指定额外的配置文件路径(也就是说那些固定的配置文件路径也会被搜索)
- 注意:
MySQL
配置参数的作用域
全局参数
1 | set global 参数名=参数值; |
会话参数
1 | set [session] 参数名=参数值; |
配置
- 在
MySQL8.x
中以下配置存在废弃配置
1 | # 数据存放相关 |
重要配置说明
innodb_buffer_pool_size
-
MySQL 8.9.39默认值为134217728B(128MB)
-
它决定了
InnoDB
存储引擎可以使用多少内存来缓存内存中的数据和索引.
RAM | 缓冲池大小(范围) |
---|---|
4GB | 1GB-2GB |
8GB | 4GB-6GB |
12GB | 6GB-10GB |
16GB | 10GB-12GB |
32GB | 24GB-28GB |
64GB | 45GB-56GB |
128GB | 108GB-116GB |
256GB | 220GB-245GB |
innodb_buffer_pool_instances
-
MySQL 8.9.39默认值为1
-
可以将
InnoDB
缓冲池划分为不同的区域,以便在不同线程读取和写入缓存页面时减少争用,从而提高并发性. -
例如,如果缓冲池为64GB,
innodb_buffer_pool_instances
的值为32,则缓冲区将被分为32个区域,每个区域的大小为2GB -
如果缓冲池大小超过16GB,则可以设置实例,以便每个区域至少获得1GB的空间.
innodb_log_file_size
-
MySQL 8.9.39默认值为50331648B(50MB)
-
它是redo log的空间大小,用于数据库崩溃时重放已提交的事务.