首先先普及一下MySQL常用的备份工具
常用备份工具缺点
物理备份缺点:跨平台性差,备份时间长、冗余备份、浪费存储空间;
mysqldump备份缺点:效率较低,备份和还原速度慢,备份工程,数据插入和更新操作会被挂起;
XtraBackup工具
一款强大的在线热备工具:备份工程中不锁库表,适合生产环境;由专业组织Percona提供(改进MySQL分支);
主要含两个组织:xtrabackup:C程序,支持InnoDB/XtraDB,innobackupex:以Perl脚本封装xtrabackup,还支持MyISAM;
安装xtrabackup
下载xtrabackup。
下载地址:https://www.percona.com/downloads/
最新版的为8.0版本。
本人下载是2.4版本。
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.13/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.13-r3e7ca7c-el7-x86_64-bundle.tar
解压源码包,进入源码目录。
tar -xf Percona-XtraBackup-2.4.13-r3e7ca7c-el7-x86_64-bundle.tar
yum -y install percona-xtrabackup-*.rpm
innobackupex --help
··· ···
下面来说一下innobackuppex命令的基本用法。
innobackupex命令常用选项
--host | 主机名 |
--user | 用户名 |
--port | 端口号 |
--password | 密码 |
--databases | 数据名 |
--no-timestamp | 不用日期命名备份文件存储的子目录名 |
--redo-only | 日志回滚合并(最后一次增量备份日志回滚不需要此项)--apply-log-only |
--copy-back | 恢复数据 |
--incremental 目录名 | 增量备份 |
--incremental--basedir=目录名 | 增量备份时,指定上一次备份数据存储的目录名 |
--incremental-dir=目录名 | 准备恢复数据时,指定增量备份数据存储的目录名 |
--export | 导出表信息 |
import | 导入表空间 |
--apply-back | 准备还原(回滚日志) |
通过上面的基本选项来一次完全备份
完全备份
innobackupex --user=root --password=5GkNMcVCcyy /data/backup/mysql --no-timestamp
······
ls /data/backup/mysql/
backup-my.cnf mysql test xtrabackup_info zabbix
ibdata1 performance_schema xtrabackup_checkpoints xtrabackup_logfile
同步日志
innobackupex --user=root --password=5GkNMcVCcyy --apply-log /data/backup/mysql/
ls /data/backup/mysql/
backup-my.cnf ib_logfile1 performance_schema xtrabackup_info zabbix
ibdata1 ibtmp1 test xtrabackup_logfile
ib_logfile0 mysql xtrabackup_checkpoints xtrabackup_master_key_id
恢复数据库
删除数据库目录
rm -rf /data/mysql/data/
创建数据库目录
mkdir /data/mysql/data/
恢复数据
innobackupex --user=root --password=5GkNMcVCcyy --copy-back /data/backup/mysql/
给数据库目录授权
setfacl -R -m u:mysql:rwx /data/mysql/data/
停止数据库服务器
/etc/init.d/mysqld stop
启动数据库服务器
/etc/init.d/mysqld start
进入数据库
mysql -uroot -p5GkNMcVCcyy
查看所有数据库
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| zabbix |
+--------------------+
5 rows in set (0.00 sec)
增量备份与恢复
主要事项:必须先有一次完全备份
备份前先建立一个备份专用用户。
MySQL [(none)]> grant all on *.* to backup@'localhost' identified by '123456';
备份授权库,可以用系统自带的cp命令来实现。
cp -r /data/mysql/data/mysql/ /tools/mysql-2.bak
完全备份
rm -rf /data/backup/mysql/
innobackupex --user=backup --password=123456 /data/backup/mysql/full/0227 --no-timestamp
ls /data/backup/mysql/full/0227/
backup-my.cnf performance_schema xtrabackup_checkpoints zabbix
ibdata1 test xtrabackup_info
mysql xtrabackup_binlog_info xtrabackup_logfile
增量备份
innobackupex --user=backup --pasword=123456 --incremental /data/backup/mysql/incre/0227 --incremental-basedir=/data/backup/mysql/full/0227/ --no-timestamp
ls /data/backup/mysql/incre/0227/
backup-my.cnf mysql xtrabackup_binlog_info xtrabackup_logfile
ibdata1.delta performance_schema xtrabackup_checkpoints zabbix
ibdata1.meta test xtrabackup_info
比较两个文件的大小
du -h /data/backup/mysql/incre/
1.3M /data/backup/mysql/incre/0227/mysql
4.8M /data/backup/mysql/incre/0227/zabbix
0 /data/backup/mysql/incre/0227/test
636K /data/backup/mysql/incre/0227/performance_schema
6.7M /data/backup/mysql/incre/0227
6.7M /data/backup/mysql/incre/
du -h /data/backup/mysql/full/
2.0M /data/backup/mysql/full/0227/mysql
146M /data/backup/mysql/full/0227/zabbix
0 /data/backup/mysql/full/0227/test
636K /data/backup/mysql/full/0227/performance_schema
225M /data/backup/mysql/full/0227
225M /data/backup/mysql/full/
恢复备份
rm -rf /data/mysql/data/
mkdir /data/mysql/data/
恢复完全备份,通过XtraBackup工具备份的数据库目录,若要恢复到另一个MySQL服务器,需要先做一个“--apply-log --redo-only ”的准备操作。
innobackupex --user=backup --password=123456 --apply-log --redo-log /data/backup/mysql/full/0227/
恢复增量备份
innobackupex --user=backup --password=123456 --apply-log-only /data/backup/mysql/full/0227/ --incremental-dir="/data/backup/mysql/incre/0227/"
拷贝文件
innobackupex --user=backup --password=123456 --copy-back /data/backup/mysql/full/0227/
ls /data/mysql/data/
2019-02-27_15-07-38 ib_logfile0 ibtmp1 performance_schema xtrabackup_info zabbix
ibdata1 ib_logfile1 mysql test xtrabackup_master_key_id
setfacl -R -m u:mysql:rwx /data/mysql/data/
/etc/init.d/mysqld restart