介绍
Persona Xtrabackup 是 MySQL 中的一个免费的热备份工具。它针对 InnoDB 和 XtraDB 提供了无锁的热备份。它有如下几个特点:
- 可靠的快速备份。
- 备份时不中断事务处理。
- 节省硬盘空间和网络带宽。
- 自动的备份校验。
- 快速的数据恢复。
- 支持 InnoDB no-blocking 热备份。
- 支持增量备份。
- 支持压缩流式备份到另一台服务器
- 在不同的服务器中在线迁移表。
前提
需要账号和密码连接服务器
xtrabackup --user=user --password=password --backup --target-dir=/data/backup
除此之外,--port
可以指定端口,--socket
指定使用 localhost 本地连接的 socket 文件的位置,--host
指定 tcp/ip 链接的时候的地址。
需要一些账号权限
RELOAD
和LOCK TABLES
(如果使用了--no-lock
参数,则不需要这个权限),这两个权限是为了执行FLUSH TABLES WITH READ LOCK
和FLUSH ENGINE LOGS
指令。BACKUP_ADMIN
权限,查询performance_schema .log_status
需要这个权限,LOCK INSTANCE FOR BACKUP
,LOCK BINLOG FOR BACKUP
,LOCK TABLES FOR BACKUP
也需要。REPLICATION CLIENT
,为了查询二进制日志的位置。CREATE TABLESPACE
,为了导入表。PROCESS
,运行SHOW ENGINE INNODB STATUS
。SUPER
,INSERT
和SELECT
权限。
创建备份账号的一个例子:
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cr%T';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO
˓→'bkpuser'@'localhost';
GRANT SELECT ON performance_schema.log_status TO 'bkpuser'@'localhost';
FLUSH PRIVILEGES;
备份的一些例子
创建一个备份
使用--backup
参数
sudo xtrabackup --user=xtrabackup --password=password --port=3306 --host=localhost --backup --target-dir=/var/backups/mysqlbackup
准备一个备份
使用--prepare
参数
sudo xtrabackup --prepare --target-dir=/var/backups/mysqlbackup
在执行数据恢复之前,必须先执行 prepare 操作。在执行 prepare 操作之前这些个备份的数据都是不一致的,因为这些文件是在程序运行的不同时间复制的。
实现一个增量备份
使用--incremental-dir
指定基础的版本
sudo xtrabackup --user=xtrabackup --password=password --port=3306 --host=localhost --backup --incremental-basedir=/var/backups/mysqlbackup
恢复一个备份
使用--copy-back
,--move-back
参数,其中--move-back
参数会删除备份,请谨慎使用。
xtrabackup --copy-back --target-dir=/data/backups/