介绍

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链接的时候的地址。

需要一些账号权限
  • RELOADLOCK TABLES(如果使用了--no-lock参数,则不需要这个权限),这两个权限是为了执行FLUSH TABLES WITH READ LOCKFLUSH 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,INSERTSELECT权限。
创建备份账号的一个例子:
1
2
3
4
5
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 @图1

准备一个备份

使用--prepare参数 sudo xtrabackup --prepare --target-dir=/var/backups/mysqlbackup 在执行数据恢复之前,必须先执行prepare操作。在执行prepare操作之前这些个备份的数据都是不一致的,因为这些文件是在程序运行的不同时间复制的。 @图2

实现一个增量备份

使用--incremental-dir指定基础的版本 sudo xtrabackup --user=xtrabackup --password=password --port=3306 --host=localhost --backup --incremental-basedir=/var/backups/mysqlbackup @图3

恢复一个备份

使用--copy-back,--move-back参数,其中--move-back参数会删除备份,请谨慎使用。 xtrabackup --copy-back --target-dir=/data/backups/