(0)basic configuration
character-set-server=utf8 #服务器字符集编码
lower_case_table_names=1 #用来配置数据库名和表名的大小写,建议设置成1
1#表示不区分大小写
0#表示区分大小写
skip-name-resolve #禁用DNS解析, ip解析成主机名
max_connections = 10000 #最大连接数
(1)锁相关
innodb_lock_wait_timeout=50 #innodb等行锁, 支持set global 全局修改,实时生效;
lock_wait_timeout=50 #server层行锁,支持set global 全局修改,实时生效;
innodb_autoinc_lock_mode=2 #默认insert..select是申请自增id只有等语句执行完才会释放锁, 为了提高并发性, 申请完成自增id就释放锁,为了保证数据的一致性, 需要同时设置二进制日志格式为row,binlog_format=row
0 #语句执行结束后才释放锁
1 #普通的insert语句, 自增锁在申请之后就马上释放; 类似insert..select这样的批量插入数据的语句, 自增锁还是需要等语句结束后才被释放;
2 #所有的申请自增主键的动作都是申请后就释放锁; ![]
(2)innodb
innodb_file_per_table=ON|OFF #默认为ON, 建议初始化mysql还是为ON,
ON:#表的数据放在系统共享表空间, 也就是和数据字典放在一起, 如果删除行数据, 共享表空间无法回收;
OFF:#每个innodb表数据存储在一个以.ibd为后缀的文件中
innodb_buffer_pool_size=128M #默认为128M,建议设置成物理内存的70%
(3)redo log
innodb_flush_log_at_trx_commit=0|1|2 #每次事务的redo log都直接持久化到磁盘
#设置为0的时候, 表示每次事务提交都只把redo log留在redo log buffer中,如果主机掉电,会丢失数据;
#设置为1的时候, 表示每次事务提交都把redo log持久化到磁盘中;
#设置为2的时候,表示每次事务提交都只把redo log写到page cache中, 如果主机掉电,会丢失数据;
innodb_support_xa=ON #两段式提交
innodb_log_file_size=1G #指定redo log文件的大小, 注意redo log文件过小, redo log写满, 要flush脏页, 整个系统不能更新
innodb_log_files_in_group=4 #指定redo log文件数据, 默认是2, 如果空间足够,建议设置为4
innodb_log_group_home_dir=./ #指定redo log所在路径, 默认是./ 也就是数据目录下
(4)binlog
sync_binlog=0|1|N #如果不想数据库断电设置为1,事务执行过程中, 先把二进制日志写到binlog cache中暂存; binlog cache由binlog_cache_size参数决定, 超过暂存磁盘
0: #表示每次提交事务把binlog cache中的日志写到文件系统的page cache内存中,不写到磁盘, 但是磁盘文件还能看到记录, 其实是从文件系统的page cache中读取的;
1: #表示每次事务的binlog都持久化到磁盘
N: #表示每次提交事务都会写到文件系统的page cache中, 但累计到N个事务后在写到磁盘中;、
binlog_format=statement|row|mixed #指定二进制日志文件格式,建议生产环境使用row格式, 如果delete, update, insert语句误操作, 可以使用脚本逆向恢复数据
statement: #只会记录用户输入的sql语句
row:#同一个sql语句修改了10000条数据的情况下, 基于行的额日志会有10000条记录分别记录每一行的数据修改
mix: #mysql自己会判断这条sql语句是否可能引起主备不一致, 如果有可能, 就用row格式, 否则用statement格式
max_binlog_size=1073741082 #指定二进制日志文件大小, 默认为1G
log-bin=mysql-bin|/path/file #开启二进制日志, 文件名或二进制日志保存路径
expire_logs_days = 7 #设置二进制日志的有效期
(5)slow log
slow_query_log = 1 #是否开启慢查询日志
long_query_time = 1 #超过1秒钟, 就认为是慢查询, 并记录到日志文件中
slow_query_log_file = /path/to/file #慢查询日志保存路径
(6)Replication availability , 用于主从复制中, 复制从节点;
relay-log-info-repository=TABLE #可以避免relay.info更新不及时,SLAVE 重启后导致的主从复制出错, apply event和更新relay_log_info表的操作被包含在同一个事务里,innodb要么让它们同时生效,要么同时不生效,保证位点信息和已经应用的事务精确匹配
relay_log_recovery=1 #会抛弃master_log_info中记录的复制位点,根据relay_log_info的执行位置重新从Master获取binlog,当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。MySQL启动时,会从relay log文件中获取已接收的GTIDs并更新Retrieved_Gtid_Set。由于relay log文件可能不完整,所以需要抛弃已接收的relay log文件。因此relay_log_recovery = ON也是必须的。
sync_relay_log=1 #这个参数和sync_binlog是一样的,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入中继日志里
sync_relay_log_info=1 #执行的relay位置, 可以实时同步到对应的文件中和对应的表中,如果slave重启, 数据库会根据执行过的relay log(已执行过的事务)之后事件执行sqlmaster-info-repository=TABLE #默认
(7)flush
innodb_io_capacity=3500 #该值是告诉innodb的磁盘iops能力, 如果太小, 会导致刷脏页较慢, 会影响查询
innodb_flush_neighbors=0 #刷脏页的是否把隔壁的脏页也刷到磁盘, 0表示不刷,1表示刷, 默认是开启的, 如果是固态硬盘建议设置成0