查看Mysql服务器读取参数的顺序:
mysqld --help --verbose | grep -A 1 'Default options'
# 另外,通过启动参数设置的参数的优先级最高
设置全局参数:
set global name=value;
set @@global.name=value;
设置会话参数
set [session] name=value;
set @@session.name=value;
查看参数
show variables like 'Innodb_log_files_in_group';
内存相关参数
-
每个线程使用的排序缓冲区的大小(排序的时候就会分配这个大小的内存):
sort_buffer_size
-
连接缓冲区的大小:
join_buffer_size
-
myIsam进行全表扫描时分配的读缓冲区大小(一次性分配):
read_buffer_size
-
索引缓冲区的大小(查询时分配需要的大小):
read_rnd_buffer_size
-
InnoDB缓存池大小:
Innodb_buffer_pool_size
总内存 - (每个线程需要的内存 * 连接数) - 系统保留内存
关闭Mysql服务器时会先将InnoDB缓存池中的数据刷到磁盘
-
主要用于MyIsam存储引擎的缓存池(Mysql的系统表还在使用MyIsam存储引擎):
key_buffer_size
IO相关参数
InnoDB相关配置
-
单个事务日志的大小:
Innodb_log_file_size
-
事务日志文件个数(主要是用于多线程读写):
Innodb_log_files_in_group
-
日志缓冲区的大小(事务日志会先存到缓冲区,再刷到磁盘,缓冲区能够保存一秒的事务日志即可):
Innodb_log_buffer_size
-
事务刷到磁盘的频率:
Innodb_flush_log_trx_commit
。0:每秒进行一次log写入cache,并flush log到磁盘(系统宕机会导致一秒的事务日志丢失)
1:默认,每次事务都将log写入cache并flush log到磁盘(不会丢失任何日志,性能最差)
2:建议,每次事务提交后,都将log写入cache并flush log到磁盘(可能丢失一个事务的日志) -
InnoDB刷新的方式:
Innodb_flush_method
设置InnoDB日志文件和数据文件如何与系统交互。建议设置为
O_DIRECT
,操作系统不缓存和预读数据,避免操作系统和InnoDB双重缓存 -
设置InnoDB如何使用表空间:
Innodb_file_per_table
ON:为InnoDB建立一个单独的表空间
-
设置InnoDB是否使用双写缓存:
Innodb_doublewrite
1:启用,避免页没有写完整而导致的数据损坏
MyIsam相关配置
-
控制关键字缓存中的数据什么时候刷到磁盘:
delay_key_write
OFF:关闭,每次操作后刷新键缓存中的脏块到磁盘
ON:只对再建表时指定了delay_key_write选项的表使用延迟刷新
ALL:对所有MyIsam表使用延迟键写入
安全相关参数
-
自动清理binlog的天数:
expire_logs_days
一般设置为7天
-
mysql可以接收的包大小:
max_allowed_paclet
可以设置的大一点(32M),对于主从服务器,参数应该保持一致,以免同步失败
-
禁用DNS查找:
skip_name_resolve
连接服务器时,默认情况下,mysql会试图确认mysql客户端的域名,需要进行DNS的正向和反向查找,一旦DNS服务器出现异常,会导致查询堆积,从而导致连接超时。禁用后,只能对特点的ip或ip段进行授权
-
设置sysdate()返回的日期:
sysdate_is_now
-
禁止非super权限用户写权限:
read_only
建议在从服务器使用这个参数
-
禁用slave自动恢复:
skip_slave_start
在从服务器上使用,禁止mysql在重启后自动复制,防止数据库崩溃重启后自动复制。
-
设置sql模式:
sql_mode
struct_trans_tables
no_engine_subtitution
no_zero_date
no_zero_in_date
only_full_group_by
其他参数
-
设置mysql如何向磁盘刷新binlog:
sync_binlog
0:默认,操作系统决定
>0:间隔多少次写操作后刷到磁盘(一次事务有一次写操作),主服务器建议设为1 -
控制内存临时表大小:
tmp_table_size
,max_head_table_size
建议不要设置太大,并保持一致
-
允许的最大连接数:
max_connections
根据应用和内存,可以设置大一些