首先先普及一下MySQL常用的备份工具

常用备份工具缺点

物理备份缺点:跨平台性差,备份时间长、冗余备份、浪费存储空间;

mysqldump备份缺点:效率较低,备份和还原速度慢,备份工程,数据插入和更新操作会被挂起;

XtraBackup工具

一款强大的在线热备工具:备份工程中不锁库表,适合生产环境;由专业组织Percona提供(改进MySQL分支);

主要含两个组织:xtrabackup:C程序,支持InnoDB/XtraDB,innobackupex:以Perl脚本封装xtrabackup,还支持MyISAM;

安装xtrabackup

下载xtrabackup。

下载地址:https://www.percona.com/downloads/

centos设置备份硬盘 centos备份软件_备份

最新版的为8.0版本。

本人下载是2.4版本。

centos设置备份硬盘 centos备份软件_MySQL_02

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