标签:
Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。
XtraBackup优势 :
1、无需停止数据库进行InnoDB热备
2、增量备份MySQL
3、流压缩到传输到其它服务器
4、能比较容易地创建主从同步
5、备份MySQL时不会增大服务器负载
安装XtraBackup后,其实会有几个工具:
innobackupex:
这个是其实是下面三个工具的一个perl脚本封装,可以备份MyISAM, InnoDB, XtraDB表。
xtrabackup:
一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。
xbcrypt:
用来加密或解密备份的数据。
xbstream:
用来解压或压缩xbstream格式的压缩文件。
建议使用perl封装的innobackupex来作数据库备份,因为比较容易使用。所以下面只介绍innobackupex的使用。其它的使用参考:http://www.percona.com/doc/percona-xtrabackup/2.1/manual.html
本文主要介绍innobackupex工具
https://www.percona.com/downloads/XtraBackup/
[root@localhost Packages]# yum -y install perl perl-devel libaiolibaio-devel perl-Time-HiRes perl-DBD-MySQL
[root@localhost ~]# rpm -ivhpercona-xtrabackup-2.2.11-1.el6.x86_64.rpm
warning:percona-xtrabackup-2.2.11-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, keyID cd2efd2a: NOKEY
Preparing... ###########################################[100%]
1:percona-xtrabackup ########################################### [100%]
innobackupex参数 目录.
--defaults-file 指定要备份的mysql实例的my.cnf文件,the only limitation is that it has to be the first option passed;并且在这个my.cnf中必须要有datadir等参数指明数据文件的路径!
--host 指定主机名/IP
--port 指定所需连接的端口,默认3306则可忽略不写
--socket 连接套字节的位置,默认为/var/lib/mysql/mysql.sock
--use-memory=4G 此参数用来控制备份所使用到的内存大小,默认为100M! 一般与--apply-log一起使用,备份时指定了但好像没用到!!
--apply-log 在数据库备份好后,这些备份的数据并不能立即用于恢复,因为这些刚备份的数据里包含了未提交的数据,需要回滚,oracle里称undo数据!也包括的已完成的事务在重做日志文件中并没有写入数据文件中,这些数据需要重做!oracle里称redo! 这个参数正是用于做这些事情,以保证数据文件的一致性!在数据库恢复之前,须先对备份的数据文件应用此参数!(innobackup会重现重做日志文件(redo log file)中的事务条目,重做已经提交的事务和回滚未提交的事务!)
--copy-back 把备份数据拷贝回server的datadir,它决定于my.cnf中的datadir参数,另外在恢复时datadir目录必须是空的,并且mysql数据库必须是shudown的!
--no-timestamp innobackupex--defaults-file=/etc/my.cnf --user=root --no-timestamp /tmp/backup/full(使用--no-timestamp时,后面的这个full目录必须跟上且不能提前自己建立,它由innobackupex自动建立,否则会报innobackupex: Error: Failed to create backup directory/tmp/backup/full/: File exists at /usr/bin/innobackupex line 3899.)
--redo-only 在做增量恢复时,全备和增量备份的数据文件在恢复前必须先将在重做日志文件中的已提交的事务重做!此参数将会合并全备和增量备份的数据文件,但不包括最后一次增量备份的数据文件!(--redo-only should be used when merging all incrementals except thelast one )
--compress 压缩选项,此选项不兼容--stream=tar,只兼容--stream=xbstream,此外加密项encrypted也不能兼容--stream=tar!
--decompress 在备份时如果使用了加密或者压缩选项,在用xbstream -x 解压包出来后,还须使用innodbackupex --decompress/data/backup 压缩后的文件为ibdata1.qp,qp结尾的文件!另外使用decompress还需yum install qpress.x86_64 装上qpress这个包!
--slave-info This option is useful whenbacking up a replication slave server. It also writes this information tothe "xtrabackup_slave_info" file as a "CHANGE MASTER"command. A new slave for this master can be set up by starting a slaveserver on this backup and issuing a"CHANGE"xtrabackup_slave_info" file. 在备份从服务器时,使用此参数能记录master的日志和偏移量!用于做一个新的从服务器!一般情况下的全备份,master二进制日志文件以及偏移点会记录在xtrabackup_binlog_info这个文件中!
[root@localhostback]# innobackupex --defaults-file=/etc/my.cnf --host 10.22.19.44 --port=3306--user=root --password=123456 --socket=/tmp/mysql.sock /back
[root@localhostaaa]# innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf--socket=/tmp/mysql.sock --no-timestamp --incremental --incremental-basedir=/back/2015-08-27_09-54-02//back/001/
[root@localhostaaa]# innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf--socket=/tmp/mysql.sock --no-timestamp --incremental--incremental-basedir=/back/001/ /back/002/
[root@localhostback]# cat 2015-08-27_09-54-02/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 919852583
last_lsn = 919852583
compact = 0
[root@localhostback]# cat 001/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 919852583
to_lsn = 919854256
last_lsn = 919854256
compact = 0
[root@localhostback]# cat 002/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 919854256
to_lsn = 919858085
last_lsn = 919858085
可以通过lsn看到这3个备份集关系
也可以通过此命令来进行指定lsn的方式进行备份
[root@localhostaaa]# innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf--socket=/tmp/mysql.sock --no-timestamp --incremental --incremental-lsn=919854256/back/002/
[root@localhost back]# innobackupex --defaults-file=/etc/my.cnf--host 10.22.19.44 --port=3306 --user=root --password=123456--socket=/tmp/mysql.sock --stream=tar /back>/back/fullbackup.tar
[root@localhost back]# innobackupex--defaults-file=/etc/my.cnf --host 10.22.19.44 --port=3306 --user=root--password=123456 --socket=/tmp/mysql.sock --stream=xbstream/back>/back/fullbackup.xbstream
[root@localhostback]# innobackupex --defaults-file=/etc/my.cnf --host 10.22.19.44 --port=3306--user=root --password=123456 --socket=/tmp/mysql.sock --stream=tar /back/|gzip -> /back/fullbackup2.tar.gz
[root@localhostback]# innobackupex --defaults-file=/etc/my.cnf --host 10.22.19.44 --port=3306--user=root --password=123456 --socket=/tmp/mysql.sock --stream=tar /back/|bzip -> /back/fullbackup2.tar.bz2
[root@localhostback]# innobackupex --defaults-file=/etc/my.cnf --host 10.22.19.44 --port=3306--user=root --password=123456 --socket=/tmp/mysql.sock --stream=xbstream--compress /back>/back/fullbackup2.xbstream
[root@localhost back]# innobackupex--defaults-file=/etc/my.cnf --host 10.22.19.44 --port=3306 --user=root--password=123456 --socket=/tmp/mysql.sock --stream=tar /back/2>/back/log2.log|ssh 10.22.19.90 "bzip2 ->/root/mysql.tar.bz2"
root@10.22.19.90‘s password:
[root@localhostback]# innobackupex --apply-log /back/2015-08-27_09-51-14/
[root@localhostback]# innobackupex --user=root --password=123456 --copy-back --use-memory=512M /back/2015-08-27_09-51-14/
[root@localhostback]# ll /usr/local/mysql|grep data
drwxr-xr-x 14 root root 4096 8月 27 12:50 data
drwx------ 11 mysql mysql 4096 7月 15 13:13 data2
[root@localhostback]# chown -R mysql:mysql /usr/local/mysql/data
[root@localhostback]# ll /usr/local/mysql|grep data
drwxr-xr-x 14 mysql mysql 4096 8月 27 12:50 data
drwx------ 11 mysql mysql 4096 7月 15 13:13 data2
[root@localhost~]# service mysqld start
Starting MySQL..[确定]
[root@localhostmysql]# mysqlbinlog /root/mysql.000018 >/tmp/abc.sql
[root@localhostmysql]#mysql -uroot -p123456
mysql>set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
mysql>source /tmp/abc.sql;
还原成功
[root@localhostdata]# innobackupex --apply-log --redo-only /back/2015-08-27_09-54-02/
[root@localhostdata]# innobackupex --apply-log --redo-only /back/2015-08-27_09-54-02/--incremental-dir=/back/001/
[root@localhostdata]# innobackupex --apply-log /back/2015-08-27_09-54-02/--incremental-dir=/back/002/
这是因为除了最后的一个增量备份外,前面的事物都不应该进行回滚因为有可能前一个没有提交的事物在下一个备份中提交了,如果进行了回滚则有可能导致数据不一致从而无法进行还原
[root@localhostdata]# innobackupex --copy-back /back/2015-08-27_09-54-02/
[root@localhostmysql]# mysqlbinlog /root/mysql.000018 >/tmp/abc.sql
[root@localhostmysql]#mysql -uroot -p123456
mysql>set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
mysql>source /tmp/abc.sql;
还原成功
由于时间原因没有添加部分还原内容,周末之前添加
版权声明:本文为博主原创文章,未经博主允许不得转载。
每天进步一点点——mysql——Percona XtraBackup(innobackupex)
标签:
原文地址:http://blog.csdn.net/bzfys/article/details/46987661