《MysqL 系列连载之 XtraBackup 全量热备 or 恢复实践(2)》要点:
本文介绍了MysqL 系列连载之 XtraBackup 全量热备 or 恢复实践(2),希望对您有用。如果有疑问,可以联系我们。
导读
如果您在本文遇到任何问题或疑问请到QQ群中与我们交流.也可在下方进行评论.我将在第一时间和您进行交流,共同学习.
QQ群:201777608、526871767、1689067(加群时注明:运维派)
1、准备工作
#系统环境
[root@master tools]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@master tools]# uname -r
2.6.32-642.el6.x86_64
#主数据库版本
[root@master ~]# MysqL -V
MysqL Ver 14.14 distrib 5.5.32,for Linux (x86_64) using readline 5.1
#检查数据库引擎
#主从之间的id不能相同 server-id
#启用二进制日志 log-bin
#一般在从库开启(可选) read_only #推荐使用InnoDB并做好相关配置
#检查主从数据库状态
[root@master ~]# MysqL -e “show global variables like ‘server_id’;”
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 241 |
+—————+——-+
[root@slave01 ~]# MysqL -e “show global variables like ‘server_id’;”
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 242 |
+—————+——-+
2、安装percona-xtrabackup
官网安装包地址 – https://www.percona.com/downloads/XtraBackup/LATEST/
1)源码安装Xtrabackup
将源码包下载到/usr/local/src下
源码包下载
cd /usr/local/src
#安装依赖
yum -y install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool zlib-devel libgcrypt-devel libcurl-devel crypt* libgcrypt* python-sphinx openssl imake libxml2-devel expat-devel ncurses5-devel ncurses-devle vim-common libgpg-error-devel libidn-devel perl-DBI perl-dbd-mysql perl-Time-HiRes perl-IO-Socket-SSL#下载源码包
wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.9/source/percona-xtrabackup-2.1.9.tar.gz#解压源码包
tar -zvxf percona-xtrabackup-2.1.9.tar.gzcd percona-xtrabackup-2.1.9
[root@master percona-xtrabackup-2.1.9]# ./utils/build.sh //执行该安装脚本,会出现下面信息
Build an xtrabackup binary against the specified InnoDB flavor.
Usage: build.sh CODEBASE
where CODEBASE can be one of the following values or aliases:
innodb51 | plugin build against InnoDB plugin in MysqL 5.1
innodb55 | 5.5 build against InnoDB in MysqL 5.5
innodb56 | 5.6,xTradb56,build against InnoDB in MysqL 5.6
| mariadb100,galera56
xTradb51 | xTradb,mariadb51 build against Percona Server with XTradB 5.1
| mariadb52,mariadb53
xTradb55 | galera55,mariadb55 build against Percona Server with XTradB 5.5
根据上面提示和你使用的存储引擎及版本,选择相应的参数即可.因为我用的是MysqL 5.5版本,所以执行如下语句安装:
[root@master percona-xtrabackup-2.1.9]# ./utils/build.sh innodb55
以上语句执行成功后,表示安装完成.
最后,把生成的二进制文件拷贝到一个自定义目录下(本例中为/home/MysqL/admin/bin/percona-xtrabackup-2.1.9),并把该目录放到环境变量PATH中.
mkdir -p /home/MysqL/admin/bin/percona-xtrabackup-2.1.9/
cp ./innobackupex /home/MysqL/admin/bin/percona-xtrabackup-2.1.9/
mv /usr/local/src/percona-xtrabackup-2.1.9/src/xtrabackup_innodb55 xtrabackup_55
cp /usr/local/src/percona-xtrabackup-2.1.9/src/xtrabackup_55 /usr/local/src/percona-xtrabackup-2.1.9/src/xbstream /home/MysqL/admin/bin/percona-xtrabackup-2.1.9/
vim /etc/profile
export PATH=$PATH:/home/MysqL/admin/bin/percona-xtrabackup-2.1.9/
刷新profile并测试下innobackupex是否正常使用
source /etc/profile
测试下innobackupex是否正常使用
innobackupex –help
3、全量备份和恢复
1)全量备份操作
执行下面语句进行全备: MysqL的安装目录是/application/MysqL/ MysqL的配置文件路径/etc/my.cnf 全量备份后的数据存放目录是/backup/MysqL/data
mkdir -p /backup/MysqL/data/
innobackupex –defaults-file=/etc/my.cnf –user=root /backup/MysqL/data/
170404 12:46:29 innobackupex: Waiting for log copying to finish
xtrabackup: The latest check point (for incremental): ‘1639325’
xtrabackup: Stopping log copying thread.
.>> log scanned up to (1639325)
xtrabackup: Creating suspend file ‘/backup/MysqL/data/2017-04-04_12-46-24/xtrabackup_log_copied’ with pid ‘21223’
xtrabackup: Transaction log of lsn (1639325) to (1639325) was copied.
170404 12:46:30 innobackupex: All tables unlocked
innobackupex: Backup created in directory ‘/backup/MysqL/data/2017-04-04_12-46-24’
innobackupex: MysqL binlog position: filename ‘MysqL-bin.000019’,position 967
170404 12:46:30 innobackupex: Connection to database server closed
170404 12:46:30 innobackupex: completed OK!
出现上面的信息,表示备份已经ok.
上面执行的备份语句会将MysqL数据文件(即由my.cnf里的变量datadir指定)拷贝至备份目录下(/backup/MysqL/data)
注意:如果不指定–defaults-file,默认值为/etc/my.cnf. 备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/backup/MysqL/data/2017-04-04_12-46-24),在该目录下存放备份文件.
- [root@master data]# ll /backup/MysqL/data/
- 总用量 4
- drwxr-xr-x 6 root root 4096 4月 4 16:56 2017-04-04_16-56-35
- [root@master data]# ll 2017-04-04_16-56-35/
- 总用量 18468
- -rw-r–r– 1 root root 188 4月 4 16:56 backup-my.cnf
- -rw-r—– 1 root root 18874368 4月 4 16:56 ibdata1
- drwxr-xr-x 2 root root 4096 4月 4 16:56 MysqL
- drwxr-xr-x 2 root root 4096 4月 4 16:56 performance_schema
- drwxr-xr-x 2 root root 4096 4月 4 16:56 test
- -rw-r–r– 1 root root 13 4月 4 16:56 xtrabackup_binary
- -rw-r–r– 1 root root 23 4月 4 16:56 xtrabackup_binlog_info
- -rw-r—– 1 root root 89 4月 4 16:56 xtrabackup_checkpoints
- -rw-r—– 1 root root 2560 4月 4 16:56 xtrabackup_logfile
- drwxr-xr-x 2 root root 4096 4月 4 16:56 xtra_test
还可以在远程进行全量备份,命令如下:
innobackupex –defaults-file=/etc/my.cnf –user=root –host=127.0.0.1 –parallel=2 –throttle=200 /backup/MysqL/data 2>/backup/MysqL/data/bak.log 1>/backup/MysqL/data/`data +%Y-%m-%d_%H-%M%s`
参数解释:
–host=127.0.0.1 主机ip,本地可以不加(适用于远程备份).注意要提前在MysqL中授予连接的权限,最好备份前先测试用命令中的用户名、密码和host能否正常连接MysqL.
–parallel=2 –throttle=200 并行个数,根据主机配置选择合适的,默认是1个,多个可以加快备份速度.
/backup/MysqL/data 备份存放的目录
[root@master src]# ll /backup/MysqL/data/
总用量 8
drwxr-xr-x 6 root root 4096 4月 4 12:46 2017-04-04_12-46-24
-rw-r–r– 1 root root 106 4月 4 12:57 bak.log //备份信息都记录在这个日志里,如果备份失败,可以到这里日志里查询
2)全量备份后的恢复操作
#进入数据库
[root@master data]# MysqL#查看当前所有数据库
MysqL> show databases;
+——————–+
| Database |
+——————–+
| @R_197_4045@ion_schema |
| MysqL |
| performance_schema |
| test |
| xtra_test |
+——————–+
5 rows in set (0.09 sec)#切换到 xtra_test数据库下
MysqL> use xtra_test;
Database changed#查看当前数据库里的表
MysqL> show tables;
+———————+
| Tables_in_xtra_test |
+———————+
| I |
| M |
+———————+
2 rows in set (0.04 sec)#删除整个 xtra_test库
MysqL> drop database xtra_test;
Query OK,2 rows affected (0.34 sec)#现在已经看不到 xtra_test库了
MysqL> show databases;
+——————–+
| Database |
+——————–+
| @R_197_4045@ion_schema |
| MysqL |
| performance_schema |
| test |
+——————–+
4 rows in set (0.00 sec)
注意:恢复之前
2)要删除数据文件和日志文件(也可以mv移到别的地方,只要确保清空MysqL数据存放目录就行)
[root@master data]# ps -ef|grep MysqLd
root 10929 1 0 10:32 pts/0 00:00:00 /bin/sh /application/MysqL/bin/MysqLd_safe –datadir=/application/MysqL/data –pid-file=/application/MysqL/data/master.pid
MysqL 11227 10929 0 10:32 pts/0 00:00:14 /application/MysqL/bin/MysqLd –basedir=/application/MysqL –datadir=/application/MysqL/data –plugin-dir=/application/MysqL/lib/plugin –user=MysqL –log-error=/application/MysqL/data/master.err –pid-file=/application/MysqL/data/master.pid –port=3306
root 21514 1896 0 13:55 pts/0 00:00:00 grep MysqLd
由上面可以看出MysqL的数据和日志存放目录是/application/MysqL/data
#关闭MysqL数据库服务
[root@master data]# service MysqLd stop
Shutting down MysqL…. SUCCESS!#移动数据文件和日志文件到/tmp(当然删除也可以)
[root@master data]# mv /application/MysqL/data/* /tmp/[root@master data]# innobackupex –defaults-file=/etc/my.cnf –user=root –use-memory=1G –apply-log /backup/MysqL/data/2017-04-04_13-04-05/
[root@master data]# innobackupex –defaults-file=/etc/my.cnf –user=root –copy-back /backup/MysqL/data/2017-04-04_13-04-05/
[root@master ~]# chown -R MysqL.MysqL /application/MysqL/data/
可能报错:
sh: xtrabackup: command not found
innobackupex: Error: no ‘MysqLd’ group in MysqL options at /home/MysqL/admin/bin/percona-xtrabackup-2.1.9/innobackupex line 4350.
解决:将xtrabackup_55复制成xtrabackup即可
[root@master src]# ls /home/MysqL/admin/bin/percona-xtrabackup-2.1.9/
innobackupex xbstream xtrabackup_55 xtrabackup_innodb55[root@master src]# cd /home/MysqL/admin/bin/percona-xtrabackup-2.1.9/
[root@master percona-xtrabackup-2.1.9]# cp xtrabackup_55 xtrabackup
[root@master percona-xtrabackup-2.1.9]# ls
innobackupex xbstream xtrabackup xtrabackup_55 xtrabackup_innodb55
检验:执行之后就OK了
[root@master percona-xtrabackup-2.1.9]# innobackupex –defaults-file=/etc/my.cnf –user=root –copy-back /backup/MysqL/data/2017-04-04_13-04-05/
innobackupex: copying ‘/backup/MysqL/data/2017-04-04_13-04-05/ib_logfile1’ to ‘/application/MysqL/data/ib_logfile1’
innobackupex: copying ‘/backup/MysqL/data/2017-04-04_13-04-05/ib_logfile0’ to ‘/application/MysqL/data/ib_logfile0’
innobackupex: Finished copying back files.170404 14:24:07 innobackupex: completed OK!
出现上面的信息,说明数据恢复成功了!!
从上面的恢复操作可以看出,执行恢复分为两个步骤:
1)第一步恢复步骤是应用日志(apply-log),为了加快速度,一般建议设置–use-memory(如果系统内存充足,可以使用加大内存进行备份 ),这个步骤完成之后,目录/backup/MysqL/data/2017-04-04_13-04-05/下的备份文件已经准备就绪.
2)第二步恢复步骤是拷贝文件(copy-back),即把备份文件拷贝至原数据目录下.
最后,启动MysqL,查看数据是否恢复回来了
#启动数据库
[root@master ~]# /etc/init.d/MysqLd start
Starting MysqL.. SUCCESS!#进入MysqL
[root@master ~]# MysqL#显示所有数据库(可以看到我们之前删除的xtra_test 库已经恢复了)
MysqL> show databases;
+——————–+
| Database |
+——————–+
| @R_197_4045@ion_schema |
| MysqL |
| performance_schema |
| test |
| xtra_test |
+——————–+
5 rows in set (0.00 sec)#进入xtra_test 库
MysqL> use xtra_test;
Database changed#查看xtra_test 库内表内容(已经全部恢复)
MysqL> show tables;
+———————+
| Tables_in_xtra_test |
+———————+
| I |
| M |
+———————+
2 rows in set (0.00 sec)
后记
第一篇 MysqL 系列连载之 XtraBackup 备份原理(1)
第二篇 MysqL 系列连载之 XtraBackup全量热备 or 恢复实践(2)
第三篇 MysqL 系列连载之 XtraBackup 增量热备 or 恢复实践(3)
感谢您阅读.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。