zoukankan      html  css  js  c++  java
  • xtrabackup的流备份恢复MySQL从库

    背景

    从库出问题了,需要重做从库。一般的恢复方法是在主库上xtrabackup物理热备,然后拷贝备份文件到从库恢复。但这次遇到一个问题,主库数据目录有300G,而磁盘剩余空间只有100G,于是这次可以采用xtrabackup的流备份恢复从库。流备份可以边备份边压缩边传输,不会占用本地空间。

    服务器列表

    服务器 角色
    192.168.199.198 master
    192.168.199.199 slave

    xtrabackup的流备份恢复MySQL从库步骤

    1.从库关闭MySQL,并移除数据目录

    kill -9 $MYSQLD_PID
    cd /database/mysql/3306/
    rm -rf data
    

    2.主库上授权 (如果无授权)

    grant reload,lock tables,replication client,process on *.* to backup@'%' identified by 'fanderpassword';
    grant replication slave,replication client on *.* to repl@'%' identified by 'fanderpassword';
    

    3.主库和从库上分别安装xtrabackup

    # 请到percona官网下载对应操作系统版本的rpm包
    # 我这里下载的是centos6版本
    # wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.14/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.14-1.el6.x86_64.rpm
    
    # 实际上测试发现,解压直接拷贝xtrabackup、xbstream文件也可以用
    
    # 百度下载qpress, centos6、centos7通用,直接拷贝可以用
    
    cp xtrabackup xbstream qpress /usr/sbin
    chmod +x /usr/sbin/xtrabackup
    chmod +x /usr/sbin/xbstream
    chmod +x /usr/sbin/qpress
    

    快捷通道: https://pan.baidu.com/s/179mV0QidiiMqdROGUFBZXQ 提取码: vcvg

    4.主、从库分别建备份目录

    mkdir -p /data/backups/2019061
    

    5.主库上发起流备份,并通过管道传输到从库解包

    xtrabackup -ubackup -pfanderpassword -H127.0.0.1 -P3306 
     --backup 
     --stream=xbstream 
     --compress 
     --target-dir=/data/backups/20190618 | ssh root@192.168.199.199 "xbstream -x -C /data/backups/20190618"
    

    !!虽然设置了主库本地备份的路径/data/backups/20190618,但观察可以发现其不会占用空间。

    6.从库上解压,解压后删除原压缩文件

    xtrabackup --decompress --parallel=4 --remove-original --target-dir=/data/backups/20190618
    

    7.从库上prepare阶段,应用redo log

    xtrabackup --prepare --use-memory=1GB --target-dir=/data/backups/20190618
    

    8.从库采用move-back方法,把应用好的数据恢复到数据目录

    xtrabackup --defaults-file=/data/mysql/mysql3306/my.cnf --move-back --parallel=4 --target-dir=/data/backups/20190618
    

    注意:这里有一个坑,不要设置innodb_log_group_home_dir =./ ,xtrabackup会读错路径,导致无法拷贝,解决办法是注释掉这条参数。

    9.从库修改数据目录权限

    chown -R mysql:mysql /database/mysql/3306
    

    10.从库启动数据库

    service mysqld start
    

    11.从库修改gtid编号

    [root@192-168-199-199 data]# cat /data/mysql/mysql3306/data/xtrabackup_info |grep binlog_pos
    binlog_pos = filename 'mysql-bin.000009', position '190', GTID of the last change 'c0900221-709b-11e9-b8ea-000c29abbade:1-1539006'
    
    mysql>  reset master;
    mysql>  set global gtid_purged="c0900221-709b-11e9-b8ea-000c29abbade:1-1539006"
    

    12.从库启动复制

    mysql> CHANGE MASTER TO
            MASTER_HOST='192.168.199.198',
            MASTER_USER='repl',
            MASTER_PASSWORD='fanderpassword',
            MASTER_PORT=3306,
            MASTER_AUTO_POSITION=1;
    
    mysql> start slave;
    
  • 相关阅读:
    资料存储
    Django学习
    爬虫学习
    time()模块
    一些功能性小程序段
    装饰器
    函数的知识点(理解难点剖析)
    linux中的回收站机制,防止rm -rf 事件
    python--列表解析式 -- 知识整理
    python- 时间模块 datatime 知识整理
  • 原文地址:https://www.cnblogs.com/fander/p/11057609.html
Copyright © 2011-2022 走看看