MySQL初识复制

MySQL复制简介

  • 从MySQL 3.23.x版本开始支持
  • 利用复制,添加从库,通过从库提升读的能力及主库故障,可以从从库里提升出来一个新的主库,从而达到高可用的目的。
  • 目前MySQL为了支持多引擎的主从复制,引入了一个binary log,所有引擎的复制都是基于binary log实现
  • 现在标准的选择:Row+GTID复制

理解binary log

  • 根据日志格式复制分
  • 根据日志定义的格式不一样,可以分为:Statement(SBR)格式,Row(RBR)格式或是MIXED格式,参数为binlog_format
  • 记录最小的单位是一个Event,日志前4个字节是一个magic number,接下来19个字节记录Format desc event:FDE
  • 一个事物由多个Event组成
  • bin log相关的包含:binary log和binary log index文件
  • MySQL5.6增加了GTID复制

statement格式

  • 基于语句级的复制
  • binlog_format=statement
  • 优点:
    • bin log文件较小
    • 日志是包含用户执行的原始SQL,方便统计和审计
    • 出现最早,binlog兼容较好
    • binlog阅读方便,故障修复方便
  • 缺点:
    • 存在安全隐患,可能导致主从不一致
    • 对一些系统函数不能准确复制或是不能复制
      • load_file()
      • uuid()
      • user()
      • found_rows()
      • sysdate()
      • now()
      • ...

Row格式

  • Row格式,基于行级的复制
  • binlog_format=row
  • 优点:
    • 相比statement更加安全的复制格式
    • 在某些情况下复制速度更快(SQL复杂,表有主键)
    • 系统的特殊函数也可以复制
    • 更少的锁
  • 缺点:
    • binary log比较大(支持binlog_row_image)
    • 单语句更新[删除]表的行数过多,会形成大量binlog
    • 无法从binlog看见用户执行的SQL(Event:binlog_row_query_log_events,记录用户的query)
row复制解析

mixed格式

  • 基于混合复制模式
  • binlog_format=mixed
  • 混合使用ROW和Statement格式,对于DDL记录会Statement,对于table里的行操作记录为ROW格式
  • 如果使用innodb表,事物级别使用了read committed or read uncommitted日志级别只能使用Row格式
  • 但在使用Row格式中DDL语句还是会记录成Statement格式
  • Mixed模式,那么在以下几种情况下会自动将binlog的模式有SBR改成RBR模式
    • 当DML语句更新一个NDB表时
    • 当函数中包含UUID()时
    • 2个及以上包含auto_increment字段的表被更新时
    • 行任何insert delayed语句时
    • 用UDF时
    • 视图中必须要求使用RBR时,例如创建视图时使用了UUID()函数

GTID

  • GTID
    • Global transaction identifiers
    • 一个事物对应一个唯一ID
    • 一个GTID在一个服务器上只会执行一次
    • GTID是用来替代以前classic的复制方法
    • MySQL-5.6.2支持,MySQL-5.6.10后完善
    • GTID组成
      • server_uuid:sequence_number
[mysqld]
#GTID
gtid_mode=on
enforce-gtid-consistency=on
#bin log
log-bin=mysql-bin
log-slave-updates=1

基于binary log+file position方式的复制

  • server-id在同一个复制结构里不能出现冲突
  • server-id建议ip最后一位加端口号的方式
master:
[mysqld]
log-bin=mysql-bin
server-id=1003306
slave:
[mysqld]
server-id=1013306
  • 创建复制用的账号
mysql>create user 'repl'@'%' identified by 'repl4slave';
mysql>grant replication slave on *.* to 'repl'@'%';

提示:确认GTID关闭

mysql>show global variables like 'gtid_moed';
gtid_mod=off
  • 在主库上做备份
    • mysqldump --master-data=2 --single-transaction -A > db_`%Y%m%d`.sql
  • slave
    • mysql < ./db_20170515.sql
  • more ./db_20170515.sql
slave >change master to master_host='masterip',
master_port=3306,
master_user='repl',
master_password='repl4slave',
master_log_file='mysql-bin.xxxx',
master_log_pos=xxxx;
  • slave>start slave;
  • slave>show slave status\G

GTID环境搭建

msater:
[mysqld]
log-bin=mysql-bin
server-id=1003306
gtid-mode=on
enforce-gtid-consistency=1
slave:
[mysqld]
server-id=1013306
gtid-mode=on
enforce-gtid-consistency=1
  • 创建复制用的账号
mysql>create user 'repl'@'%' identified by 'repl4slave';
mysql>grant replication slave on *.* to 'repl'@'%';

备份文件的名称格式:dbname-port-full|incr-`%Y-%m%d-%h%m`.sql

备份时-A参数并不能全部包括,如果要全部备份要加上--all-databases --triggers --routines --events,备份时建议将表结构,数据文件,触发器,存储过程,事件分开来备份

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

推荐阅读更多精彩内容

  • 环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6....
    思梦PHP阅读 2,043评论 0 12
  • 坚持100天写作Day 32文/梁莹 今天是感恩节,想要感谢的人和事还真的很多很多,恐怕几天几夜都说不完。今天想先...
    梁瑩阅读 582评论 1 49
  • 简单介绍一下正则表达式,操作字符串,用它,因为 方便 , 效率 极高。但是新手工作中不推荐使用,用错了会很麻烦...
    backgrounds阅读 322评论 0 0
  • 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发。 根据项目需求,项目结构如下: web...
    木坦坦阅读 557评论 0 0