设为首页 收藏本站
查看: 735|回复: 0

[经验分享] Percona Xtrabackup实现mysql全量备份和增量备份

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-8 09:10:27 | 显示全部楼层 |阅读模式
########################################################################
###        安装mysql或者mariaDB本地也要装mysql或者mariaDB相关的包          ##
########################################################################


#######################################
##   xtrabackup 的安装                ###
#######################################
[iyunv@localhost ~]# yum install http://www.percona.com/downloads ... se-0.1-3.noarch.rpm # 安装指定的yum源
[iyunv@localhost ~]# yum -y install percona-xtrabackup.x86_64 # 安装软件

#######################################
##  全量备份服务器的mysql数据         ###
#######################################
1)创建当天备份数据保存的路径
[iyunv@localhost ~]# mkdir -p /backup/mysql/full/2015-05-07
2)全量备份服务器的数据(不压缩)
[iyunv@localhost full]# /usr/bin/innobackupex --user=root --password=123456789 --host=localhost --port=3306 --defaults-file=/etc/my.cnf /backup/mysql/full/2015-05-07/
3) 修改配置文件,增加[mysqld] 选项防止在恢复数据时报错
[iyunv@localhost full]# vi /etc/my.cnf
[mysqld]
datadir="/var/lib/mysql"
########################################
###   全量备份数据恢复                ####
########################################
1) 停止mysql
[iyunv@localhost full]# service mysql stop

2) 模拟数据丢失
[iyunv@localhost ~]# mv /var/lib/mysql /var/lib/mysql_bak
Bye

3) 用上面备份的数据恢复
    通过--apply-log指明将日志应用到数据文件上
    [iyunv@localhost full]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --apply-log /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

    3.1 如果数据库目录为空,可以使用--copy-back选项用于执行恢复操作。因为使用--copy-back恢复要求恢复的目录必须为空
    [iyunv@localhost full]# mv /var/lib/mysql /var/lib/mysql_old
    [iyunv@localhost full]# mkdir /var/lib/mysql
    [iyunv@localhost full]# /usr/bin/innobackupex --user=root --password=123456789 --copy-back --defaults-file=/etc/my.cnf   /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/
    [iyunv@localhost full]# chown -R mysql:mysql /var/lib/mysql  # 修改所有者,所属组
    [iyunv@localhost full]# service mysql start # 启动mysql
    [iyunv@localhost full]# mysql -u root -p  # 登录查看数据是否恢复
    Enter password:
    MariaDB [(none)]> show databases;  # 发现数据已经恢复
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test_db            |
    +--------------------+
    3.2 如果数据库目录不为空,使用直接copy的方法恢复数据(不常用)
    rm -f /var/lib/mysql/ibdata/ib* # 如果innodb数据文件放在单独的目录,需要单独删除。 我这里不是单独放置的
    [iyunv@localhost full]# rm -f /var/lib/mysql/ib*  # 删除innodb数据文件  # 如果是恢复MyISAM引擎的数据表则没必要执行这一步
    [iyunv@localhost full]# rm -rf /var/lib/mysql/test_db # 删除指定的数据库test_db
    # 恢复
    [iyunv@localhost full]# cp -r /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/test_db /var/lib/mysql/
    [iyunv@localhost full]# cp -r /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/ib* /var/lib/mysql/  # 如果innodb数据文件放在单独的目录,需要单独复制
    [iyunv@localhost full]# chown -R mysql:mysql /var/lib/mysql  # 修改所有者,所属组
    [iyunv@localhost full]# service mysql start
    [iyunv@localhost full]# mysql -u root -p123456789  # 登录数据库查看数据已经恢复
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test_db            |
    +--------------------+
    4 rows in set (0.00 sec)

    MariaDB [(none)]> use test_db;
    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
    MariaDB [test_db]> select * from test_table1;
    +------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
|    4 | zhaoliu  |
|    5 | guqi     |
+------+----------+
5 rows in set (0.00 sec) # 数据已经恢复
   

##############################################
###              增量备份                    ##
##############################################
1)开启二进制日志
[iyunv@localhost ~]# vi /etc/my.cnf
[mysqld]
datadir="/var/lib/mysql"
log-bin=/data/mysql/log/mysql-bin
[iyunv@localhost ~]#  service mysql restart
2)增量备份是建立在全量备份的基础上的所以先确保有一次全量备份,全量备份前面已经介绍

3) 我们往数据库中添加数据,进行第一次增量备份
MariaDB [test_db]> insert into test_table1 values(6,'xiaoming');
Query OK, 1 row affected (0.00 sec)

MariaDB [test_db]> select * from test_table1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
|    4 | zhaoliu  |
|    5 | guqi     |
|    6 | xiaoming |
+------+----------+
6 rows in set (0.00 sec)
[iyunv@localhost ~]# mkdir -p /backup/mysql/increment/2015-05-07 # 创建增量备份保存的路径

4) 进行第一次增量备份
[iyunv@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --incremental-force-scan --incremental /backup/mysql/increment/2015-05-07 --incremental-basedir=/backup/mysql/full/2015-05-07/2015-05-07_18-14-25/ # 第一次增量备份 (如果是mariadb不添加--incremental-force-scan参数可能会因为不支持FLUSH CHANGED_PAGE_BITMAPS而报错导致增量备份失败)
第一次增量备份生成的文件夹为/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/

5) 再次往数据表中插入内容
MariaDB [test_db]> insert into test_table1 values(7,'xiaohong');
Query OK, 1 row affected (0.05 sec)

6)进行第二次增量备份
[iyunv@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --incremental-force-scan --incremental /backup/mysql/increment/2015-05-07 --incremental-basedir=/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/
第二次增量备份生成的文件夹为/backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/

7)查看最后一次增量备份时所对应的二进制日志及位置
[iyunv@localhost ~]# cat /backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/xtrabackup_binlog_info
mysql-bin.000001    833    0-1-3
MariaDB [(none)]> show master status
    -> ;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      833 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)  # 可以看到如果没有在增量备份后再对数据库进行增删改操作。则从增量备份中得出的信息和从二进制日志中看到的是一样的。


###################################################################
###         增量备份数据还原                                    ###
###################################################################
恢复增量备份
增量备份的还原操作跟完整的还原有点不一样,首先必须使用--apply-log --redo-only对完整备份的目录及所有增量备份目录进行操作,然后就可以像还原完整备份时的操作了。(apply increment log to full data)
1 模拟数据丢失
[iyunv@localhost ~]# service mysql stop
[iyunv@localhost ~]# rm -rf /var/lib/mysql
[iyunv@localhost ~]# mkdir /var/lib/mysql

2 通过--apply-log --redo-only指明将日志应用到数据文件上
[iyunv@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

3 把第一次增量备份的数据应用到全量备份上
[iyunv@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/  --incremental-dir=/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/

4 把第二次增量备份的数据应用到全量备份上
[iyunv@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/  --incremental-dir=/backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/

5 恢复数据(这里和全量备份的恢复相同了)
[iyunv@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --copy-back /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

6 更改权限,启动服务,登录mysql,查看数据是否恢复
[iyunv@localhost ~]# chown -R mysql:mysql /var/lib/mysql
[iyunv@localhost ~]# service mysql start
MariaDB [test_db]> select * from test_table1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
|    4 | zhaoliu  |
|    5 | guqi     |
|    6 | xiaoming |
|    7 | xiaohong |
+------+----------+
7 rows in set (0.00 sec)  # 数据已经恢复

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-64854-1-1.html 上篇帖子: mysql-qps统计python脚本(每秒查询处理量) 下篇帖子: 导入mysql数据问题:Cannot load from mysql.proc. The table is probably corrupted mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表