• 记一次线上主从全库恢复


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


    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;
    ***
  • 相关阅读:
    Artificial Intelligence: A Modern Approach Notes
    Android Studio: Error running 'app': no target device found. Mac
    证明 当 a=qb+r, gcd(a,b)=gcd(b,r),a,b,q,r 属于整数
    dmg 文件打不开,双击没反应
    vim tab size,8 空格改4空格
    zsh: command not found: sage
    PyCharm ImportError: No module named 'numpy' 但用 pip3 install numpy 又显示 已经下载
    GitHub Desktop Merge
    Android Studio Unable to access Android SDK addon list Mac
    conda 切换 python 环境 vscode
  • 原文地址:https://www.cnblogs.com/wshenjin/p/7736131.html
Copyright © 2020-2023  润新知