安装 XtraBackup
1. yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
2. yum install percona-xtrabackup-24
遇到的问题:
Transaction check error:
file /etc/my.cnf from install of Percona-Server-shared-56-5.6.39-rel83.1.el7.x86_64 conflicts with file from package mysql-community-server-5.7.22-1.el7.x86_64
解决方法:
安装 mysql-community-libs-compat
1. wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm
2. rpm -ivh mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm
3. yum install percona-xtrabackup-24
创建备份用户:
RELOAD、LOCK TABLES:在备份时,需要执行 FLUSH TABLES WITH READ LOCK 和 FLUSH ENGINE LOGS,然后开始复制数据。并且在使用 Backup Locks 时,需要执行 LOCK TABLES FOR BACKUP 和 LOCK BINLOG FOR BACKUP 。除非备份时,执行 --no-lock 选项,这样便不需要这两个权限了。
REPLICATION CLIENT:在备份时需要获得二进制日志的位置信息,需要该权限。
CREATE TABLESPACE:使用 XtraBackup 进行恢复独立表空间的时候,需要使用导入表空间,这时候需要该权限。
PROCESS:XtraBackup 在备份的时候,利用该权限可以查看所有正在服务器端运行的线程情况。
SUPER:用在复制环境中开启和关闭 SLAVE 线程。
CREATE:CREATE 权限用于创建 PERCONA_SCHEMA.xtrabackup_historty 数据库和表。
INSERT:INSERT 权限用于将写入历史记录到 PERCONA_SCHEMA.xtrabackup_historty 数据库和表。
SELECT:当 innobackupex 使用 --incremental-history-name 或 --incremental-history-uuid 选项时,可以使用 SELECT 权限查询 PERCONA_SCHEMA.xtrabackup_historty 表的 innodb_to_lsn 的值来满足该特性。
CREATE USER 'backup'@'localhost' IDENTIFIED BY '****';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, PROCESS ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
全量备份:
backup stage:
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password=***** /path/BACKUP_DIR/
prepare stage:
innobackupex --apply-log /path/BACKUP_DIR/******
--defaults-file:可以指定读取的配置文件,该选项必须作为命令行第一个选项
--use-memory:该选项指定 xtrabackup 在 prepare 阶段进行崩溃恢复的内存使用量,支持的单位如 1MB 1M 1GB 1G。它仅与 --apply-log 选项一起使用。
recovery stage:
datadir 目录必须为空,如果不为空,innobackupex --copy-back 将不会复制
innobackupex --copy-back /path/BACKUP_DIR/*****
chown -R mysql:mysql datadir
systemctl restart mysqld
增量备份:
backup stage:
导入了 sakila 数据库
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password=****** --incremental --incremental-basedir=/path/BACKUP_DIR/2018-05-11_22-11-35/ /path/INCREMENTAL_BACKUP_DIR/
在 sakila 表中创建了 test 表
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password=****** --incremental --incremental-basedir=/path/INCREMENTAL_BACKUP_DIR/2018-05-11_23-03-41 /path/INCREMENTAL_BACKUP_DIR/
往 test 表中插入数据
innobackupex --host=127.0.0.1 --port=3306 --user=backup --password=****** --incremental --incremental-basedir=/path/INCREMENTAL_BACKUP_DIR/2018-05-11_23-34-32 /path/INCREMENTAL_BACKUP_DIR/
prepare stage:
准备恢复到创建 test 表的状态
1. cp -R 2018-05-11_22-11-35 /path/BASE_DIR
2. innobackupex --apply-log --redo-only /path/BASE_DIR
3. innobackupex --apply-log --redo-only --incremental-dir=/path/INCREMENTAL_BACKUP_DIR/2018-05-11_23-03-41/ /path/BASE_DIR
4. innobackupex --apply-log --incremental-dir=/path/INCREMENTAL_BACKUP_DIR/2018-05-11_23-34-32/ /path/BASE_DIR
在恢复的最后次增量备份前,都要加 --redo-only
recovery stage:
和全量备份一样