MySQL备份的三种方法(3)

三、基于xtrabackup命令工具来实现备份恢复
准备环境

节点1   IP:172.18.42.100  
节点2   IP:172.18.42.111  

1、部署节点1
(1)安装“xtrabackup”工具
[root@node0 ~]# yum install percona-xtrabackup-2.3.2-1.el7.x86_64.rpm -y  ##下载rpm包之后安装
[root@node0 ~]# rpm -ql percona-xtrabackup    ##查看percona-xtrabackup生成的文件
/usr/bin/innobackupex  ##我们主要使用这个命令
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-2.3.2
/usr/share/doc/percona-xtrabackup-2.3.2/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz

(2)首先确保存储引擎为innodb,且“innodb_file_per_table”为ON状态
MariaDB [Mydata]> show table status\G;
Name: db1
Engine: InnoDB
MariaDB [Mydata]> show global variables like "%innodb%";
innodb_file_per_table    ON  ##确保每个表使用单独的表空间,如果不指明,则所有数据库中的所有表将放在同一空间下

(3)实现整个数据库备份
[root@node0 ~]# innobackupex --user=root /backup/  ##对整个数据库做一次备份,放在“/backup”目录下;注意:如果登录MySQL需要密码,则需要指明密码
[root@node0 ~]# ll /backup/2016-04-20_10-34-41/
total 18460
-rw-r----- 1 root root      385 Apr 20 10:34 backup-my.cnf
-rw-r----- 1 root root 18874368 Apr 20 10:34 ibdata1
drwx------ 2 root root      47 Apr 20 10:34 Mydata
drwx------ 2 root root    4096 Apr 20 10:34 mysql
drwx------ 2 root root    4096 Apr 20 10:34 performance_schema
drwx------ 2 root root      19 Apr 20 10:34 test
-rw-r----- 1 root root      21 Apr 20 10:34 xtrabackup_binlog_info
-rw-r----- 1 root root      113 Apr 20 10:34 xtrabackup_checkpoints
-rw-r----- 1 root root      457 Apr 20 10:34 xtrabackup_info
-rw-r----- 1 root root    2560 Apr 20 10:34 xtrabackup_logfile

(4)修改数据,生成增量备份
MariaDB [Mydata]> select * from db1;  ##未修改数据之前查看一次
+------+
| id 
+------+
|  1 
|  2 
|  3 
+------+
MariaDB [Mydata]> insert into db1 values (100),(200);  ##插入两个“ID”
MariaDB [Mydata]> select * from db1;
+------+
| id 
+------+
|  1 
|  2 
|  3 
|  100 
|  200 
+------+
[root@node0 ~]# innobackupex --incremental /backup --incremental-basedir=/backup/2016-04-20_10-34-41/  ##生成增量备份
##--incremental:把增量备份存储在哪个路径下
##--incremental-basedir:基于谁来做增量备份
[root@node0 ~]# ll /backup/
drwx------ 6 root root 4096 Apr 20 10:34 2016-04-20_10-34-41  ##完全备份文件
drwx------ 6 root root 4096 Apr 20 10:41 2016-04-20_10-41-42  ##增量备份文件

(5)对完全备份数据做出整理,并把增量备份导入到完全备份中
[root@node0 ~]# innobackupex --apply-log --redo-only /backup/2016-04-20_10-34-41/  ##对增量备份做出整理
[root@node0 ~]# innobackupex --apply-log --redo-only /backup/2016-04-20_10-34-41/ --increment-dir=/backup/2016-04-20_10-41-42  ##将增量备份导入到完全备份中

2、部署节点2
(1)安装xtrabackup工具
 [root@node0 ~]# yum install percona-xtrabackup-2.3.2-1.el7.x86_64.rpm -y

(2)将节点1上已经导入增量备份的完全备份目录发送给节点2,如果节点1挂了,我们可以基于导入增量备份的完全备份来恢复
[root@node0 ~]# scp -r /backup/2016-04-20_10-34-41/ root@172.18.42.201:/root
[root@node1 ~]# innobackupex --copy-back 2016-04-20_10-34-41/  ##导出数据
[root@node1 ~]# chown -R mysql.mysql /data/  ##更改权限为mysql
[root@node1 ~]# ll /data/mysql/
total 18448
drwx------ 2 root root        6 Apr 20 11:02 2016-04-20_10-34-41
-rw-r----- 1 root root 18874368 Apr 20 11:02 ibdata1
drwx------ 2 root root      47 Apr 20 11:02 Mydata
drwx------ 2 root root    4096 Apr 20 11:02 mysql
drwx------ 2 root root    4096 Apr 20 11:02 performance_schema
drwx------ 2 root root      19 Apr 20 11:02 test
-rw-r----- 1 root root      23 Apr 20 11:02 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root      457 Apr 20 11:02 xtrabackup_info
[root@node1 ~]# systemctl start mariadb.service
MariaDB [Mydata]> select * from db1;
+------+
| id 
+------+
|  1 
|  2 
|  3 
|  100 
|  200 
+------+

问题小结:
1、当使用mysqldump+复制binlog方法时,最好不要将数据文件和二进制文件放在同一磁盘上,且需要对二进制文件作出备份
2、使用lvm2+复制binlog方法时,在创建快照的同时,最好对数据库施加读锁,以免数据发生改变,同时要确保文件的属主、属组为mysql
3、在使用xtrabackup方法时,整个过程中mysql存储数据的目录必须要和配置文件里面的“datadir”“相同,同时要确保文件的属主、属组为mysql

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/967584b58e12a90c87253e755c575eef.html