mysqlbackup物理备份

一、备份命令行参数
1. 备份操作: backup, backup-and-apply-log, backup-to-image
2. 备份校验操作: apply-log, apply-incremental-backup
3. 恢复操作: copy-back, copy-back-and-apply-log
4. 单文件备份操作: image-to-backup-dir, backup-dir-to-image, list-image,extract, validate
5. 指定全备目录:–backup-dir
6. 指定增量备份目录:–incremental-backup-dir
7. 指定备份类型:–incremental
8. 指定本次增量备份基于上次全备或者增量备份目录:–incremental-base
9. 指定本次增量备份基于上次全备或者增量备份的LSN 号:–start-lsn
10. 基于时间戳的备份目录:–with-timestamp
11. 指定压缩备份:–compress
12. 指定解压缩:–uncompress

二、备份

1. 完全备份
例 1: 基于全备目录进行全备

$ mysqlbackup --port=13000 --protocol=tcp --user=root --password \
--backup-dir=/home/admin/backups backup-and-apply-log

例 2: 基于时间戳目录备份

mysqlbackup --port=13000 --protocol=tcp --user=root --password \
--with-timestamp  --backup-dir=/home/admin/backups backup

2. 增量备份
例 1: 基于上次备份目录的增量备份

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --incremental \
--incremental-base=dir:/incr-backup/wednesday \
--incremental-backup-dir=/incr-backup/thursday backup
...many lines of output...
mysqlbackup: Backup created in directory '/incr-backup/thursday'
mysqlbackup: start_lsn: 2654255717
mysqlbackup: incremental_base_lsn: 2666733462
mysqlbackup: end_lsn: 2666736714
101208 17:14:58 mysqlbackup: mysqlbackup completed OK!

例 2: 基于上次备份的LSN 增量备份

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --incremental \
--start-lsn=2654255716  --with-timestamp  --incremental-backup-dir=/incr-backup backup
...many lines of output...
mysqlbackup: Backup created in directory '/incr-backup/2010-12-08_17-14-48'
mysqlbackup: start_lsn: 2654255717
mysqlbackup: incremental_base_lsn: 2666733462
mysqlbackup: end_lsn: 2666736714
101208 17:14:58 mysqlbackup: mysqlbackup completed OK!

3. 压缩备份
制作一个压缩备份前首先了解以下两点:
1. 压缩备份只能应用于全备,不能对增量备份进行压缩
2. 压缩备份不能应用与已经是压缩格式(Barracuda file format)的innodb 表

例 1: 制作一个压缩备份

 $ mysqlbackup --defaults-file=/home/pekka/my.cnf --compress backup
...many lines of output...
mysqlbackup: Compressed 488 MB of data files to 53 MB (compression 89%).
101208 15:48:09 mysqlbackup: Full backup completed!

三、Apply log
在Apply-log之前,数据文件是不一致的,因为它们在不同时间点被备份
因此,apply-log会使所有数据文件的步调达成一致通过innodb 的crash recovery
把已经提交的事务写入数据文件,把没有提交的事务进行回滚。
增量备份apply-incremental-backup 不会对redo log 中没有提交的事务进行回滚因为
可能下次增量备份事务已经提交了。
这个apply-log过程你可以在任何机器上运行,没有强制在线上或者备份库上运行
你可以把备份复制到闲置的服务器上去运行apply-log,以此来降低备份库的压力
不过,你必须保证backup和apply-log所使用的mysqlbackup的版本要一致

例 1: 全备的Apply-log

$ mysqlbackup --backup-dir=/full-backup/2010-12-08_17-14-11 apply-log
..many lines of output...
101208 17:15:10 mysqlbackup: Full backup prepared for recovery successfully!
101208 17:15:10 mysqlbackup: mysqlbackup completed OK

例 2: 增备的 apply-incremental-backup

$ mysqlbackup --incremental-backup-dir=/incr-backup/2010-12-08_17-14-48 
--backup-dir=/full-backup/2010-12-08_17-14-11 apply-incremental-backup
...many lines of output...
101208 17:15:12 mysqlbackup: mysqlbackup completed OK!

四、数据恢复
从一个备份去恢复MySQL 实例首先遵循下面两个必要条件
1. 首先停掉数据库
2. 确保数据文件是完全一致的,恢复之前是通过backup-apply-log 命令备份校验,或者通apply-log命令校验过。
3. 通过命令copy-back 或者copy-back-and-apply-log 进行恢复

例 1: 恢复一个全备MySQL 实例

mysqlbackup --defaults-file=path_to_my.cnf --datadir=path_to_data_directory --backup-dir=path_to_backup_directory copy-back
...many lines of output...
mysqlbackup: Finished copying backup files.
101208 16:48:13 mysqlbackup: mysqlbackup completed OK!

例 2: 恢复一个压缩的MySQL 实例

mysqlbackup --defaults-file= -uroot --backup-dir= --datadir= 
--uncompress copy-back-and-apply-log

例 3: 基于时间点的全量恢复
1. 基于时间点的恢复首先 MySQL 实例开启了BINLOG
2. 恢复之前进行apply-log 操作,操作输出信息中会打印出上次备份记录下来的binlog file name 和 position 通过binlog 进行恢复全备之后的数据

假如apply-log 操作后输出信息如下:

InnoDB: Last MySQL binlog file position 0 27183537, file name ./binlog.000005

首先通过上次的全备进行数据恢复,然后再通过binlog 进行全备后的数据恢复

$ mysqlbinlog --start-position=27183537 /sqldata/binlog.000005 >partial_binlog
$ mysqlbinlog /sqldata/binlog.000006 >> partial_binlog 
$ mysqlbinlog /sqldata/binlog.000007 >> partial_binlog 
... 
$ mysqlbinlog /sqldata/binlog.00000N>> partial_binlog
$ mysql < partial_binlog
Trackback

no comment untill now

Add your comment now

切换到手机版