DBA课程-day12-主从复制高级进阶

主从复制:

1. 介绍(略)

2. 主从复制前提

2台机器
二进制日志
server_id 
复制用户
数据预同步
change master to
start slave

3. 名词

文件 :
    主库: binlog 
    从库: relay-log master.info relay-log.info 
线程:
    主库:   binlog_dump_thread 
    从库:   IO   SQL 

4. 主从复制原理

(略。见上一章)

5. 主从复制故障分析

show  slave  status \G ;
IO :
    connecting:
        网络,防火墙,IP,Port,user,password
        手工mysql 
    No:
        binlog     ,  server_id   

        主库:                                       从库: 两个yes  
    set sql_log_bin=0;  create database  ABC;
        use abc;
        create table t1;
        exit;
        insert into  t1  value(1);              SQL:  NO   t1表找不到
        commit; 
    source      
SQL : 
     从库写入 
     进行从库的只读或者读写分离物理隔离

6. 主从延时

1.主库: DUMP线程 串行投递日志   
GTID+双一
2.从库: SQL 线程回放  串行
MTS

7. 延时从库

主要解决 逻辑损坏 
对SQL线程进行配置  

应用:
1.监控到 
2. 停止主库业务,从库SQL关闭
3. 人工模拟SQL干活
4. 找relaylog的起点和终点并截取日志 
5. 从库恢复
6. 将从库替换为主库,对外提供服务
    stop slave; 
    reset slave all;
7. 补偿原主库数据和新主库保持一致,并重新构建主从

===========================================
今日内容:

7. 延时从库

7.1 数据损坏

1.物理损坏
2.逻辑损坏
对于传统的主从复制,比较擅长处理物理损坏。

7.2 设计理念

对SQL线程进行延时设置 

7.3 延时多久合适?

一般企业,延时3-6小时

7.4 如何设置

mysql>stop slave;
mysql>CHANGE MASTER TO MASTER_DELAY = 300;
mysql>start slave;
mysql> show slave status \G
SQL_Delay: 300
SQL_Remaining_Delay: NULL

7.5 如何使用延时从库

7.5.1 思路
模拟故障:
mysql -S /data/3307/mysql.sock 
create database  delay charset utf8mb4;
use delay;
create table t1(id int);
insert into t1 values(1),(2),(3);
commit; 
drop database delay;

发现问题了:
1. 停止SQL线程,停止主库业务。
2. 模拟SQL手工恢复relaylog到drop之前的位置点
3. 截取relaylog日志,找到起点(relay-log.info)和终点(drop 操作)
4. 恢复截取的日志,验证数据可用性。
开始处理:
1. 停从库的SQL线程 
mysql -S /data/3308/mysql.sock 
mysql> stop slave sql_thread;
2. 找relaylog的起点和终点
起点:
Relay_Log_File: db01-relay-bin.000002
Relay_Log_Pos: 476

终点: 
mysql> show relaylog events in 'db01-relay-bin.000002'
| db01-relay-bin.000002 | 1149 | Query          |         7 |        2036 | drop database delay  
3. 截取日志 
[root@db01 ~]# mysqlbinlog --start-position=476 --stop-position=1149 /data/3308/data/db01-relay-bin.000002 >/tmp/relay.sql
4. 恢复 
mysql -S /data/3308/mysql.sock 
set sql_log_bin=0;
source /tmp/relay.sql

8. 过滤复制

主库:(了解)
show master status;
binlog_do_db 
binlog_ignore_db 

从库:
在SQL线程回放日志时,进行控制过滤。
show slave status\G;
###数据库级别的白名单和黑名单
Replicate_Do_DB: 
Replicate_Ignore_DB: 
###数据表级别的白名单和黑名单
Replicate_Do_Table: 
Replicate_Ignore_Table: 
###数据表级别模糊过滤的白名单和黑名单
Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 

例子: 
只需要复制xyz库的数据到从库
[root@db01 ~]# vim  /data/3308/my.cnf
replicate_do_db=xyz

systemctl restart mysqld3308
mysql> show slave status \G;

注意:如果有多个库的话,写多行即可。

9. 半同步复制

加载插件
主:
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';

和传统复制区别:
是一个插件形式提供的功能
主库: ack_receiver
从库:  ACK_send
主库的 ack_receiver 线程 只有接收到 从库发来的ACK确认,主库事务才能commit成功
从库的 Ack_send只有等relaylog落地才能发送ACK 
主库只会等10s  如果ACK还没收到的,会自动替换为异步复制。

10.GTID复制(高可用环境准备)

10.0 作用

group commit    ,   MTS 

10.1 重点参数

gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1              ----强制刷新从库二进制日志:1. 高可用(MHA) 2. 级联复制的中间库

10.2 清理环境

pkill mysqld
 \rm -rf /data/*
 mkdir -p /data/mysql/data 
 mkdir -p /data/binlog/
 chown -R mysql.mysql /data

10.3 准备配置文件

主库db01:
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql/
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=51
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db01 [\\d]>
EOF

slave1(db02):
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=52
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db02 [\\d]>
EOF

slave2(db03):
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=53
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db03 [\\d]>
EOF

10.4 初始化数据(所有节点)

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

10.5 启动数据库

/etc/init.d/mysqld start    

10.6 主库创建用户

db01 [(none)]>grant replication slave on *.* to repl@'10.0.0.%' identified by '123';

10.7 两个从库开启主从

mysql -e "change master to master_host='10.0.0.51',master_user='repl',master_password='123' ,MASTER_AUTO_POSITION=1;start slave; "
mysql -e "show slave status \G"|grep Yes

===================================================================

  1. MHA 的vip功能(db03)
参数:master_ip_failover_script=/usr/local/bin/master_ip_failover
注意:/usr/local/bin/master_ip_failover,必须事先准备好.
修改脚本内容
vim  /usr/local/bin/master_ip_failover
my $vip = '10.0.0.55/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

8.更改manager配置文件:

vim /etc/mha/app1.cnf
添加:master_ip_failover_script=/usr/local/bin/master_ip_failover
注意:yum install -y dos2unix
[root@db03 ~]# dos2unix /usr/local/bin/master_ip_failover 
dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ...

9.添加可执行权限:

chmod +x /usr/local/bin/master_ip_failover

10.主库上,手工生成第一个vip地址,
手工在主库上绑定vip,注意一定要和配置文件中的ethN一致,我的是eth0:1(1是key指定的值)

ifconfig eth0:1 10.0.0.55/24

11.检查MHA的状态

[root@db03 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:19347) is running(0:PING_OK), master:10.0.0.52
####手动停止vip(写错了  down下来)
[root@db02 ~]# ifconfig eth0:1 down

12.重启mha

masterha_stop --conf=/etc/mha/app1.cnf
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

13.配置发送邮件脚本到MHA的配置文件中(/etc/mha/app1.cnf)。

1. 参数:
report_script=/usr/local/bin/send
2. 准备邮件脚本
send_report
(1)准备发邮件的脚本(上传 email_2019-最新.zip中的脚本,到/usr/local/bin/中)
(2)将准备好的脚本添加到mha配置文件中,让其调用
3. 修改manager配置文件,调用邮件脚本
vim /etc/mha/app1.cnf
report_script=/usr/local/bin/send
(3)停止MHA
masterha_stop --conf=/etc/mha/app1.cnf
(4)开启MHA    
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351