由于mysqldump是逻辑备份,且备份效率低下,当有大量数据时无法快速进行备份
此时用xtrabackup是一种极好的备份方案
1.完整备份及完整还原
备份:--backup
innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --host=127.0.0.1 --user=liuwei --password=123456 --backup /tmp/backup/
选项说明:
--defaults-file:指明服务器的配置文件,此参数必须作为innobackupex的第一个参数,否则报错
--host:指明主机
--user:指明备份的用户名
--password:指明备份用户名的密码
--backup:指明为备份,此参数可以忽略
/tmp/backup:备份的目录
注:xtrabackup是物理备份,经测试不需要指定用户名密码即可使用
应用:--apply-log
innobackupex --apply-log 2016-07-04_17-18-53/
注:在还原之前需要将收集到的重做日志应用到备份数据文件
还原:--copy-back
innobackupex --copy-back 2016-07-04_15-26-49/
注意:在还原之前需要做的操作
1.关闭数据库
2.删除数据目录下的所有文件
3.然后进行还原
4.还原之后需要修改数据目录的权限,因为还原后的默认属主为root,需要改为mysql
5.重启mysql
2.一次完整备份一次增量备份实现全部数据还原
一次完整备份:
innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --host=127.0.0.1 --backup /tmp/backup/
一次增量备份:
innobackupex --host=127.0.0.1 --incremental --incremental-basedir=/tmp/backup/2016-07-05_09-31-40/ /tmp/backup/
注:增量备份基于前一次的备份,不论前一次是增量还是完整备份
重做日志:--apply-log,--redo-only(redo时最好为绝对路径,在次吃过亏)
前提1:最后一次增量备份之前的--apply-log过程中,必须使用--redo-only选项
前提2:所有的增量恢复,都必须基于最后一次的完整备份
前提3:所有的增量恢复完成之后,必须基于完整备份再做一次--apply-log
a.innobackupex --apply-log --redo-only /tmp/backup/2016-07-05_09-31-40
b.innobackupex --apply-log /tmp/backup/2016-07-05_09-31-40 --incremental-dir=/tmp/backup/2016-07-05_10-35-02
c.innobackupex --apply-log /tmp/backup/2016-07-05_09-31-40
完整恢复:
innobackupex --copy-back /tmp/backup/2016-07-05_09-31-40
3.一次完整备份多次增量备份实现全部数据还原
一次完整备份:
innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --host=127.0.0.1 --backup /tmp/backup/
多次增量备份:
a.innobackupex --host=127.0.0.1 --incremental /tmp/backup/ --incremental-basedir=/tmp/backup/2016-07-05_11-43-08/
b.innobackupex --host=127.0.0.1 --incremental /tmp/backup/ --incremental-basedir=/tmp/backup/2016-07-05_11-44-43/
c.innobackupex --host=127.0.0.1 --incremental /tmp/backup/ --incremental-basedir=/tmp/backup/2016-07-05_11-46-50/
重做日志:
a.innobackupex --apply-log --redo-log 2016-07-05_11-43-08/
b.innobackupex --apply-log --redo-only /tmp/backup/2016-07-05_11-43-08/ --incremental-dir=/tmp/backup/2016-07-05_11-44-43/
c.innobackupex --apply-log --redo-only /tmp/backup/2016-07-05_11-43-08/ --incremental-dir=/tmp/backup/2016-07-05_11-46-50
d.innobackupex --apply-log /tmp/backup/2016-07-05_11-43-08/ --incremental-dir=/tmp/backup/2016-07-05_11-47-27/
e.innobackupex --apply-log /tmp/backup/2016-07-05_11-43-08/
完整恢复:
innobackupex --copy-back /tmp/backup/2016-07-05_11-43-08/
4.单表备份及恢复
备份单表:
innobackupex --host=127.0.0.1 --databases='p2p_tongjiang.rb_user' /tmp/backup/
准备单表:
innobackupex --apply-log --export /tmp/backup/2016-07-05_14-09-52/
注:准备完成后,会在备份目录下生成.cfg、.ibd文件,属主为root,用到时需要改为mysql
恢复单表:需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入
a.废弃原来的表空间
mariadb>alter table p2p_tongjiang.rb_user DISCARD TABLESPACE;
b.复制生成的*.cfg,*.ibd文件到数据目录下的库中
#cp rb_user.cfg rb_user.ibd /data/mysql/p2p_tongjiang/
c.把整个数据目录的属主改为mysql,因为刚刚复制进去的文件属主为root
#chown -R mysql.mysql /data/mysql/
d.导入生成的表空间(注:如果c步骤没有修改权限,则在导入表空间时会报表空间找不到的错误)
mariadb>alter table p2p_tongjiang.rb_user IMPORT TABLESPACE;