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;
    ***
  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/wshenjin/p/7736131.html
Copyright © 2011-2022 走看看