zoukankan      html  css  js  c++  java
  • 记一次线上主从全库恢复

    恢复一张表数据差异,结果酿成整个库数据不一致,导致主从需要重新做一次同步。


    innobackupex 恢复

    安装

    依赖库:yum install libaio perl-devel perl-CPAN

    直接下载二进制包,不编译,编译需要和MySQL源码包配合。

    wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.9/binary/Linux/x86_64/percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz
    tar zxvf percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz
    cp percona-xtrabackup-2.1.9-Linux-x86_64/bin/innobackupex-1.5.1 /usr/bin/innobackupex
    cp percona-xtrabackup-2.1.9-Linux-x86_64/bin/xtrabackup_55 /usr/bin/xtrabackup
    cp percona-xtrabackup-2.1.9-Linux-x86_64/bin/xtrabackup_56 /usr/bin/xtrabackup_56
    

    主服务器备份

    主服务器上执行备份操作,直接通过ssh传输到备服务器:

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=*** --stream=tar /data/backup/ | ssh -p 22 root@192.168.31.141 "cat -> /tmp/all_databases.tar "
    innobackupex --defaults-file=/etc/my.cnf --user=root --password=*** --stream=xbstream  ./ | ssh -p 22 root@192.168.31.141 "/usr/bin/xbstream -x -C /disk2/tmp/"  
    

    从服务器恢复数据

    在恢复时,需要指定备份目录,--copy-back在数据恢复时将备份数据文件拷贝到MySQL服务器的datadir,datadir需要为空才能恢复成功,因此如果该目录中有其他文件需要事先备份。

    /etc/init.d/mysqld stop
    mv /data/database/mysql3306 /data/database/mysql3306.bak
    mkdir /data/database/mysql3306 
    cd /tmp/
    mkdir `date +%F"_"%H"-"%M"-"%S`
    tar -ixf all_databases.tar -C 2017-10-26_14-24-27/   #解压缩参数-i是必须的
    innobackupex --defaults-file=/etc/my.cnf --apply-log 2017-10-26_14-24-27/
    innobackupex --defaults-file=/etc/my.cnf --copy-back 2017-10-26_14-24-27/
    chown -R  mysql:mysql -R /data/database/mysql3306 
    /etc/init.d/mysqld start
    

    从服务器恢复同步

    恢复后,数据目录下有个xtrabackup_info文件,里面记录了binlog 文件和pos点,可以直接使用它恢复同步
    
    cd /data/database/mysql3306 
    cat xtrabackup_info
    ***
    binlog_pos = filename 'mysql-bin.000067', position 843
    *** 
    

    补充一点

    用过 xtrabackup 工具的 innobackupex 脚本备份数据的人可能会注意到,–apply-log 处理过的备份数据里有两个文件(xtrabackup_binlog_info和xtrabackup_binlog_pos_innodb)说明该备份数据对应的 binlog 的文件名和位置。但有时这俩文件说明的位置可能会不同。

    1 对于纯 InnoDB 操作,备份出来的数据中上述两个文件的内容是一致的

    2 对于 InnoDB 和非事务存储引擎混合操作,xtrabackup_binlog_info 中所示的 position 应该会比xtrabackup_binlog_pos_innodb所示的数值大。此时应以 xtrabackup_binlog_info 为准;而xtrabackup_binlog_pos_innodb和 apply-log 时 InnoDB recovery log 中显示的内容是一致的,只针对 InnoDB 这部分数据


    mysqldump 恢复

    数据导出导入

    在从服务器上直接dump下来,主MySQL需要对从服务器授权

    mysqldump -uroot -p -h 192.168.31.170 --single-transaction  --master-data --flush-logs --all-databases > all-databases.sql
    mysql -uroot -p < all-databases.sql # 从库会被覆盖更新,这时候数据就和主库上的在导出数据时间点之前的数据一致了。
    

    恢复主从

    直接从导出的文件中查看主库的binlog 文件和pos点,可以直接使用它恢复同步

    head -50 all-databases.sql
    ***
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000068', MASTER_LOG_POS=107;
    ***
  • 相关阅读:
    中文分词算法工具hanlp源码解析
    Hanlp分词1.7版本在Spark中分布式使用记录
    Window离线环境下如何安装pyhanlp
    如何编译运行HanLP自然语言处理包
    函数调用面试题
    构造函数复习
    面向对象的好处
    递归实现查找页面所有节点
    面向对象和原型
    chrome浏览器调试工具的使用
  • 原文地址:https://www.cnblogs.com/wshenjin/p/7736131.html
Copyright © 2011-2022 走看看