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操作