1.创建用户,开启备份还原权限
mysql -u root -pyour_password -S /var/lib/mysql/mysql.sock -e " CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'secret'; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bkpuser'; GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; FLUSH PRIVILEGES; " |
2.完全备份
innobackupex --user=bkpuser --password=secret --defaults-file=/etc/my.cnf /bak/mysql_backup/#>信息输出...innobackupex: Backup created in directory '/bak/mysql_backup/2013-10-16_10-46-03'innobackupex: MySQL binlog position: filename 'mysql-bin.000018', position 5153337131016 10:46:17 innobackupex: Connection to database server closed131016 10:46:17 innobackupex: completed OK! |
备份完成数据存放在/bak/mysql_backup/下以时间命名的目录,在备份的同时,innobackupex还会在备份目录中创建如下文件:
(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息。
每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件。
(5)backup-my.cnf —— 备份命令用到的配置选项信息。
在使用innobackupex进行备份时,还可以使用–no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会以/bak/mysql_backup/目录来存储备份数据。
3.全备份数据恢复
主要分两部分数据准备(prepare)和数据拷贝(copy)
a)数据准备
在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理
不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。在实现“准备”的过程
中,innobackupex通常还可以使用–use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以
多划分一些内存给prepare的过程,以提高其完成速度。
innobackupex --user=bkpuser --defaults-file=/etc/my.cnf --apply-log /bak/mysql_backup/2013-10-16_10-46-03 |
b)数据拷贝
>关闭服务器>清空数据库datadir目录下所有数据>拷贝还原数据>更改权限>启动服务
mysqladmin --defaults-file=/etc/my.cnf -psecret -S /var/lib/mysql/mysql.sock shutdownrm -rf /var/lib/mysql/*innobackupex --user=bkpuser --defaults-file=/etc/my.cnf --copy-back /bak/mysql_backup/2013-10-16_10-46-03chown mysql:mysql -R /var/lib/mysql/mysqld_safe --defaults-file=/etc/my.cnf & |
4.压缩备份
Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用–stream选项即可。
innobackupex --user=bkpuser --password=secret --defaults-file=/etc/my.cnf --stream=tar /bak/mysql_backup/ | gzip >/bak/mysql_backup/$(date +%F_%H-%M-%S).tar.gz |
压缩备份到192.168.0.51远程服务器
innobackupex --user=bkpuser --password=secret --defaults-file=/etc/my.cnf --stream=tar /bak/mysql_backup/ | gzip | sshpass -p '51_passwd' ssh root@192.168.0.51 "cat - > /bak/mysql_backup/`date +%F_%H-%M-%S`.tar.gz" |
"在执行本地备份时,还可以使用–parallel选项对多个文件进行并行复制。此选项用于指定在复制时启动的线程数目。当然,在实际进行备份时要利用此功能的便利性,也需要启用innodb_file_per_table选项或共享的表空间通过innodb_data_file_path选项存储在多个ibdata文件中。对某一数据库的多个文件的复制无法利用到此功能。其简单使用方法如下: innobackupex –parallel /path/to/backup " |
还原数据要添加-i参数,否则还原会不完整,解压后操作如常进行恢复还原(p>c)
mkdir -p /bak/mysql_backup/2013-10-16_17-45-13/tar zxvfi /bak/mysql_backup/2013-10-16_17-45-13.tar.gz -C /bak/mysql_backup/2013-10-16_17-45-13/ |
5.增量备份
备份还原过程
备份:时间1,进行全备份A;时间2,进行增量备份A_1;时间3,进行增量备份A_2;…时间N,进行增量备份A_(N-1).
还原:对基础备份A进行prepare;在此基础上对A_1进行prepare;在此基础上对A_2进行prepare;…在此基础上对A_(N-1)进行prepare.这样得到的相当于一个全备份的数据,进行数据拷贝
# 基础备份是时间1时候的全备份mkdir -p /bak/mysql_backup/# 全备份Ainnobackupex --user=bkpuser --password=secret --defaults-file=/etc/my.cnf --no-timestamp /bak/mysql_backup/backup_A# 增量备份A_1innobackupex --user=bkpuser --password=secret --defaults-file=/etc/my.cnf --no-timestamp --incremental /bak/mysql_backup/backup_A_1 --incremental-basedir=/bak/mysql_backup/backup_A# 增量备份A_2innobackupex --user=bkpuser --password=secret --defaults-file=/etc/my.cnf --no-timestamp --incremental /bak/mysql_backup/backup_A_2 --incremental-basedir=/bak/mysql_backup/backup_A_1# ...# 增量备份A_(N-1)innobackupex --user=bkpuser --password=secret --defaults-file=/etc/my.cnf --no-timestamp --incremental /bak/mysql_backup/backup_A_(N-1) --incremental-basedir=/bak/mysql_backup/backup_A_(N-2) # 增量备份还原与全备份还原主要不同点依赖备份(A到A(N-2))要添加参数" --redo-only",# --redo-only 作用用于应用提交事务而不进行数据一致性回滚,因为增量备份是读取前面一个备份里面的xtrabackup-checkpoints记# 录的LSN,记录点是连续的.# 还原基础备份Ainnobackupex --apply-log --redo-only --defaults-file=/etc/my.cnf /bak/mysql_backup/backup_A# 还原增量备份A_1innobackupex --apply-log --redo-only --defaults-file=/etc/my.cnf /bak/mysql_backup/backup_A --incremental-dir=/bak/mysql_backup/backup_A_1# 还原增量备份A_2innobackupex --apply-log --redo-only --defaults-file=/etc/my.cnf /bak/mysql_backup/backup_A --incremental-dir=/bak/mysql_backup/backup_A_2# ...# 还原增量备份A_(N-2)innobackupex --apply-log --redo-only --defaults-file=/etc/my.cnf /bak/mysql_backup/backup_A --incremental-dir=/bak/mysql_backup/backup_A_(N-2)# 还原增量备份A_(N-1),最后一次要进行未提交事务回滚innobackupex --apply-log --defaults-file=/etc/my.cnf /bak/mysql_backup/backup_A --incremental-dir=/bak/mysql_backup/backup_A_(N-1) # 完成还原后执行数据拷贝mysqladmin --defaults-file=/etc/my.cnf -psecret -S /var/lib/mysql/mysql.sock shutdownrm -rf /var/lib/mysql/*innobackupex --user=bkpuser --defaults-file=/etc/my.cnf --copy-back /bak/mysql_backup/backup_Achown mysql:mysql -R /var/lib/mysql/mysqld_safe --defaults-file=/etc/my.cnf &