通常我们都是使用xtrabackup工具来备份数据库,它是一个专业的备份工具,先来简单介绍下它。
Percona-xtrabackup是 Percona公司开发的一个用于mysql数据库物理热备的备份工具,支持MySQL、Percona server和MariaDB,开源免费,是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。
MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具,xtrabakackup有2个工具,分别是xtrabakup、innobakupe。
percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库,它的增量备份不是基于二进制日志文件来还原数据的,是基于mysql数据块。
备份还原过程快速、可靠 备份过程不会打断正在执行的事务 能够基于压缩等功能节约磁盘空间和流量 自动实现备份检验 开源,免费
xtrabackup –backup
--user:该选项表示备份账号
--password:该选项表示备份的密码
--host:该选项表示备份数据库的地址
--databases:该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如:”xtra_test dba_test”,同时,在指定某数据库时,也可以只指定其中的某张表。如:”mydatabase.mytable”。该选项对innodb引擎表无效,还是会备份所有innodb表
--defaults-file:该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置
--incremental:该选项表示创建一个增量备份,需要指定–incremental-basedir
--incremental-basedir:该选项指定为前一次全备份或增量备份的目录,与–incremental同时使用
--incremental-dir:该选项表示还原时增量备份的目录
--include=name:指定表名,格式:databasename.tablename
prepare
--apply-log:此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
--use-memory:该选项表示和–apply-log选项一起使用,prepare 备份的时候,xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB),推荐1G
--export:表示开启可导出单独的表之后再导入其他Mysql中
--redo-only:此选项在prepare base full backup,往其中merge增量备份时候使用
--copy-back:复制
--move-back:移动
1)xtrabackup_info:innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN,BINLOG的位置
2)xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
3)xtrabackup_binlog_info:MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
4)backup-my.cnf:备份命令用到的配置选项信息
5)xtrabackup_logfile:备份生成的日志文件
1.datadir目录必须为空。除非指定innobackupex –force-non-emptydirectorires选项指定,否则–copy-backup选项不会覆盖
2.restore还原之前,必须shutdown停止 MySQL服务,不能将一个运行中的实例restore到datadir目录中
3.修改恢复文件的权限为mysql
4.最后一次增量备份还原要回滚事务
5.二进制安装的mysql要是出现停止不了服务就用killall –9 mysqld 杀掉进程进而实现停止服务
1、两台主机17和37,其中17当主mysql服务器,37用来还原的主机,
2、目录,1个存放完整备份的目录,N个存放增量备份的目录
说明:
full目录: 存放完全备份
inc1目录:存放第一次的增量备份
inc2目录:存放第二次的增量备份
1、完全备份数据库
xtrabackup -pcentos --backup --target-dir=/backups/full/ # --backup表示备份 # --target-dir=填写备份到哪里
2、往表中增加数据
mysql -pcentos hellodb -e "insert students (name,age) values('gaodao01',20)"
3、第一次增量备份
xtrabackup –pcentos --backup --target-dir=/backups/inc1/ --incremental-basedir=/backups/full # --incremental-basedir表示基于谁的增量备份,写上上一次的备份路径 #
4、再次修改数据表
mysql -pcentos hellodb -e "insert students (name,age) values('gaodao02',21)"
5、第二次增量备份
xtrabackup -pcentos --backup --target-dir=/backups/inc2/ --incremental-basedir=/backups/inc1/
说明:还原的时候我们要考虑到前几次不要回滚,最后一次还原要回滚,还原主机要安装xtrabackup工具
1、把备份的目录传送到要还原的主机上
scp -r /backups/ 192.168.43.37:/
2、停服务并清空mysql数据
systemctl stop mysqld rm -rf /app/mysql/*
3、完全备份的预处理
xtrabackup --prepare --apply-log-only --target-dir=/backups/full
# --prepare 表示还原 # --apply-log-only 表示不回滚
4、第一次增量备份预处理
xtrabackup --prepare --apply-log-only --target-dir=/backups/full --incremental-dir=/backups/inc1
# 同样不回滚
5、第二次增量备份预处理
xtrabackup --prepare --target-dir=/backups/full --incremental-dir=/backups/inc2 # 这是最后一次,所以要回滚不完整的事务
6、复制处理好的数据到真正的存放数据库目录下
xtrabackup --copy-back --target-dir=/backups/full # 它会根据你的配置文件my.cnf来读取存放位置
7、修改数据库文件权限
chown -R mysql.mysql /app/mysql/
以上还原到了备份时的状态,我们备份完二次增量后又加了条记录,还没来得急三次增量备份就宕机了,所以再次利用二进制日志文件还原到最新状态
8、通过二进制文件还原到最新状态
1)以下图中文件记录了还原到的位置
2)从原主机导出二进制文件日志
mysqlbinlog --start-position=1039 /app/logs/mysql-bin.000003 >/app/binlog.sql
3)scp传送到目标主机来还原
首先在配置文件中加入禁止所有人访问选项
skip-networking
启动服务
systemctl start mysqld
导入二进制日志
mysql -pcentos<binlog.sql
4)进入数据库验证
5)OK 恢复完成,删除配置文件中的skip-networking并重启服务
systemctl restart mysqld