安装:
percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
二进制安装包,解压后直接可以使用。
常用参数:
--user=用户名 连接数据库使用的用户名
--password=密码 连接数据库使用的用户对应的密码
--defaults-file=/etc/my.cnf 指定读取的数据库的配置文件
--datadir 指定数据还原的目录
--database=数据库名称 指定某一数据库备份,若不添加此参数就是对全库做备份
--no-lock 不锁表,仅适用于存储引擎为innodb,并且不在乎备份位置点时使用。如果有任何DDL语句正在执行或非InnoDB正在更新时,会导致备份数据不一致。如果考虑备份因为获得锁失败,可以考虑--safe-slave-backup立刻停止复制线程。
--stream=tar 使用tar命令打包,此参数慎用,如使用解压时必须要带-i的参数
--socket=/tmp/mysql.sock 指定mysql.sock所在位置,便于备份进程登录mysql
--port=端口 指定备份数据库的端口
--no-timestamp 不创建时间戳目录来存储备份,而是指定到自己想要的备份文件夹中
--apply-log 重做日志,备份恢复前准备
--copy-back 备份恢复
--incremental 增量备份(增量备份仅适用于innodb和xtradb引擎)
--incremental-basedir 指明此次的增量备份是基于之前的哪一次备份
--redo-only 再次重做日志,用于增量备份的恢复过程中
--incremental-dir 恢复增量备份时,指明增量备份的目录
全备:
[root@test4 sss]# innobackupex -H192.168.65.4 -P3308 --user=root --password='123' /root/sss/
然后会在 /root/sss/ 目录下生成一个以日期时间命名的文件夹,内容如下:
[root@test4 2019-09-10_23-01-15]# pwd
/root/sss/2019-09-10_23-01-15
[root@test4 2019-09-10_23-01-15]# ll
total 33848
-rw-r-----. 1 root root 444 Sep 10 23:01 backup-my.cnf
drwxr-x---. 2 root root 4096 Sep 10 23:01 employees
-rw-r-----. 1 root root 830 Sep 10 23:01 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Sep 10 23:01 ibdata1
drwxr-x---. 2 root root 4096 Sep 10 23:01 mysql
drwxr-x---. 2 root root 4096 Sep 10 23:01 performance_schema
drwxr-x---. 2 root root 12288 Sep 10 23:01 sys
drwxr-x---. 2 root root 4096 Sep 10 23:01 ttt
drwxr-x---. 2 root root 4096 Sep 10 23:01 ty
-rw-r-----. 1 root root 7340032 Sep 10 23:01 undo001
-rw-r-----. 1 root root 7340032 Sep 10 23:01 undo002
-rw-r-----. 1 root root 7340032 Sep 10 23:01 undo003
-rw-r-----. 1 root root 16 Sep 10 23:01 xtrabackup_binlog_info
-rw-r-----. 1 root root 117 Sep 10 23:01 xtrabackup_checkpoints
-rw-r-----. 1 root root 512 Sep 10 23:01 xtrabackup_info
-rw-r-----. 1 root root 2560 Sep 10 23:01 xtrabackup_logfile
恢复:
1.先 apply-log
[root@test4 ~]# innobackupex --user=root --password='123' --apply-log /root/sss/2019-09-10_23-01-15/
如果成功,则最后会提示:190910 23:05:40 completed OK!
2.停止数据库,并清理MySQL数据目录里的所有文件
[root@test4 logs]# service mysqld stop
Shutting down MySQL.... SUCCESS!
3. --copy-back
[root@test4 ~]# innobackupex --user=root --password='123' /root/sss/2019-09-10_23-01-15/ --copy-back
如果配置文件不是放在默认位置,可以通过 --defaults-file 来指定,回复的目录都是根据my.cnf配置文件中的路径定的,所以如果想回复到哪个目录,直接修改配置文件中的相关路径即可
如果成功,最后会提示:190910 23:11:20 completed OK!
查看数据目录:
[root@test4 data]# ll
total 24620
drwxr-x---. 2 root root 4096 Sep 10 23:11 employees
-rw-r-----. 1 root root 830 Sep 10 23:11 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Sep 10 23:11 ibdata1
-rw-r-----. 1 root root 12582912 Sep 10 23:11 ibtmp1
drwxr-x---. 2 root root 4096 Sep 10 23:11 mysql
drwxr-x---. 2 root root 4096 Sep 10 23:11 performance_schema
drwxr-x---. 2 root root 12288 Sep 10 23:11 sys
drwxr-x---. 2 root root 4096 Sep 10 23:11 ttt
drwxr-x---. 2 root root 4096 Sep 10 23:11 ty
-rw-r-----. 1 root root 20 Sep 10 23:11 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root 512 Sep 10 23:11 xtrabackup_info
发现无文件已经还原好
4.修改文件属性
5.启动 MySQL 服务
如果启动报没有 error.log 的错误,直接在提示的路径下新建一个空的文件即可;
增量备份:
1.全备
要在全备的基础上才能增量,也就是说在增量之前一定要有一个全备。
[root@test4 sss]# innobackupex -H192.168.65.4 -P3308 --user=root --password='123' /root/sss/
2.增量备
[root@test4 sss]# innobackupex -H192.168.65.2 --user=root --password='123' --incremental-basedir=/root/backup/2019-07-19_17-27-21/ --incremental /root/increment/
其中 --incremental-basedir 参数指定的是全备的目录,--incremental 指定的是增量备的目录。
恢复:
1.对全备做prepare
[root@test4 sss]# innobackupex -H192.168.65.2 --user=root --password='123' --apply-log --redo-only /root/backup/2019-07-19_17-27-21/
2.对增备做prepare
[root@test4 sss]# innobackupex -H192.168.65.2 --user=root --password='123' --apply-log --redo-only /root/backup/2019-07-19_17-27-21/ --incremental-dir=/root/increment/2019-07-19_18-04-38/
前面一个路径为全备路径
--incremental-dir 写增备路径
PS:如果还有增备需要恢复,则在做一次第二步,但 --incremental-dir 指定的是其他增备的路径。
相当于在做增备恢复的时候,第二部的作用就是把其他的增备路径下的文件全部集中到全备路径下。
3.停止数据库,并清理MySQL数据目录里的所有文件
[root@test4 logs]# service mysqld stop
Shutting down MySQL.... SUCCESS!
4. --copy-back
[root@test4 ~]# innobackupex --user=root --password='123' -H192.168.65.2 -P3306 --copy-back /root/backup/2019-07-19_17-27-21/
如果配置文件不是放在默认位置,可以通过 --defaults-file 来指定,数据目录也可以通过 --datadir 来指定
如果成功,最后会提示:190910 23:11:20 completed OK!
远程备份
innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user root --password 123 --stream=tar /root/binlog/ | gzip |ssh root@192.168.65.3 "cat - > /root/binlog/$(date +%Y-%m-%d_%H:%m:%S).tar"
PS:在数据库服务器上执行该语句,吧备份文件放到远端机器上(192.168.65.3 为目标机器 IP; /root/binlog/ 为目标机器上的路径)