MySQL获取配置信息路径
- 命令行参数
mysqld_safe --datadir=/data/sql_data - 配置文件
mysqld --help --verbose | grep -A 1 'Default options'
/etc/my.cnf /etc/mysql/my.cnf /home/mysql/my.cnf ~/.my.cnf 读取配置文件顺序
MySQL配置参数的作用域
全局参数(在客户端下执行)
set global 参数名=参数值;
set @@global.参数名 :=参数值;会话参数
set [session] 参数名=参数值;
set @@session.参数名 := 参数值;
注意:有的全局参数修改之后,只对之后的session生效,对之前的session不生效。
实际栗子:我们需要创建两个session
首先我们查看时间参数
MySQL [test]> show variables where variable_name = 'wait_timeout' or variable_name = 'interactive_timeout';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout | 28800 |
+---------------------+-------+
2 rows in set (0.00 sec)
我们在其中一个会话中调整这两个参数值,注意一点就是,这两个参数值要一起设置才能生效,否则,系统会采取最大值当作所有的值。
MySQL [test]> set global wait_timeout = 38800;set global interactive_timeout = 38800;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
现在我们去另一个会话:
MySQL [test]> show variables where variable_name = 'wait_timeout' or variable_name = 'interactive_timeout';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout | 28800 |
+---------------------+-------+
2 rows in set (0.00 sec)
我们发现现在的参数并没有改变,这是因为参数是在会话建立之后修改的。
我们把当前会话退出,重新登陆,查看参数值。
MySQL [(none)]> show variables where variable_name = 'wait_timeout' or variable_name = 'interactive_timeout';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 38800 |
| wait_timeout | 38800 |
+---------------------+-------+
2 rows in set (0.01 sec)
这时我们发现,参数已经修改。
内存配置相关参数
- 确定可以使用的内存上限
- 确定MySQL的每个连接使用的内存
sort_buffer_size join_buffer_size
read_buffer_size read_rnd_buffer_size (这些都是为单个线程分配的) - 确定需要为操作系统保留多少内心
- 如何为缓冲池分配内存
Innodb_buffer_pool_size
总内存 - (每个线程所需要的内存*连接数) -系统保留内存
key_buffer_size