Mysql主从参数配置与调优
上一章节,我们介绍了如何基于GTID搭建Mysql的主从和一些常见问题,这一节我们介绍一下Mysql的常见主从参数配置。
这篇文章主要讲3个点:
基本参数配置
搭建半同步主从配置
搭建并行复制主从配置
基本参数
数据库字符集
default_character_set=utf8mb4
collation_server = utf8mb4_general_ci
character_set_server=utf8mb4
配置数据库字符集非常有必要,如果主从配置不一致会导致数据表结构不一致,严重导致数据库主从节点挂掉。
日志文件
basedir =/usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
log-error = /usr/local/mysql/data/error.log
pid-file = /usr/local/mysql/data/mysqld.pid
log-bin=mysql-bin
relay_log = mysql-relay-bin
其中log-error是错误日志,会记录项目里mysql中的错误信息;
bin-log二进制文件记录主从同步日志文件;
relay-log中继日志从库会开启多个线程从bin-log拷贝数据到自己的中继日志里;
开启慢查询日志
slow_query_log = 1
long_query_time = 2
slow_query_log_file=mysql-slow.log
查询速度超过2秒则记录进日志
GTID主从配置
gtid_mode=on
enforce_gtid_consistency=on
Bin-log同步模式
binlog_format= row
一共三种row(行更新语句)、statement(sql执行日志)、mixed(混合)
建议使用row模式,row模式能够保证主从同步一致性,其他模式在某些特殊场景会导致数据不一致。
最大查询语句包配置
max_allowed_packet=64M
查询语句包的最大尺寸,用于复杂查询,不建议使用。
会导致大事务和主从延迟。
主从高可靠配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#innodb_flush_log_at_trx_commit=2
#sync_binlog=500
主从双1配置,binlog、redo实时写入磁盘,保证数据不丢失。
如果可以接受断电少量事务数据丢失,使用2,500可以极大提高吞吐量
搭建半同步主从配置
Mysql默认使用异步同步配置,这样会导致主从数据不一致。
我们可以通过配置半同步极大程度实现主从一致。
数据库之间通过一个ack来确定是否成功写入从库,值得注意的是当使用一主多从的时候,只要有一台数据库ack,原事务就算执行成功。
具体配置
Master:
install plugin rpl_semi_sync_master soname 'semisync_master.so'; ##导入半同步master模块
set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_master_timeout=10000 # 10s
show variables like 'rpl%';
show status like 'rpl%';
Slave:
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled=1;
stop slave io_thread;
start slave io_thread;
show variables like 'rpl%';
show status like 'rpl%';
在variables 和status中可以查看到具体主从同步信息
参数详解
Rpl_semi_sync_master_clients:已连接的启用了半同步复制的从服务器数量
Rpl_semi_sync_master_net_avg_wait_time:事务提交后,等待备库响应的平均时间
Rpl_semi_sync_master_net_wait_time:等待网络响应的总次数
Rpl_semi_sync_master_net_waits:总的网络等待时间
Rpl_semi_sync_master_no_times:共有几次从Semi-sync跌回普通状态
Rpl_semi_sync_master_no_tx:库未及时响应的事务数,如果这个值很大就有问题
Rpl_semi_sync_master_status:服务器当前是否工作于半同步复制模式
Rpl_semi_sync_master_timefunc_failures:时间函数未正常工作的次数
Rpl_semi_sync_master_tx_avg_wait_time:开启Semi-sync,事务返回需要等待的平均时间
Rpl_semi_sync_master_tx_wait_time:事务等待备库响应的总时间
Rpl_semi_sync_master_tx_waits:事务等待备库响应的总次数
Rpl_semi_sync_master_wait_pos_backtraverse:改变当前等待最小二进制日志的次数
Rpl_semi_sync_master_wait_session:当前有几个线程在等备库响应
Rpl_semi_sync_master_yes_tx :表示通过半同步复制到从库的事务数
搭建并行复制主从配置
在上一篇文章中我们介绍了集中会导致从库数据同步慢于主库的场景,而具体的解决方案就是通过在从库配置并行复制。
利用多线程的特性,使加速数据同步。
配置文件中添加:
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=8
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
执行语句:
show processlist;
可以发现多了好几个线程做主从同步等待队列,代表配置成功