Percona XtraBackup 是基于MySQL服务器的开源热备份工具;支持的数据库 Percona , MySQL, MariaDB;支持数据库引擎 InnoDB, XtraDB, HailDB,(MyISAM, Merge,Archive 需暂停写);
特性:1. 快速可靠地完成备份2. 备份期间不间断事务处理3. 节省磁盘空间和网络带宽4. 自动备份验证5. 更快的恢复时间6. 进行差异备份7. 更容易在线创建备库8. 支持备份加密
备份过程:
记录日志序列号 (LSN) 复制数据文件XtraBackup启用后台进程监控事务日志文件,并复制变更日志
XtraBackup 下载地址:https://www.percona.com/downloads/XtraBackup/
XtraBackup 安装:
tar zxvf percona-xtrabackup-2.4.5-linux-x86_64.tar.gzmv percona-xtrabackup-2.4.5-Linux-x86_64 /usr/local/xtrabackupln -s /usr/local/xtrabackup/bin/innobackupex /usr/bin/innobackupexln -s /usr/local/xtrabackup/bin/xbcloud /usr/bin/xbcloudln -s /usr/local/xtrabackup/bin/xbcloud_osenv /usr/bin/xbcloud_osenvln -s /usr/local/xtrabackup/bin/xbcrypt /usr/bin/xbcryptln -s /usr/local/xtrabackup/bin/xbstream /usr/bin/xbstreamln -s /usr/local/xtrabackup/bin/xtrabackup /usr/bin/xtrabackupxtrabackup : 备份数据库(InnoDB和XtraDB)innobackupex : 备份数据库(MyISAM;perl脚本对xtrabackup进行封装)xbcrypt : 加密解密备份文件xbstream : 压缩或自定流格式xbcloud : 从云上传或下载 xbstream 文件xbcloud_osenv :备份还原所需权限:
系统权限:数据库目录的 READ , WRITE , EXECUTE数据库权限:RELOAD , LOCK TABLES , REPLICATION CLIENT , CREATE TABLESPACE , PROCESS , SUPER , CREATE , SELECTxtrabackup 配置:命令行或 /etc/my.cnf读取模块:[mysqld] 和 [xtrabackup] ([xtrabackup] 优先读取)定义备份文件存储位置两种方法:方法一:xtrabackup --backup --target-dir=/data/backups/方法二:[xtrabackup]target_dir = /data/backups/备份时需指定命令 --backup ,备份不会覆盖已存在的文件,存在则备份失败。备份可随时取消,对数据库无影响。注:xtrabackup只备份数据文件,并不备份数据表结构(.frm),恢复时必须存在表结构(.frm)。增量备份:每个数据页都有一个日志序列号(LSN),LSN 是整个数据库的系统版本号,LSN 都记录最近的变化。所以增量备份会复制那些自上次全备或曾备以来变化的页面。当前 my.cnf 未进行配置,基本如下:
# cat /etc/my.cnf [mysqld] port=3306 user=mysql server_id = 1 basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock pid-file=/var/run/mysqld/mysqld.pid log-error=/var/log/mysqld.logautocommit = 1 skip-name-resolveskip-external-lockinglower_case_table_names=1character_set_server=utf8 default_storage_engine = InnoDBexplicit_defaults_for_timestamp = 1transaction_isolation = READ-COMMITTEDskip-external-locking完整备份#全部备份innobackupex --user=root --passWord=123456 /data/backups/innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/backups/#单库备份innobackupex --user=root --password=123456 --database=test /data/backups/#压缩备份innobackupex --user=root --password=123456 --stream=tar /data/backups | gzip > /data/backups/`date +%F_%H-%M-%S`.tar.gz #不创建时间戳目录,所有文件都在备份目录下(--no-timestamp)innobackupex --user=root --password=123456 /data/backups/ --no-timestampmkdir /data/backups/fullbackup20170201innobackupex --user=root --password=123456 /data/backups/fullbackup20170201/ --no-timestamp完整备份还原#停止服务service mysqld stop#保存备份(实际只还原 data 中的数据,data目录需为空)mv /usr/local/mysql /usr/local/mysql_bak mv /usr/local/mysql/data /usr/local/mysql/data_bak #应用日志保证数据一致性(撤销或重播事务 --apply-log);可指定内存,越大会越好(默认100MB)innobackupex --defaults-file=/etc/my.cnf --apply-log --use-memory=1G /data/backups/2017-02-09_15-46-04# --move-back 比 --copy-back 更快(选择其中一种即可)innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backups/2017-02-09_15-46-04#设置用户&组chown -R mysql:mysql /usr/local/mysql/data#启动服务service mysqld start增量备份测试1. 完整备份,更名innobackupex --user=root --password=123456 /data/backups/mv /data/backups/2017-02-09_16-13-26 /data/backups/full_backuptest2. 创建测试库、表、记录mysql> create database testdb;mysql> use testdb;mysql> create table testtab(id int(11) NULL, name varchar(20) NULL) ENGINE=innodb;mysql> insert into testtab values(1,'a');mysql> select * from testtab;3.创建第一次增量备份(--incremental-basedir 为全备目录;--incremental 为增量保存目录)innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/data/backups/full_backuptest --incremental /data/backups/mv /data/backups/2017-02-09_16-23-36 /data/backups/incr_backuptest014. 新增记录mysql> insert into testtab values(2,'b'),(3,'c');mysql> select * from testtab;5.创建第二次增量备份(--incremental-basedir 上次增量目录;--incremental 为新的增量保存目录)innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/data/backups/incr_backuptest01 --incremental /data/backups/mv /data/backups/2017-02-09_16-30-05 /data/backups/incr_backuptest026. 表被删除了!mysql> drop table testtab;其他增量备份方法:#查看备份文件的 lsn 信息# cat full_backuptest/xtrabackup_checkpointsbackup_type = full-backupedfrom_lsn = 0to_lsn = 12655760last_lsn = 12655769compact = 0recover_binlog_info = 0# cat incr_backuptest01/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 12655760to_lsn = 12660175last_lsn = 12660184compact = 0recover_binlog_info = 0# cat incr_backuptest02/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 12660175to_lsn = 12662078last_lsn = 12662087compact = 0recover_binlog_info = 0#增量备份另一种方法:查看 xtrabackup_checkpoints ,也可以从 to_lsn 开始增量备份#innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /data/backups/ --incremental-lsn=12655760#innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /data/backups/ --incremental-lsn=12660175增量备份还原:#增量备份整合到完整备份中innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /data/backups/full_backuptestinnobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /data/backups/full_backuptest --incremental-dir=/data/backups/incr_backuptest01innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backups/full_backuptest --incremental-dir=/data/backups/incr_backuptest02#停止服务service mysqld stop#当前数据作为临时备份mv /usr/local/mysql/data /usr/local/mysql/data_bak # 还原innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backups/full_backuptest#设置用户&组chown -R mysql:mysql /usr/local/mysql/data#启动服务service mysqld start参考:Percona XtraBackup - Documentation
新闻热点
疑难解答