使用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 11月 17 22:14 backup-my.cnf #显示配置信息有哪些,对重新启动mysql是至关重要的。
drwxr-x--- 2 root root 60 11月 17 22:14 hidb
-rw-r----- 1 root root 18874368 11月 17 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 11月 17 22:14 xtrabackup_binlog_info # 二进制日志文件的信息,记录了我们备份到哪一刻。
-rw-r----- 1 root root 113 11月 17 22:14 xtrabackup_checkpoints # 记录了我们备份的属性。
-rw-r----- 1 root root 497 11月 17 22:14 xtrabackup_info # 记录我们使用的备份的工具的信息与备份的详细信息。
-rw-r----- 1 root root 2560 11月 17 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 11月 18 10:42 hidb
-rw-r-----. 1 root root 18874368 11月 18 10:42 ibdata1
-rw-r-----. 1 root root 5242880 11月 18 10:42 ib_logfile0
-rw-r-----. 1 root root 5242880 11月 18 10:42 ib_logfile1
-rw-r-----. 1 root root 12582912 11月 18 10:42 ibtmp1
drwxr-x---. 2 root root 4096 11月 18 10:42 mysql
drwxr-x---. 2 root root 4096 11月 18 10:42 performance_schema
drwxr-x---. 2 root root 20 11月 18 10:42 test
-rw-r-----. 1 root root 35 11月 18 10:42 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root 576 11月 18 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/