复制中的参数介绍

复制中的重要参数

master上的参数

  • log-bin
  • server-id #必须 建议端口+ip
  • server-uuid #在$datadir/auto.cnf中,5.6后才有的
  • log-bin-index #mysql-bin.index
  • binlog_format
  • binlog_cache_size
  • max_binlog_size
  • sync_binlog
  • expire_logs_days
  • log_bin_trust_function_creators

参数解析

  • server_id
    • 是唯一区别ID,同一个集群内不可重复,可动态修改,从5.6开始
    • 可以动态修改
  • log-bin-index
    • 索引文件前缀名,和log-bin一样,也可以是fullpath
    • 不可动态修改
  • binlog_format
    • 是binlog日志格式,有statement,row,mixed三种
    • 可动态修改
  • binlog_cache_size
    • 是binlog写入buffer,1-2M
  • max_binlog_size
    • 限制单个binlog大小
    • 默认情况下是1G,binlog控制最小生成时间间隔要大于2分钟,不能太小,默认1G有点大不好解析,推荐128M,或者256M
    • 可动态修改
  • sync_binlog=N
    • 交易系统为了安全:设置成1
    • 意思是多少个SQL之后,调用fdatasync()函数刷新binlog到disk
    • 可动态修改
    • fsync()是完全刷新到磁盘,fdatasync()指刷新数据,不刷新metadata
  • expire_logs_days=n
    • 推荐保存7天
    • n天后自动删除binlog
    • 可动态修改
  • log_bin_trust_function_creators=1
    • 设置成1就可以了
    • 开启binlog时,是否允许创建存储程序(除非有super群贤,或者指定DETERMINISTIC,READS SQL DATA,NO SQL)
    • 可动态修改
  • 功能性参数
    • binlog_row_image :5.6.2后出现
      • 默认是full,binlog写入全部列
      • minimal #binlog写入改变的列,不改变的列不写入
      • noblob #写入全部的列,除了没更新的BLOB和TEXT这种大字段的列
    • Binlog_rows_query_log_events :5.6.2后出现
      • 开启后会将用户原始输入的SQL记录到binlog中,方便审计,按需开启
    • 早期参数名Binlog_impossiable_mode,5.7以后为binlog_error_action
      • 当不能写binlog时,当值为ABORT_SERVER可以报错
      • 默认没开启:IGNORE_ERROR,可以改成ABORT_SERVER

特殊说明

  • log_warnings
    • 如果这个值设置的大于1,会在错误日志里看到异常断开的连(Aborted connection)或是被拒绝的请求
  • Crash Recovery
    • 基于MySQL5.6GTID的Crash Recovery是MySQL5.6.21支持,5.6.23开始稳定
      • 传统复制也可以支持,需要修改两个参数
        • master_info_repository改成table
        • relay_log_info_repository改成table
      • 这个特性的原理是当从库crash后,重新启动起来不在将自己的relay-log执行完再去主库拉取日志,是查看relay-master-log-file和exec-master-log-pos这两个值,直接去主库拉取这个值后面的日志载执行复制
  • MySQL5.6.5和MySQL5.7.5以后binlog变成了v2格式,因为引进了GTID和binlog_checksum
    • 如果有需求从5.5升级到5.6或者5.7是可以升级的,但要回滚版本就会出问题了,需要将两个参数设置
      • binlog_checksum = none
      • log_bin_use_v1_row_events = on #binlog用v1版本的
      • 如果之后升到5.6之后,最好还是改回去

master其他参数

  • auto_increment_increment
    • 每次自增的步长
  • auto_increment_offset
    • 自增起始偏移量
  • binlog-do-db(特别声明:所有的过滤条件规则不建议在主库设置)
    • binlog记录db,除此外,其他db上的binlog都不记录,存在风险
    • binlog-do-db=hetan情况下
    • use mysql;update hetan.t1 set user='user2' where id=1;这个记录会记录到binlog中吗?
      • SBR模式下,这个SQL不会记录到binlog,这会导致主从不一致,而在RBR模式下则会被记录
  • binlog-ignore-db
    • 和上面的规则相反
    • binlog-ignore-db=hetan
    • use hetan;update mydb.t1 set user='user2' where id=1;
      • SBR:不记录,RBR记录
  • max_binlog_cache_size
    • binlog最大的cache size,有大SQL写入时需要用到,或者大数据load data时
  • binlog_stmt_cache_size
    • 用于cache那些事物中非事物表产生的SQL语句,如果经常在事物中涉及到非事物表,需要加大该参数
  • max_binlog_stmt_cache_size
    • 用于cache那些事物中非事物表产生的SQL语句,最大cache
  • binlog_direct_non_transaction_updates
    • 事物中既有事物表,也有非事物表,发生数据变更时,非事物表会直接写binlog,而不是也和事物表一样缓存在buffer中
    • 这个参数只影响SBR模式,RBR,MBR都不受影响
  • 针对gtid的参数
    • gtid_mode
      • 用于控制是否启用GTID
      • 如果设置成on,则必须是log-bin,log-slave-updates,enforce_gtid_consistency也要启动
    • enforce_gtid_consistency
      • 如果开启GTID必须要把这个选项打开
      • 用于控制只有事物安全的语句才能被记录到log中
    • gtid_next
      • 用来指定下一个要执行的事物,设置这个变量需要有super权限
    • gtid_purged
      • 用于指定那个事物从binlog忽略了,reset master这个值会被清空
    • gtid_executed
      • 执行到的GTID号及所有执行过得gtid号,和Executed_Gtid_set输出的这列意思是一样的
      • Reset master这个值会被清空

slave上的参数

  • server-id
    • 同上
  • server-uuid
    • 同上
  • relay-log
    • io thread读取过来存储到本地的日志
  • relay-log-index
    • relaylog索引文件前缀名,和relay-log一样,也可以是fullpath
    • 不可动态修改
  • read-only
    • 设置从库为只读,但对super权限的用户不起作用
    • 可动态修改
  • log_slave_updates
    • 将master传输过来的变更操作,再次记录成本地的binlog,用于做二次复制,当做中继分发点

slave其他参数

  • log-slow-slave-statements
    • slave复制产生的slow log,是否要记录的慢日志
  • max_relay_log_size
    • 限制relay log的大小,一般128M就可以
  • master-info-file/relay-log-info-file
    • 记录relay log的最新信息,master.info
  • sync_master_info=n
    • 多少个事物/事件后调用fdatasync()刷新master.info文件
  • relay_log_purge
    • relay应用完后,是否自动立即删除
  • relay_log_recovery
    • slave崩溃或正常重启时,未应用完的relay log会被删掉,重新从master请求binlog,再次生成relay log
  • replicate-same-server-id
    • slave复制是否应用和自己相同server-id的binlog,和log-slave-updates选项互斥
  • skip-slave-start
    • mysqld实例启动时,不跟着启动slave线程
  • slave_load_tmpdir
    • slave复制中遇到load data file 时使用的tmpdir
  • slave_transaction_retries
    • slave复制中,如果因为innodb死锁或者锁超时导致复制线程执行非事物失败重试次数,一般保持默认就可以
  • slave_parallel_workers
    • 库并发控制
    • 默认是关闭的
  • relay_log_space_limit
    • 防止relay_log过多将磁盘占满,可以设置这个参数,一般没有问题就不需要设置
  • 以下三个参数和早期版本的show slave hosts有关,5.7版本不设置也可以查看,建议不设置
    • report_password #建议不配置
    • report_port #建议不配置
    • report_user #建议不配置

slave过滤参数

  • 可以在线修改
    • change replication filter语句
  • replicate-do-table
    • 只复制指定的表
  • replicate-ignore-table
    • 忽略指定的表
  • replicate-rewrite-db
    • 如果master和slave有个库同名了,那么可以采用rewrite规则,将这个库上的复制重写到另一个新的库名上
  • replicate-wild-do-table
    • 以通配符形式指定复制哪些table
  • replicate-wild-ignore-table
    • 以通配符的形式指定不复制哪些table
  • replicate-do-db
    • 只复制指定的库
  • replicate-ignore-db
    • 忽略指定的库
  • slave_net_timeout
    • slave连接master超时时长
    • 建议调成20-30秒
  • slave_skip_errors
    • slave复制中,忽略某些错误
    • 常见的有:
      • 1032
      • 1053
      • 1062
      • 1050
      • 1051
      • 1054
      • 1146
      • all #全部错误
  • sql_slave_skip_counters
    • 忽略多少个复制事件,遇到个别错误(主键冲突,记录不存在等)时,可以忽略这些事件,继续复制进程

为了使用crash-safe replication功能,必须使用:

  • relay_log_info_repository=table
  • relay-log-recovery=1
  • 使用支持事物的引擎
  • 在slave故障挂掉起来后,在设置了relay-log-recovery=1时,会清理掉已经存在的relay-log,从relay_log_info_repository里读到的同步位置,重新请求一份relay-log,实际上是做了一次:把Read_Master_Log_Pos设置为Executed_Master_Log_Pos,Master_Log_file设置成Relay_Master_log_file
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容