XtraBackup全量备份与恢复MySQL数据-创新互联-成都快上网建站

XtraBackup全量备份与恢复MySQL数据-创新互联

防伪码:没有相当程度的孤独是不可能有内心的平和。

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了姜堰免费建站欢迎大家使用!

1、概述

Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且开源,淘宝的RDS for MySQL的物理备份就是基于XtraBackup做的。

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

(1)xtrabackup是C/C++编译的二进制文件,只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表;

(2)innobackupex则封装了xtrabackup,是一个perl脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁;

1.1 备份原理

整个备份过程如下图:

XtraBackup全量备份与恢复MySQL数据

  1. innobackupex 在启动后,会先 fork 一个进程,启动 xtrabackup进程,然后就等待 xtrabackup 备份完 ibd 数据文件;

  2. xtrabackup 在备份 InnoDB 相关数据时,是有2种线程的,1种是 redo 拷贝线程,负责拷贝 redo 文件,1种是 ibd 拷贝线程,负责拷贝 ibd 文件;redo 拷贝线程只有一个,在 ibd 拷贝线程之前启动,在 ibd 线程结束后结束。xtrabackup 进程开始执行后,先启动 redo 拷贝线程,从最新的 checkpoint 点开始顺序拷贝 redo 日志;然后再启动 ibd 数据拷贝线程,在 xtrabackup 拷贝 ibd 过程中,innobackupex 进程一直处于等待状态(等待文件被创建)。

  3. xtrabackup 拷贝完成idb后,通知 innobackupex(通过创建文件),同时自己进入等待(redo 线程仍然继续拷贝);

  4. innobackupex 收到 xtrabackup 通知后,执行FLUSH TABLES WITH READ LOCK (FTWRL),取得一致性位点,然后开始备份非 InnoDB 文件(包括 frm、MYD、MYI、CSV、opt、par等)。拷贝非 InnoDB 文件过程中,因为数据库处于全局只读状态,如果在业务的主库备份的话,要特别小心,非 InnoDB 表(主要是MyISAM)比较多的话整库只读时间就会比较长,这个影响一定要评估到。

  5. 当 innobackupex 拷贝完所有非 InnoDB 表文件后,通知 xtrabackup(通过删文件) ,同时自己进入等待(等待另一个文件被创建);

  6. xtrabackup 收到 innobackupex 备份完非 InnoDB 通知后,就停止 redo 拷贝线程,然后通知 innobackupex redo log 拷贝完成(通过创建文件);

  7. innobackupex 收到 redo 备份完成通知后,就开始解锁,执行 UNLOCK TABLES;

  8. 最后 innobackupex 和 xtrabackup 进程各自完成收尾工作,如资源的释放、写备份元数据信息等,innobackupex 等待 xtrabackup 子进程结束后退出。

1.2 常用参数

--defaults-file:指明服务器的配置文件,此参数必须作为innobackupex的第一个参数,否则报错

--host:指明连接数据库的主机

--user:指明执行数据库备份的用户名

--password:指明执行备份的密码

--backup:指明为备份,此参数可以忽略

--apply-log:重做日志

--copy-back:执行数据恢复

--slave-info:备份从库的show slave status信息,仅用于在备份从库时使用

--no-lock:不锁表,仅适用于存储引擎为innodb,并且不在乎备份位置点时使用

2、安装XtraBackup

2.1 环境准备

主机名IP系统MySQL版本
MySQL-01192.168.10.20CentOS release 6.9 (Final)5.6.36

MySQL的安装步骤略。

2.2 创建备份用户

mysql> create user 'backup'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.04 sec) mysql> grant reload,lock tables,replication client,process on *.* to 'backup'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.30 sec) mysql> flush privileges; Query OK, 0 rows affected (0.04 sec)

2.3 创建备份目录

[root@MySQL-01 ~]#mkdir /backup

2.4 下载xtraBackup

[root@MySQL-01 ~]#cd /opt # 下载可能较慢。 [root@MySQL-01 opt]#wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm

2.4 安装XtraBackup

# 安装的时候出现报错,原因为依赖包未安装。 [root@MySQL-01 opt]#rpm -ivh percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm warning: percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY error: Failed dependencies: libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.7-2.el6.x86_64 perl(DBD::mysql) is needed by percona-xtrabackup-24-2.4.7-2.el6.x86_64 # 安装相关依赖包 [root@MySQL-01 opt]#yum -y install libev-devel perl-DBD-MySQL [root@MySQL-01 opt]#rpm -ivh percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm warning: percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing...                ########################################### [100%] 1:percona-xtrabackup-24  ########################################### [100%] [root@MySQL-01 opt]#rpm -ql percona-xtrabackup-24-2.4.7-2.el6.x86_64 /usr/bin/innobackupex                #innobackupex脚本工具 /usr/bin/xbcloud /usr/bin/xbcloud_osenv /usr/bin/xbcrypt /usr/bin/xbstream /usr/bin/xtrabackup                    #最主要的备份工具 /usr/share/doc/percona-xtrabackup-24-2.4.7 /usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING /usr/share/man/man1/innobackupex.1.gz /usr/share/man/man1/xbcrypt.1.gz /usr/share/man/man1/xbstream.1.gz /usr/share/man/man1/xtrabackup.1.gz

3、备份与恢复测试

3.1 全量备份

# defaults-file:my.cnf配置路径 [root@MySQL-01 opt]#innobackupex --defaults-file=/app/mysql/my.cnf --user=backup --password=123456 /backup # 查看backup目录下已经有备份文件 [root@MySQL-01 opt]#ll /backup/ total 4 drwxr-x--- 5 root root 4096 Jul 14 17:25 2017-07-14_17-25-24 [root@MySQL-01 opt]#ls /backup/2017-07-14_17-25-24/ backup-my.cnf  performance_schema      xtrabackup_checkpoints ibdata1        rep                     xtrabackup_info mysql          xtrabackup_binlog_info  xtrabackup_logfile [root@MySQL-01 opt]#cat /backup/2017-07-14_17-25-24/xtrabackup_checkpoints backup_type = full-backuped        #备份方式为全量备份 from_lsn = 0                                  #由于是全备,其实LSN号为0 to_lsn = 13835894                        #截止LSN号 last_lsn = 13835894 compact = 0 recover_binlog_info = 0

3.2 模拟恢复

既然全量备份已经完成,那么就来测试一下。

# 将数据库停掉 [root@MySQL-01 ~]#service mysqld stop Shutting down MySQL............ SUCCESS! # 将data文件移到backup目录下 [root@MySQL-01 ~]#mv /app/mysql/data /backup/data_bak # 无法启动mysqld了 [root@MySQL-01 ~]#service mysqld start Starting MySQL.Logging to '/app/mysql/data/MySQL-01.err'. . ERROR! The server quit without updating PID file (/app/mysql/data/MySQL-01.pid). # apply-log参数:在真正恢复数据库数据之前,先将数据库redo日志状态恢复。 [root@MySQL-01 ~]#innobackupex --defaults-file=/app/mysql/my.cnf --user=backup --password=123456  --apply-log /backup/2017-07-14_17-25-24 # 执行数据恢复 [root@MySQL-01 ~]#innobackupex --defaults-file=/app/mysql/my.cnf --user=backup --password=123456  --copy-back /backup/2017-07-14_17-25-24 [root@MySQL-01 ~]#chown -R mysql.mysql /app/mysql/data # 再次启动数据库,显示成功 [root@MySQL-01 ~]#service mysqld start Starting MySQL.Logging to '/app/mysql/data/MySQL-01.err'. . SUCCESS!

4、参考

http://mysql.taobao.org/monthly/2016/03/07/

http://www.cnblogs.com/olinux/p/5207887.html

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:XtraBackup全量备份与恢复MySQL数据-创新互联
浏览地址:http://kswjz.com/article/dehppe.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流