MySQL-lesson9--主从复制高级进阶

1. 延时从库

1.1介绍

是我们认为配置的一种特殊从库.人为配置从库和主库延时N小时.

1.2 为什么要有延时从

数据库故障?物理损坏主从复制非常擅长解决物理损坏.逻辑损坏普通主从复制没办法解决逻辑损坏

1.3 配置延时从库

SQL线程延时:数据已经写入relaylog中了,SQL线程"慢点"运行一般企业建议3-6小时,具体看公司运维人员对于故障的反应时间mysql>stop slave;mysql>CHANGE MASTER TO MASTER_DELAY=300;mysql>start slave;mysql>show slave status \GSQL_Delay:300SQL_Remaining_Delay:NULL

1.4 延时从库应用

1.4.1 故障恢复思路

1主1从,从库延时5分钟,主库误删除1个库1. 5分钟之内 侦测到误删除操作2. 停从库SQL线程3. 截取relaylog起点 :停止SQL线程时,relay最后应用位置终点:误删除之前的position(GTID)4. 恢复截取的日志到从库5. 从库身份解除,替代主库工作

1.4.2 故障模拟及恢复

1.主库数据操作db01 [(none)]>create database relay charset utf8;db01 [(none)]>use relaydb01 [relay]>create table t1(id int);db01 [relay]>insert into t1values(1);db01 [relay]>drop database relay;

2. 停止从库SQL线程stop slave sql_thread;

3.找relaylog的截取起点和终点起点:Relay_Log_File:db01-relay-bin.000002Relay_Log_Pos:482终点:show relaylog eventsin'db01-relay-bin.000002'| db01-relay-bin.000002|1046| Xid            |7|2489| COMMIT/* xid=144 */|| db01-relay-bin.000002|1077| Anonymous_Gtid |7|2554| SET @@SESSION.GTID_NEXT='ANONYMOUS'|mysqlbinlog--start-position=482--stop-position=1077/data/3308/data/db01-relay-bin.000002>/tmp/relay.sql

从库恢复relaylog

source /tmp/relay.sql

5.从库身份解除

db01 [relay]>stop slave;db01 [relay]>reset slave all

2. 半同步            ***

解决主从数据一致性问题

2.1 半同步复制工作原理的变化

1.主库执行新的事务,commit时,更新 show master  status\G,触发一个信号给2.binlog dump 接收到主库的 show master status\G信息,通知从库日志更新了3.从库IO线程请求新的二进制日志事件4.主库会通过dump线程传送新的日志事件,给从库IO线程5.从库IO线程接收到binlog日志,当日志写入到磁盘上的relaylog文件时,给主库ACK_receiver线程6.ACK_receiver线程触发一个事件,告诉主库commit可以成功了7.如果ACK达到了我们预设值的超时时间,半同步复制会切换为原始的异步复制.

2.2 配置半同步复制

加载插件主:INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';从:INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';查看是否加载成功:show plugins;启动:主:SET GLOBAL rpl_semi_sync_master_enabled=1;从:SET GLOBAL rpl_semi_sync_slave_enabled=1;重启从库上的IO线程STOP SLAVE IO_THREAD;START SLAVE IO_THREAD;查看是否在运行主:show status like'Rpl_semi_sync_master_status';从:show status like'Rpl_semi_sync_slave_status';

3 . 过滤复制

3.1 说明

主库:

show master status;Binlog_Do_DBBinlog_Ignore_DB

从库:

show slave status\GReplicate_Do_DB:Replicate_Ignore_DB:

3.2 实现过程

mysqldump-S/data/3307/mysql.sock-A--master-data=2--single-transaction-R--triggers>/backup/full.sqlvim/backup/full.sql--CHANGEMASTERTOMASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;[root@db01~]# mysql-S/data/3309/mysql.sock source/backup/full.sqlCHANGEMASTERTOMASTER_HOST='10.0.0.51',MASTER_USER='repl',MASTER_PASSWORD='123',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154,MASTER_CONNECT_RETRY=10;start  slave;[root@db01~]# vim/data/3309/my.cnf replicate_do_db=pptreplicate_do_db=word[root@db01~]# systemctl restart mysqld3309主库:Master[(none)]>create database word;QueryOK,1row affected(0.00sec)Master[(none)]>create database ppt;QueryOK,1row affected(0.00sec)Master[(none)]>create database excel;QueryOK,1row affected(0.01sec)

4. GTID复制

4.1  GTID引入

4.2 GTID介绍

GTID(Global Transaction ID)是对于一个已提交事务的唯一编号,并且是一个全局(主从复制)唯一的编号。它的官方定义如下:GTID=source_id :transaction_id7E11FA47-31CA-19E1-9E56-C43AA21293967:29什么是sever_uuid,和Server-id 区别?核心特性:全局唯一,具备幂等性

4.3 GTID核心参数

重要参数:

gtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1gtid-mode=on                        --启用gtid类型,否则就是普通的复制架构enforce-gtid-consistency=true              --强制GTID的一致性log-slave-updates=1                --slave更新是否记入日志

4.4  GTID复制配置过程:

4.4.1 清理环境

pkill mysqld \rm-rf/data/mysql/data/*

\rm -rf /data/binlog/*

4.4.2 准备配置文件

主库db01:cat>/etc/my.cnf<<EOF[mysqld]basedir=/data/mysql/datadir=/data/mysql/datasocket=/tmp/mysql.sockserver_id=51port=3306secure-file-priv=/tmpautocommit=0log_bin=/data/binlog/mysql-binbinlog_format=rowgtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1[mysql]prompt=db01[\\d]>EOFslave1(db02):cat>/etc/my.cnf<<EOF[mysqld]basedir=/data/mysqldatadir=/data/mysql/datasocket=/tmp/mysql.sockserver_id=52port=3306secure-file-priv=/tmpautocommit=0log_bin=/data/binlog/mysql-binbinlog_format=rowgtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1[mysql]prompt=db02[\\d]>EOFslave2(db03):cat>/etc/my.cnf<<EOF[mysqld]basedir=/data/mysqldatadir=/data/mysql/datasocket=/tmp/mysql.sockserver_id=53port=3306secure-file-priv=/tmpautocommit=0log_bin=/data/binlog/mysql-binbinlog_format=rowgtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1[mysql]prompt=db03[\\d]>EOF

4.4.3 初始化数据

mysqld--initialize-insecure--user=mysql--basedir=/data/mysql--datadir=/data/mysql/data

4.4.4 启动数据库

/etc/init.d/mysqld start

4.4.5 构建主从:

master:51slave:52,5351:grant replication slave  on*.*to repl@'10.0.0.%'identified by'123';52\53:change master to master_host='10.0.0.51',master_user='repl',master_password='123',MASTER_AUTO_POSITION=1;start slave;

4.5 GTID 从库误写入操作处理

查看监控信息:Last_SQL_Error:Error'Can'tcreate database'oldboy';database exists' on query.Default database:'oldboy'.Query:'createdatabase oldboy'Retrieved_Gtid_Set:71bfa52e-4aae-11e9-ab8c-000c293b577e:1-3Executed_Gtid_Set:71bfa52e-4aae-11e9-ab8c-000c293b577e:1-2,7ca4a2b7-4aae-11e9-859d-000c298720f6:1注入空事物的方法:stop slave;set gtid_next='99279e1e-61b7-11e9-a9fc-000c2928f5dd:3';begin;commit;set gtid_next='AUTOMATIC';这里的xxxxx:N 也就是你的slave sql thread报错的GTID,或者说是你想要跳过的GTID。最好的解决方案:重新构建主从环境

4.6  GTID 复制和普通复制的区别

CHANGE MASTER TOMASTER_HOST='10.0.0.51',MASTER_USER='repl',MASTER_PASSWORD='123',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=444,MASTER_CONNECT_RETRY=10;change master to master_host='10.0.0.51',master_user='repl',master_password='123',MASTER_AUTO_POSITION=1;start slave;(0)在主从复制环境中,主库发生过的事务,在全局都是由唯一GTID记录的,更方便Failover(1)额外功能参数(3个)(2)change master to 的时候不再需要binlog 文件名和position号,MASTER_AUTO_POSITION=1;(3)在复制过程中,从库不再依赖master.info文件,而是直接读取最后一个relaylog的 GTID号(4) mysqldump备份时,默认会将备份中包含的事务操作,以以下方式    SET @@GLOBAL.GTID_PURGED='8c49d7ec-7e78-11e8-9638-000c29ca725d:1';告诉从库,我的备份中已经有以上事务,你就不用运行了,直接从下一个GTID开始请求binlog就行。

作者:MySQL_oldguo

链接:https://www.jianshu.com/p/82bc8ed98e7f

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

推荐阅读更多精彩内容