zoukankan      html  css  js  c++  java
  • mysql 利用relay log 使用 start slave until 恢复方法

    1结构

     注意: server-id 必须不相同

    2. slave2 使用 screen 备份主库 binlog 到/data/backup/目录下, 实时备份mysqlbinlog

    (1).  安装 screen
    yum  -y install screen
    screen -S  mysqlbinlogsbackup
    
    cd /data/backup/; mysqlbinlog --raw --read-from-remote-server --stop-never --host 172.17.0.2 --port 3306 -u replication -p123456 mybinlog.000003
    
    
    ctrl+a d
    暂时离开当前session,将目前的 screen session 丢到后台.
    
    
    
    
    screen -S  screenname -> 新建一个session
    screen -ls         ->     列出所有的session
    screen -r  screenname -> 回到screenname 这个session
    screen -d  screenname -> 远程detach某个session
    screen -d -r screenname -> 结束当前session并回到screenname 这个session

    3. mysql master 上 创建数据库, sysbench 写一些数据

    create database  T100

      sysbench /usr/local/share/sysbench/oltp_read_write.lua --mysql-host=172.17.0.2 --mysql-port=3306 --mysql-user=fengjian --mysql-password=123456 --mysql-db=T100 --tables=10 --table_size=10000 --mysql_storage_engine=Innodb prepare

    4. 使用innobackup 进行全备

    innobackupex --defaults-file=/etc/my.cnf -S /data/mysql/mysql3306/mysql.sock  -u fengjian -p123456 /data/backup/

    5. 删除master T100库的表, 模拟误删除操作

    mysql -u root -p 
    use T100;
    drop table  sbtest1 ;

    #发生误操作,切换binlogs
    flush logs;

    查看binlog
    show binary logs;

    +-----------------+-----------+
    | Log_name | File_size |
    +-----------------+-----------+
    | mybinlog.000001 | 177 |
    | mybinlog.000002 | 177 |
    | mybinlog.000003 | 200 |
    | mybinlog.000004 | 200 |
    | mybinlog.000005 | 200 |
    | mybinlog.000006 | 200 |
    | mybinlog.000007 | 200 |
    | mybinlog.000008 | 19097126 |
    | mybinlog.000009 | 19097508 |
    | mybinlog.000010 | 194 |
    +-----------------+-----------+

    6. 打包全备数据 到 slave 从库上

    cd /data/backup
    tar  -zcvf  2020.tar.gz  2020-02-29_05-36-06  
    
    scp  172.17.0.2:/data/backup/2020.tar.gz  root@172.17.0.4:/data/backup/

    7. slave2 上解压缩,恢复数据库

    cd /data/backup/
    tar -zxvf 2020.tar.gz 
    cd  2020-02-29_05-36-06
    # innobackup 应用日志 innobackupex --apply-log -u root -p123456 /data/backup/2020-02-29_05-36-06

    #slave2 上新建的mysql 存储目录不需要初始化
    mkdir -R /data/mysqld/mysql3306/{data,logs,tmp,undolog}
    chown -R mysql.mysql /data/mysqld

    #拷贝 /data/backup/2020-02-29_05-36-06/ 备份文件到 mysql 存储目录
    mv /data/backup/2020-02-29_05-36-06/undo* /data/mysql/mysql3306/undolog/
    mv /data/backup/2020-02-29_05-36-06/* /data/mysql/mysql/mysql3306/data/

    chown -R mysql.mysql /data/mysql

    # 启动mysql
    mysqld --defaults-file=/etc/mysql.cnf &

    由于mysql master 和 slave2 都是开启gtid的,所以恢复全量备份数据到slave2实例上,如果启动slave2实例 Gtid和 master xtrabackup全量备份结束的Gtid号是不一致
    登录slave2 实例,reset master  清空 Gtid 信息, 然后再set global gtid_purged='bde7b592-b966-11e9-8c64-000c294f3e61:1-10296'; 让slave2 实例的Gtid号执行到全量备份结束时的这个Gtid号

    查看 xtrabackup_binlog_info 信息
    
    mybinlog.000009    19097277    0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,
    3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,
    b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-123

    slave2 设置 gtid purged值

    reset master;
    # 设置gtid purged
    set global  gtid_purged='0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-123'
    #查看gtid信息
    show global variables like '%gtid%';

    +----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+
    | Variable_name | Value |
    +----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+
    | binlog_gtid_simple_recovery | ON |
    | enforce_gtid_consistency | ON |
    | gtid_executed | 0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-61 |
    | gtid_executed_compression_period | 1000 |
    | gtid_mode | ON |
    | gtid_owned | |
    | gtid_purged | 0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404,3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605,b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-61 |
    | session_track_gtids | OFF |
    +----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+

     

    8. 开始MySQL relaylog + SQL_Thread 增量恢复binlog演示

    change命令,是为了告诉MySQL自己为一个slave实例:通过change命令,是为了告诉MySQL自己为一个slave实例,因为无需用到IO_Thread,故host,password,user等可以随意填写。
    并且通过该步骤,生成relay.info文件。

    root@localhost 08:06:  [(none)]> change master to master_host='172.17.0.2';

    查看 relay log 的名字为,slave2-relay-bin 开头

    root@localhost 08:06: [(none)]> show global variables like '%relay%';
    +---------------------------+---------------------------------------------------+
    | Variable_name | Value |
    +---------------------------+---------------------------------------------------+
    | max_relay_log_size        | 0 |
    | relay_log             | |
    | relay_log_basename        | /data/mysql/mysql3306/data/slave2-relay-bin |
    | relay_log_index          | /data/mysql/mysql3306/data/slave2-relay-bin.index |
    | relay_log_info_file       | relay-log.info |
    | relay_log_info_repository    | TABLE |
    | relay_log_purge          | ON |
    | relay_log_recovery        | ON |
    | relay_log_space_limit      | 0 |
    | sync_relay_log           | 10000 |
    | sync_relay_log_info       | 10000 |
    +---------------------------+---------------------------------------------------+

    
    

    关闭3308实例,将需要增量的binlog文件伪装成relay log:

    mysqladmin  -u root -p shutdown
    cd /data/mysql/mysql3306/data/
    
    # 查看目录里生成了 relay log日志 和索引   slave2-relay-bin.000001  slave2-relay-bin.index
    
    ls 
    
    
    
    
    # 拷贝mysqlbinlog  server备份的 binlog到 data目录。
    cp /data/backup/mysqlbin*  /data/mysql/mysql3306/data/

    # 删除原有 relay log 和 index 文件,使用binlog 生成

    rm slave2-relay-bin.*  -rf
    for i in `ls mybinlog.00*` ; do lastnum=`echo $i |cut -d '.' -f2`; mv mybinlog.$lastnum slave2-relay-bin.$lastnum ; done
    ls ./slave2-relay-bin.0000* > slave2-relay-bin.index

    启动slave2 mysql

    mysqld  --defaults-file=/etc/my.cnf &

    使用 change master to语句, 让 slave2 的sql_thread 执行  relay log文件到 xtrabackup_binlog_info 记录的位置

    [root@slave2 2020-03-11_06-02-09]# cat xtrabackup_binlog_info 
    mybinlog.000009    19097277    0e21dacd-5aa5-11ea-a4db-0242ac110002:1-404, 3f6088fc-5ab6-11ea-b88f-0242ac110002:1-605, b9d7ea3f-62b0-11ea-b3d0-0242ac110002:1-123

    slave2 上执行 change master to,  注意 replay_log_file 文件变成了 slave2-relay-bin.000009

    change master to RELAY_LOG_FILE='slave2-relay-bin.000009', RELAY_LOG_POS=19097277;

    解析mysqlbinlogs 查看删除表的 gtid位置

    使用 start slave until  恢复到删除的 gtid 或者 

    START SLAVE   SQL_THREAD    UNTIL    MASTER_LOG_FILE = 'slave2-relay-bin.000009', MASTER_LOG_POS =19097277 ; ##此处的Gtid是drop table test1_event 前的最近的一个binlog的文件的pos位置点
     或者是:
     START SLAVE   SQL_THREAD  UNTIL   SQL_BEFORE_GTIDS='b9d7ea3f-62b0-11ea-b3d0-0242ac110002:124'  ##此处的Gtid是drop table test1_event 前的最近的一个Gtid


    利用SQL_thread快速恢复增量过程总结:

    1.不能使用master_auto_position=1
    2.先要让mysql知道他是一个Slave
    3.关掉mysql,构建relay-log
    4.利用change master to relay_log_file=... ,
    relay_log_pos=...;
    5.START SLAVE SQL_THREAD UNTIL MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxxxx
    或者START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='xxx--xx-x';

    参考:

    https://blog.csdn.net/baping8015/article/details/100952782

  • 相关阅读:
    课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 1、经常提及的问题
    递归、字节流、文件复制_DAY20
    IO概述、异常、File文件类_DAY19
    某书2018笔试题之薯券
    某书2018笔试题之翻转数字
    某书2018笔试题之字符串中最大子数字串
    批量发货的启示
    为什么易燥易怒以及柔润相处的练习
    编程漫谈(十五):编程与软件开发
    使用函数式编程消除重复无聊的foreach代码(Scala示例)
  • 原文地址:https://www.cnblogs.com/fengjian2016/p/12463467.html
Copyright © 2011-2022 走看看