1、SET sql_log_bin = {0|1}
控制是否记录二进制日志,0不记录,1记录,如果主库不想该操作被同步到从库,在session中可以将sql_log_bin设置为0,sql_log_bin 可以在session级别设置,也可以在global级别设置,在session级别设置只对当前session有效,如果在global级别设置只对新的session起作用,对之前的session不起作用
2、 innodb_buffer_pool_dump_at_shutdown = {ON|OFF} 在关闭时把热数据dump到本地磁盘。在关闭MySQL时,会把内存中的热数据保存在磁盘里ib_buffer_pool文件中,位于数据目录下。只有在正常关闭MySQL服务,或者pkill mysql时,会把热数据 dump到内存。机器宕机或者pkill -9 mysql,是不会dump。
3、innodb_buffer_pool_load_at_startup = {ON|OFF} 在启动时把热数据加载到内存。
4、innodb_buffer_pool_dump_now = {ON|OFF} 采用手工方式把热数据dump到本地磁盘。
5、innodb_buffer_pool_load_abort = {ON|OFF}
6、innodb_buffer_pool_load_now = {ON|OFF} 采用手工方式把热数据加载到内存。
7、innodb_old_blocks_pct: 控制old sublist在LRU队列的长度
8、innodb_old_blocks_time:该参数决定了,当Block被插入到midpoint(old sublist)后,必须要在old sublist停留超过innodb_old_blocks_time(ms)时间后,才有可能被转移到new sublist。
9、innodb_max_dirty_pages_pct = 75 控制脏块达到什么比例进行checkpoint ,关闭数据库之前,可以手工调整@@global.innodb_max_dirty_pages_pct为比较小的数值,然后等待dity pages变少,然后restart,可以减少启动要恢复的时间
###可能会影响MySQL使用的参数
比较重要的参数:
open_files_limit 该参数用于控制MySQL实例能够同时打开使用的文件句柄数目。当打开的表数目超过该参数则会导致所有的数据库请求报错误。
[ERROR] /mysqld: Can't open file: './mysql/user.frm' (errno: 24 -Too many open files);
back_log MySQL每处理一个连接请求的时候都会对应的创建一个新线程与之对应。那么在主线程创建新线程期间,如果前端应用有大量的短连接请求到达数据库,
MySQL会限制此刻新的连接进入请求队列,由参数back_log控制。
SQLSTATE[HY000] [2002] Connection timed out;
提高此参数值的大小(注意需要重启实例),RDS在起初初始化的值的默认值是50,现在初始化值已经调大了3000。
innodb_autoinc_lock_mode 用于控制自增主键的锁机制。
建议将参数设置改为2,则表示所有情况插入都使用轻量级别的mutex锁(只针对row模式),这样就可以避免auto_inc的死锁。
同时在INSERT … SELECT,, REPLACE … SELECT 的场景下会提升很大的性能(注意该参数设置为2,binlog的格式需要设置为row)。
RECORD LOCKS space id xx page no xx n bits xx index PRIMARY of table xx.xx trx id xxx lock_mode X insert intention waiting. TABLE LOCK table xxx.xxx trx id xxxx lock mode AUTO-INC waiting;
query_cache_size 只适合读请请比较多的数据场景。写入非常频繁,并集中在某几张表上的时候,那么query cache lock的锁机制会造成很频繁的锁冲突,对于这一张表的写和读会互相等待query cache lock解锁,导致select的查询效率下降。
数据库中有大量的连接状态为checking query cache for query、Waiting for query cache lock、storing result in query cache;
一般建议关闭
query cache的打开是有一定场景的,由于query cache并不适合更新,插入,删除非常大的应用,所以打开query cache一定要慎重,数据库有大量的插入和更新的数据库打开query cache而导致整个数据库都在等待query cache的故障:
net_write_timeout 等待将一个block发送给客户端的超时时间。
参数设置过小可能导致客户端报错the last packet successfully received from the server was milliseconds ago,the last packet sent successfully to the server was milliseconds ago。
默认设置为60S。
tmp_table_size 该参数用于决定内部内存临时表的最大值。
max_heap_table_size
如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,优化查询语句的时候,要避免使用临时表。
如果复杂的SQL语句中包含了group by/distinct等不能通过索引进行优化而使用了临时表,则会导致SQL执行时间加长。
如果应用中有很多group by/distinct等语句,同时数据库有足够的内存,可以增大tmp_table_size(max_heap_table_size)的值,以此来提升查询性能。
innodb_flush_log_at_trx_commit
该参数指定了 InnoDB 在事务提交后的日志写入频率 事务提交速度要远远大于1S innodb_flush_log_at_trx_commit 刷日志缓冲区 刷日志文件到磁盘 0 1s(事务提交不操作) 1s(事务提交不操作) 1 事务提交 事务提交 2 事务提交 1s 设置为0,性能最好,但是MySQL实例挂了可能会丢1S事务 设置为1,性能最差,IO消耗比较多,默认为1 设置为2,只有操作系统挂了,才可能丢1秒事务 生产环境推荐设置为 innodb_flush_log_at_trx_commit =2
sync_binlog
sync_binlog 是 MySQL 的二进制日志(binary log)同步到磁盘的频率。MySQL server 在 binary log 每写入 sync_binlog 次后,刷写到磁盘。 如果 autocommit 开启,每个语句都写一次 binary log,否则每次事务写一次。默认值是 0,不主动同步,而依赖操作系统本身不定期把文件内容 flush 到磁盘。 设为 1 最安全,在每个语句或事务后同步一次 binary log,即使在崩溃时也最多丢失一个语句或事务的日志,但因此也最慢 生产环境推荐设置为 sync_binlog =8~10
innodb_support_xa
xa事务中需要多次fsync,所以开启后会对性能有一定影响 1、支持多实例分布式事务 2、保证binlog里事务与redo log里事务顺序一致性,了crash recovery后主从保持一致性
从库比较重要的参数:
read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户的数据修改操作;在MySQL中设置read_only=1后,普通的应用用户进行insert、update、delete等会产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数据变化的错误,但具有super权限的用户,例如在本地或远程通过root用户登录到数据库,还是可以进行数据变化的DML操作