zoukankan      html  css  js  c++  java
  • 基于percona 5.7的xtrabackup实践

    环境:
            centerOS7
            percona 5.7
            xtrabackup  2.4(5.7只支持2.4已上的版本)
     
    第一步:
     安装xtrabackup:
    2:yum list | grep percona
    3:安装:yum install percona-xtrabackup-24
     
    修改配置文件
    cat  /etc/yum.repos.d/percona-release.repo,然后将percona-testing-$basearch 和percona-testing-noarch设置 enabled = 1
     
    第二步
    备份还原的测试
    首先创建数据库表,插入数据,做全备份
    1:新建数据库qiandaitest,创建表users
    | users | CREATE TABLE `users` (
      `id` int(5) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 |
     
     
    insert into users values(1,'zhangsan');
     insert into users values(2,'lisi');
     
    2:开始做全备份
     innobackupex --compress  --no-timestamp  --user=root --password=************* --databases qiandaitest  /backup/full/
    备份qiandaitest数据库并且压缩备份,
    现在我们再往表users中插入两条数据数据:
    mysql> insert into users values(3,'wangwu');
    Query OK, 1 row affected
    mysql> insert into users values(4,'mazi');
    Query OK, 1 row affected
     
     3:关停数据库进行备份恢复
    首先要对完全备份做预备备份,预备备份就是重新应用日志,将从备份开始到结束的时间段里面没有提交的事物回滚,
    innobackupex --decompress /backup/full/
    但是还要注意一点就是要用--decompress进行解压的时候必须安装qpress
    yum install qpress
    如果不安全qpress的话--decompress就会失败,下面就开始应用备份
    innobackupex --apply-log --redo-only --compress  --user=root --password=************  /backup/full/
     
    关停数据库(注意还原的过程是要关闭数据库的):
    service  mysql  stop 
    [root@mysql41 full]# mkdir /newdatadiir
    [root@mysql41 full]# vim /etc/my.cnf
    将datadir指向新建的位置,因为xtrabackup进行恢复的时候要求必须datadir是空的才可以进行恢复.
    [root@mysql41 full]# innobackupex --copy-back  /backup/full/
    [root@mysql41 full]# cd /newdatadiir/
    [root@mysql41 newdatadiir]# ls
    ib_buffer_pool  ibdata1  qiandaitest  xtrabackup_binlog_pos_innodb  xtrabackup_info
    可以看到文件已经恢复了,下面还要有一步赋予新目录给mysql用户的所有者权限
    chown  -R mysql:mysql  /newdatadiir
    然后提起数据库:
    service  mysql  start
    没有提起来出现以下的报错信息,想起来备份的时候是指定了databases进行备份,恢复的时候找不到系统数据库
    2016-05-18T02:57:19.710025Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
    2016-05-18T02:57:19.710078Z 0 [ERROR] Aborting
    然后
    [root@mysql41 mysql]# cp -a  mysql /newdatadiir
    [root@mysql41 mysql]# service mysql start
    Redirecting to /bin/systemctl start  mysql.service
    [root@mysql41 mysql]# cp -a  performance_schema/ /newdatadiir
    [root@mysql41 mysql]# cp -a  sys/ /newdatadiir
    数据库已经提起来了.
     
    4:mysqlbinlog进行日志恢复.
    收先我们要查看一下xtrabackup_checkpoints里面的几个参数.
    backup_type 是否是预备备份,我们已经--aplay-log了,所以现在显示是预备备份
    from_lsn = 0      备份记录所有信息开始的位置
    to_lsn = 2507172  备份开始的时间点位置
    last_lsn = 2507188  备份结束的时间点位置
    预备备份就是将to_lsn到last_lsn这段时间的日志应用了一遍而已.
     
    完全备份恢复以后进行查看数据:
    mysql> select * from users;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    +----+----------+
    看到数据是被分前的两条数据,现在开始用mysqlbinlog进行恢复:
    [root@mysql41 full]# cat xtrabackup_binlog_pos_innodb 
    binlog.000001    2008
    我们发现是从2008的这个位置开始的
    先查看一下日志文件
    show binlog events in 'binlog.000001';
    刚好看到binlog.000001下面对应的两条插入数据write_rows,刚好就是我们需要的.
    下面进行恢复
     mysqlbinlog   --start-position=2008  --stop-position=2589 --user=root --password=*********** -d  qiandaitest  /log/mysql/binlog.000001 > /backup/qiandai1.sql
    将qiandaitest的所有在2008和2589间的操作导入到一个sql文件,然后
    mysql> use qiandaitest
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
     
    Database changed
    mysql> source /backup/qiandai1.sql
    查看一下数据:
    mysql> select * from users;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    |  3 | wangwu   |
    |  4 | mazi     |
    +----+----------+
    4 rows in set (0.00 sec)
    已经恢复了.
     
     
    然后就是将他创建为一个定时作业定时每天执行一次全备份:
    先创建一个脚本:vim  backup.sh
    n/bash
    cd /databak/data
    find /databak/data  -mtime +2 -name "*.*" -exec rm -rf {} ;
    mkdir `date -d "today" +"%Y%m%d"`
    echo "You are in backup dir"
    #cp /backup/* /oldbackup
    echo "begin backup"
     
    innobackupex --compress  --no-timestamp --socket=/var/lib/mysql/mysql.sock  --user=root --password=*****   `date -d "today" +"%Y%m%d"`
     
    echo "Your database backup successfully completed"
    赋予执行权限:
    chmod +x backup.sh
    加入定时作业:
    [root@mysql41 backup]# crontab -l
    30 1 * * * /backup/backup.sh
     
    另外:完整的恢复直接运行以下语句就可以:
    mysqlbinlog   --start-position=712 --stop-position=1662 /log/mysql/binlog.000013|mysql -uroot -pTime.work.9818
     
     
  • 相关阅读:
    【2020Python修炼记】网络编程(三)socket编程之粘包
    2020python作业——scoket编程(一)
    月考二
    【2020Python修炼记】网络编程(二)socket编程之socket 的介绍+TCP/UDP
    Gym100889L
    poj3233
    upper_bound
    lower_bound
    Gym-102141E
    P1020 导弹拦截
  • 原文地址:https://www.cnblogs.com/shengdimaya/p/5539573.html
Copyright © 2011-2022 走看看