(5.3)mysql高可用系列——mysql复制之复制的参数
参考:https://www.iteye.com/blog/shift-alt-ctrl-2269539
详情
【1】参数
#【1.1】基本参数
bind-address=192.168.1.201
server_id=2013306 #主从不相同,建议IP+端口
#skip_name_resolve=off #跳过主机名/域名解析
transaction-isolation=read-committed #事务隔离级别设置成RC
#【1.2】binlog二进制日志参数
log_bin=/mysql/log/3306/binlog/mysql-bin
log_bin_index=/mysql/log/3306/binlog/mysql-bin.index
binlog_format=row #行格式,必须
binlog_row_query_log_events=on #二进制日志中记录更详细的SQL操作
sync_binlog=1 #默认,MySQL每次提交事务之前会将二进制同步到磁盘上
innodb_flush_log_at_trx_commit=1 #默认,每次事务提交时MySQL都会把log Buffer写入log fiel,并且flush到磁盘。
log_bin_trust_function_creators=1 #默认为0,该参数是同步函数和存储过程
max_binlog_size=2048M #默认为1024M
expire_logs_days=7 #binlog保留多少天,看具体安排
binlog_cacahe_size=1M #默认32K,binlog缓存大小,设置时要当心,根据业务繁忙情况建议1-4M。
innodb_support_xa=1 #这个参数是在主库上设置的,默认自动开启。分布式事务参数。
#这个参数确保事务日志写入binlog的顺序是与事务的time-line是一致的。
# 【1.3】关于relay_log中继日志参数
relay_log=/mysql/log/3306/relaylog/mysql-relay.log
relay-log-recover=1
#该参数为了实现 ,I/O thread crash safe #IO线程安全
#打开replication中继日志崩溃恢复模式,replication支持中继日志的自我修复功能。
#当slave从库宕机后,如果replay-log发生损坏,导致一部分中继日志没有处理,就自动放弃未执行的replay-log。
#在slave崩溃或正常启动时,未应用完的relay_log会被删掉,重新从master请求binlog再次生成自上一个完全应用点后的位置拉取relay_log
relay_log_info_repository=table
#该参数为了实现,SQL thread crash safe #SQL线程安全
#默认是file,SQL线程的数据回放是写数据库操作,relay-info是写文件操作,这2个操作很难保证一致性,relay-info将写入到 mysql.slave_relay_log_info 这张表
master_info_repository=table
#默认是file,io线程也是接受一个个的event,将接收到的event,通过设置参数#master_info_repository可以将master-info信息写到什么位置,性能上比设置为file有很高的提升,可靠性也得到保证。
#设置为table后,master-info将信息保存到mysql.slave_master_info
#【1.4】关于同步方式的参数
loose_rpl_semi_sync_master_enabled=1 #MySQL开启主的半同步复制(rpl_semi_sync_master_enabled)
loose_rel_semi_sync_slave_enabled=1 #MySQL5.6开启从的半同步复制
loose_repl_semi_sync_master_timeout=5000 #超时5秒,切回异步
rpl_semi_sync_master_wait_for_slave_count=1 #有多少个从返回标识就可以提交:一主多从的情况下只要有1个slave的ACK返回给了主库,就会进行commit
rpl_semi_sync_master_wait_point=AFTER_SYNC #MySQL 5.7的方法,AFTER_SYNC(default,增强半同步) & AFTER_COMMIT(传统半同步)
#rpl_semi_sync_master_wait_point= #MySQL 5.7的方法:开启半同步复制
#【1.5】关于GTID的参数
gtid_mode=on #开启GTID
#(1)on:产生GTID,slave只接受带GTID的事务 (2)on_permissive:产生GTID,slave接受不带GTID的事务也接受带GTID的事务
#(3)off:不产生GTID,slave只接受不带参GTID的事务 (4)off_permissive:不产生GTID,slave接受带GTID也接受不带GTID的事务
log_slave_updates=1 #从库relay log中的重做记录在从库的binlog上记录,如果多个从库在主从切换时建议关掉,避免传输重复日志导致同步错误
enforce_gtid_consistency=1 #on:当发现语句/事务不支持GTID时,返回错误信息 WARN:发现不支持返回警告 #off:不检查
gtid_next:automatic #获取指定的GTID下一个值
session_track_gtids #捕获跟踪GTID事务信息,默认off,OWN_GTID:返回当前事务的GTID,ALL_GTIDS:返回系统执行的所有GTID(GTID_EXECUTED)
binlog_gtid_simple_recovery=1 #5.7.6以下默认off,5.7.6以上默认on 1. 这个变量用于在MySQL重启或启动的时候寻找GTIDs过程中,控制binlog 如何遍历的算法? 2. 当binlog_gtid_simple_recovery=FALSE 时: 为了初始化 gtid_executed,算法是: 从newest_binlog -> oldest_binlog 方向遍历读取,如果发现有Previous_gtids_log_event , 那么就停止遍历 为了初始化 gtid_purged,算法是: 从oldest_binlog -> newest_binlog 方向遍历读取, 如果发现有Previous_gtids_log_event(not empty)或者 至少有一个Gtid_log_event的文件,那么就停止遍历 3. 当binlog_gtid_simple_recovery=TRUE 时: 为了初始化 gtid_executed , 算法是: 只需要读取newest_binlog 为了初始化 gtid_purged, 算法是: 只需要读取oldest_binlog 4. 当设置binlog_gtid_simple_recovery=TRUE , 如果MySQL版本低于5.7.7 , 可能会有gitd计算出错的可能,具体参考官方文档详细描述
#【1.6】关于复制过滤参数
主:
binlog-do-db=db_name #binlog只把该库的操作记录到binlog,每一行一个数据库,多个数据库需要另起行
binlog-ignore-db=db_name #表示忽略某个数据库,除了这个数据库之外都复制,每一行一个数据库,多个数据库需要另起行
从:
replicate_do_db=db_name #只复制某个库,每个库一行,多个库需要另起行
replicate_do_db=db_name #不复制某个库,每个库一行,多个库需要另起行
replicate_do_table=table_name #只复制某个表
replicate_wild_do_table=table_name #解决跨库更新问题,需要与 replicate_do_table 同时使用
replicate_ignore_table #不复制某个表
replicate_wild_ignore_table #解决跨库更新问题,需要与 replicate_ignore_table同时使用
#原因是,设置relicate_do_db或relicate_ignore_db后,MySQL执行sql前检查的是当前默认的数据库,所以跨库更新语句会在slave上被忽略。
#如果从库是要在线复制过滤,stop slave; CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('erp_ivedeng_com.T_BRAND','erp_ivedeng_com.T_DEPARTMENT_FEE_ITEMS');
7.其他重要参数
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
read_only=1
slave_skip_errors=ddl_exist_errors
slave_preserve_commit_order=1
#mysql5.7GA 版本推出的 Enhanced Multi-threaded Slaves功能
#彻底解决了之前版本主备数据复制延迟的问题,开启并行复制(multi-threaded slave)
--------------------------------------------参数释义-----------------------------------
slave-parallel-type=LOGICAL_CLOCK
区别了解参考:https://www.cnblogs.com/langdashu/p/6125621.html
#(1)DATABASE:兼容MySQL5.6基于 schema级别的并发复制
#(2)MySQL5.7 默认值是基于库的并行复制方式。即 LOGICAL_CLOCK:基于组提交的并行复制方式;组提交,是一堆食物的集合,减轻IO压力。
slave-parallel-workers # 4个SQL Thread 来进行并行复制(应用回放线程,即应用relay log的线程),可以动态调整复制线程数(直接设置此全局变量,且一定要重启slave线程)
read_only 与 super_read_only #在slave设置之后只能读不能写但super可以,除非设置super_read_only,super_read_only 包含 read_only
slave_skip_errors
#默认为off,选项一共有4个,off,all,ErrorCode,ddl_exist_errors(mysql5.6、mysql cluster ndb7.3后添加该参数).
#ddl_exist_errors 包含了一系列error code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)等
slave_preserve_commit_order # Slave 上 commit的顺序保持一致,必须为1,否则可能会有GAP锁产生