xtrabackup是由percona开源的免费数据库热备份软件,它能对innodb数据库和xtradb存储引擎的数据库进行备份,对于myisam的备份需要加表锁,当数据库数据大于10G时,xtrabackup备份比mysqldump优秀。
xtrabackup的执行文件说明:
xtrabackup:专门用来备份innodb引擎的。
innobackupex:支持备份innodb和myisam,myisam备份需要flush table with read lock(锁表)
备份原理:
备份开始时会开启一个后台检测进程,实时检测mysql redo的变化,发现一旦有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中,之后复制innodb的数据文件与系统表空间文件ibdatax,复制结束后,将执行flush tables with read lock,然后复制.frm MYI MYD等文件,最后执行unlock tables,最后停止xtrabackup_log
安装xtrabackup
需要先安装yum拓展源percona-release
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
重新生成缓存:
yum clean all
yum makecache
安装percona-xtrabackup
yum install percona-xtrabackup
在mysql里面创建备份用户并授权:
grant reload,lock tables,replication client on *.* to 'backuser'@'loca
lhost' identified by '123457';
flush privileges;
全量备份
----------------------------------
创建备份目录:
mkdir /data/backup
备份mysql:
innobackupex --defaults-file=/etc/my.cnf --user=backuser --password=123457 -S /tmp/mysql.sock /data/backup
出现:
191103 17:29:35 completed OK!
备份完成,会在备份目录下生成一个目录:
ls /data/backup/
2019-11-03_17-29-30
这个目录是按备份时间戳命名的。
-----------------------------------------
全量备份恢复
停止mysqld服务:
/etc/init.d/mysqld stop
删除原有数据:
mv /data/mysql/ /data/mysql_bak
mkdir /data/mysql/
恢复mysql
首先需要初始化
innobackupex --use-memory=512M --apply-log /data/backup/2019-11-03_17-29-30/
–use-memory:指定需要用到的内存,内存最大,速度越快。
–apply-log:用到刚才备份的文件
恢复:
innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/2019-11-03_17-29-30/
查看mysql数据目录:
du -sh /data/mysql
111M /data/mysql
还有最后一步:
chown mysql:mysql /data/mysql
完成。
增量备份:
如果数据太大,经常全量备份太耗费资源,所有就可以使用在全量的基础上进行增量备份。
上面已经有一个全量备份了。
2019-11-03_17-29-30
做两次增量备份:
第一次备份:
先对数据库做一些改天,创建库t1:
mysql -uroot -p123457 -e "create database t1;"
备份:
innobackupex --defaults-file=/etc/my.cnf --user=backuser --password=123457 -S /tmp/mysql.sock --incremental /data/backup/ --incremental-basedir=/data/backup/2019-11-03_17-29-30/
–incremental:做增量备份
–incremental-basedir:增量备份的基础,在这里是全量备份。
查看:
ls /data/backup/
2019-11-03_17-29-30 2019-11-03_18-40-16
第二个就是第一个增量备份。
第二个增量备份:
innobackupex --defaults-file=/etc/my.cnf --user=backuser --password=123457 -S /tmp/mysql.sock --incremental /data/backup/ --incremental-basedir=/data/backup/2019-11-03_18-40-16/
–incremental-basedir:在这里是第一次增量备份,如果是全量备份的话,等下恢复的时候,直接初始话全量和第二次增量备份就可以得到全部数据了。
ls /data/backup/
2019-11-03_17-29-30 2019-11-03_18-40-16 2019-11-03_18-47-24
增量备份恢复
/etc/init.d/mysqld stop
mv /data/mysql /data/mysql.bak
mkdir /data/mysql
先初始化全量:
innobackupex --apply-log --redo-only /data/backup/2019-11-03_17-29-30
初始化第一次增量:
innobackupex --apply-log --redo-only /data/backup/2019-11-03_17-29-30/ --incremental-dir=/data/backup/2019-11-03_18-40-16/
初始化第二次增量:
innobackupex --apply-log /data/backup/2019-11-03_17-29-30/ --incremental-dir=/data/backup/2019-11-03_18-47-24/
再一次初始话全量:
innobackupex --apply-log /data/backup/2019-11-03_17-29-30/
参数说明:
-apply-log:同xtrabackup的–prepare参数,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。–apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。
–redo-only:强制备份日志时只redo,跳过rollback,这在做增量备份时非常必要
增量备份恢复:
innobackupex --copy-back /data/backup/2019-11-03_17-29-30/
增加权限,防止启动有问题:
chown -R mysql:mysql /data/mysql