mysql备份与恢复-xtrabackup

使用xtrabackup 的innobackupex进行全量备份

[ root@node1 /mydata/backups ]# innobackupex --user=root --password=123 --host=172.18.25.51 /mydata/backups/

备份后出现目录文件信息如下

[ root@node1 /mydata/backups/2017-11-17_22-14-15 ]# ll
总用量 18460
-rw-r----- 1 root root      417 1117 22:14 backup-my.cnf #显示配置信息有哪些,对重新启动mysql是至关重要的。
drwxr-x--- 2 root root       60 11月 17 22:14 hidb
-rw-r----- 1 root root 18874368 1117 22:14 ibdata1 #事物日志,存在那些未提交,未回滚,未有结果的事物。
drwxr-x--- 2 root root     4096 11月 17 22:14 mysql
drwxr-x--- 2 root root     4096 11月 17 22:14 performance_schema
drwxr-x--- 2 root root       20 11月 17 22:14 test
-rw-r----- 1 root root       22 1117 22:14 xtrabackup_binlog_info # 二进制日志文件的信息,记录了我们备份到哪一刻。
-rw-r----- 1 root root      113 1117 22:14 xtrabackup_checkpoints # 记录了我们备份的属性。
-rw-r----- 1 root root      497 1117 22:14 xtrabackup_info # 记录我们使用的备份的工具的信息与备份的详细信息。
-rw-r----- 1 root root     2560 1117 22:14 xtrabackup_logfile # 记录了xtrabackup自己的日志信息。
[ root@node1 /mydata/backups/2017-11-17_22-14-15 ]# cat xtrabackup_binlog_info 
master-log.000014   245
[ root@node1 /mydata/backups/2017-11-17_22-14-15 ]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2284847
last_lsn = 2284847
compact = 0
recover_binlog_info = 0

恢复过程

[ root@node1 /mydata/backups ]# scp -r  /root/percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm 2017-11-17_22-14-15 node2:/root
[ root@node2 /root/backups ]# cd 2017-11-17_22-14-15/
[ root@node1 /mydata/backups ]# innobackupex --apply-log ./
[ root@node1 /mydata/backups ]# innobackupex --copy-back ./
[ root@node1 /mydata/backups ]# cd /var/lib/mysql/
[ root@node2 /var/lib/mysql ]# chown -R mysql.mysql ./*
[ root@node2 /var/lib/mysql ]# systemctl start mariadb
[ root@node2 /var/lib/mysql ]# mysql -uroot -p123      #注意要按照备份的那个数据库上面的账号密码登录

实验:做一次完整意义上的全量备份,差异备份,在做一次增量备份,最后一次的增量备份还没做,服务器崩溃了。(一次完整意思的备份与修复)
实验前准备
第一次全量备份

[ root@node1 ]# innobackupex --user=root  --host=172.18.25.51 --password=123  /mydata/backups/

删除一些age=90的students后,做一次差异备份
MariaDB [hidb]> delete from students where age=90;

[ root@node1 ]# innobackupex --user=root  --host=172.18.25.51 --password=123 --incremental /mydata/backups/ --incremental-basedir=/mydata/backups/2017-11-18_09-24-53/

在删除age=60的students后,做一次增量备份。

[ root@node1 ]# innobackupex --user=root  --host=172.18.25.51 --password=123 --incremental /mydata/backups/ --incremental-basedir=/mydata/backups/2017-11-18_09-30-34/

然后又加入了age=66学生的major=chi huo 后过一会数据库崩溃了。
MariaDB [hidb]> updata students set major=’chi huo’ where age=66;
现在要开始修复了。
现在要先看一下最新的增量备份到哪个节点了

[ root@node1 /mydata/backups/2017-11-18_09-34-07 ]# cat xtrabackup_binlog_info 
master-log.000015   819

那么我们就导出从这个节点后的binlog文件

[ root@node1 ~ ]# mysqlbinlog -j 819 /mydata/logs/master-log.000015 > /root/mybinlog.sql

然后开始对全量备份执行命令,使其将已经提交的事务进行“重放”

[ root@node1 ]# innobackupex --apply-log --redo-only /mydata/backups/2017-11-18_09-24-53/

然后重放第一个增量,合并第一个增量。(也就是那个差异备份的)。

[ root@node1 ]# innobackupex --apply-log --redo-only /mydata/backups/2017-11-18_09-24-53/ --incremental-dir=/mydata/backups/2017-11-18_09-30-34/

合并第二个增量,也就是最后一个增量。

[ root@node1 /mydata/backups/2017-11-18_09-24-53 ]# innobackupex --apply-log --redo-only /mydata/backups/2017-11-18_09-24-53/ --incremental-dir=/mydata/backups/2017-11-18_09-34-07/

然后对合并了所有增量的的全量备份进行回滚操作

[ root@node1 /mydata/backups/2017-11-18_09-24-53 ]# innobackupex --apply-log /mydata/backups/2017-11-18_09-24-53/

那么现在全量备份就是一次完整意义上的备份了
进入合并完成后的全量备份的目录,查看xtrabackup_checkpoints

[ root@node1 /mydata/backups/2017-11-18_09-24-53 ]# less xtrabackup_checkpoints
backup_type = full-prepared # 完整备份的意思

把刚刚合并回滚完成的全量备份的目录还有导出的二进制日志拷贝到要恢复的主机上

[ root@node1 /mydata/backups ]# scp -r 2017-11-18_09-24-53 node2:/root/
[ root@node1 ~ ]# scp mybinlog.sql node2:/root/

然后在主机上开始恢复

[ root@node2 ~ ]# cd 2017-11-18_09-24-53/
[ root@node2 ~/2017-11-18_09-24-53 ]# innobackupex --copy-back ./

然后cd到/var/lib/mysql

[ root@node2 ~/2017-11-18_09-24-53 ]# cd /var/lib/mysql/

然后修改mysql目录下的文件所有者所有组

[ root@node2 /var/lib/mysql ]# ll

总用量 40976

drwxr-x---. 2 root root       60 1118 10:42 hidb
-rw-r-----. 1 root root 18874368 1118 10:42 ibdata1
-rw-r-----. 1 root root  5242880 1118 10:42 ib_logfile0
-rw-r-----. 1 root root  5242880 1118 10:42 ib_logfile1
-rw-r-----. 1 root root 12582912 1118 10:42 ibtmp1
drwxr-x---. 2 root root     4096 1118 10:42 mysql
drwxr-x---. 2 root root     4096 1118 10:42 performance_schema
drwxr-x---. 2 root root       20 1118 10:42 test
-rw-r-----. 1 root root       35 1118 10:42 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root      576 1118 10:42 xtrabackup_info
[ root@node2 /var/lib/mysql ]# chown -R mysql.mysql ./*

然后进入到数据库查看

[ root@node2 /var/lib/mysql ]# systemctl start mariadb
[ root@node2 /var/lib/mysql ]# mysql -uroot -p123
MariaDB [(none)]> use hidb;
MariaDB [hidb]> select * from students where age=66; #发现最后一次的操作还没有同步回来,我们还要导入之前的binlog文件
+-----+--------+------+--------+-------+
| id  | name   | age  | gender | major |
+-----+--------+------+--------+-------+
|   2 | stu2   |   66 | F      | NULL  |
| 182 | stu182 |   66 | F      | NULL  |
| 200 | stu200 |   66 | M      | NULL  |
| 279 | stu279 |   66 | M      | NULL  |
| 547 | stu547 |   66 | M      | NULL  |
| 556 | stu556 |   66 | M      | NULL  |
| 707 | stu707 |   66 | F      | NULL  |
| 748 | stu748 |   66 | M      | NULL  |
| 753 | stu753 |   66 | M      | NULL  |
| 827 | stu827 |   66 | F      | NULL  |
| 863 | stu863 |   66 | F      | NULL  |
| 964 | stu964 |   66 | F      | NULL  |
+-----+--------+------+--------+-------+

12 rows in set (0.00 sec)
我们开始导入二进制日志,但是要记得把文件复制到/tmp/目录下,只有这个目录下,才能让所有用户有权限访问。

[ root@node2 ~ ]# cp mybinlog.sql /tmp/

这次恢复不使用 mysql < mybinlog.sql的方式恢复,使用mysql的命令行的方式
但是使用mysql的命令行恢复的方式,一定要记得临时关闭二进制日志的记录

MariaDB [hidb]> set @@session.sql_log_bin=off;

然后才可以使用命令读入日志

MariaDB [hidb]> \. /tmp/mybinlog.sql

然后一定要记得再次把二进制日志开启

MariaDB [hidb]> set @@session.sql_log_bin=on;

然后我们再一次的查看数据

MariaDB [hidb]> select * from students where age=66;
+-----+--------+------+--------+---------+
| id  | name   | age  | gender | major   |
+-----+--------+------+--------+---------+
|   2 | stu2   |   66 | F      | chi huo |
| 182 | stu182 |   66 | F      | chi huo |
| 200 | stu200 |   66 | M      | chi huo |
| 279 | stu279 |   66 | M      | chi huo |
| 547 | stu547 |   66 | M      | chi huo |
| 556 | stu556 |   66 | M      | chi huo |
| 707 | stu707 |   66 | F      | chi huo |
| 748 | stu748 |   66 | M      | chi huo |
| 753 | stu753 |   66 | M      | chi huo |
| 827 | stu827 |   66 | F      | chi huo |
| 863 | stu863 |   66 | F      | chi huo |
| 964 | stu964 |   66 | F      | chi huo |
+-----+--------+------+--------+---------+

恢复完成后别急着上线,赶紧做一次全量备份

[ root@node2 /mydata/backups ]# innobackupex --user=root  --host=172.18.25.52 --password=123  /mydata/backups/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值