MySQL 系列连载之 XtraBackup 全量热备 or 恢复实践2

《MySQL 系列连载之 XtraBackup 全量热备 or 恢复实践(2)》要点:
本文介绍了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

#检查数据库引擎

mysql> show engines;

#主从数据库同步注意点 [mysqld]

#主从之间的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.gz

cd 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`

参数解释:

–user=root 备份操作用户名,一般都是root用户

–host=127.0.0.1 主机ip,本地可以不加(适用于远程备份).注意要提前在mysql中授予连接的权限,最好备份前先测试用命令中的用户名、密码和host能否正常连接mysql.

–parallel=2 –throttle=200 并行个数,根据主机配置选择合适的,默认是1个,多个可以加快备份速度.

/backup/mysql/data 备份存放的目录

2>/backup/mysql/data/bak.log 备份日志,将备份过程中的输出信息重定向到bak.log

这种备份跟上面相比,备份成功后,不会自动在备份目录下创建一个时间戳目录,需要如上命令中自己定义.

[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 |
+——————–+
| information_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 |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| test |
+——————–+
4 rows in set (0.00 sec)

注意:恢复之前

1)要先关闭数据库

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 |
+——————–+
| information_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)

感谢您阅读.

相关文章

随着云计算和网络技术的发展,越来越多的数据需要在服务器之...
阿里云服务器Tomcat无法从外部访问一、环境阿里云Ubuntu 12....
购买一系列的东西其实就是花钱买块区域,服务器,域名,云解...
前言昨天买了域名,服务器,然后搭建了环境,然后想他通过默...
前言由于服务器centos6.8安装mysql一直出现不能连接问题,然后...
前言用 SSH客户端登录上以后,自己想要在本地连接服务器上的...