设为首页 收藏本站
查看: 393|回复: 0

[经验分享] Mysql热备xtrabackup的使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-15 08:28:12 | 显示全部楼层 |阅读模式
一、软件介绍

    InnoDB 有个商业的InnoDB Hotbackup,可以对InnoDB引擎的表实现在线热备。而 percona出品的Xtrabackup,是InnoDB Hotbackup的一个开源替代品,可以在线对InnoDB/XtraDB引擎的表进行物理备份。mysqldump支持在线备份,不过是逻辑备份,效率比较差。当数据量比较小的时候,mysqldump还可以胜任,当数据量大的时候,恢复时间却让人无法忍受,于是开源工具xtrabackup就应运而生了,xtrabackup属于物理备份,效率很不错。
xtrabackup提供了两种命令行工具

  • xtrabackup:用于备份InnoDB引擎的数据(不会备份myisam比如mysql权限相关表等,也不会自动copy frm文件);
  • innobackupex:一个perl脚本,在执行过程中会调用xtrabackup命令,用该命令即可以备份InnoDB,也可以备份MyISAM/copy frm文件,只不过在备份myisam表时候会添加一个读锁。


二、安装

实验环境:CentOS release 6.5 (Final),mysql  Ver 14.14 Distrib 5.6.14
xtrabackup安装:
1
2
3
wget https://www.percona.com/download ... 13-1.el6.x86_64.rpm
yum  -y install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.* package  bzr bison ncurses-devel zlib-devel
rpm -ivh percona-xtrabackup-22-2.2.13-1.el6.x86_64.rpm



部分参数说明:
1
2
3
4
5
6
7
8
9
  --user                   #指定执行备份的用户。
  --password               #指定执行备份用户的密码。
  --defaults-file          #指定mysql的选项文件路径。
  --no-timestamp           #不要显示时间戳。
  --incremental            #告诉xtrabackup这次是创建增量备份。  
  --incremental-basedir    #指定一个全量备份的路径作为增量备份的基础。
  --redo-only       #如果进行准备工作完成后,还有其他的增量备份集待处理,就需要指定这个参数。
  --apply-log       #从指定的选项文件中读取配置信息并应用日志等,这就意味对备份集做恢复的准备工作。
  --copy-back       #将指定备份集恢复到指定的路径下。



1、全备
   将全备的数据备份到/data/backup/base

1
2
3
4
5
6
7
# innobackupex --user=root --password=redhat --defaults-file=/usr/local/webserver/mysql5.6/my.cnf --no-timestamp  /data/backup/base

   ......................
innobackupex: Backup created in directory '/data/backup/base'
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 733
160201 15:26:07  innobackupex: Connection to database server closed
160201 15:26:07  innobackupex: completed OK!



    先对数据库进行一些修改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> create database sharelinux;
Query OK, 1 row affected (0.00 sec)
  
mysql> use sharelinux;
Database changed
mysql> create table t1(id int,name varchar(10));
Query OK, 0 rows affected (0.12 sec)
  
mysql> insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu');
Query OK, 3 rows affected (0.08 sec)
Records: 3  Duplicates: 0  Warnings: 0
  
mysql> select * from t1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
+------+----------+
3 rows in set (0.00 sec)



2、第一次增量备份
    第一次增量备份目录/data/backup/incremental_one

1
2
3
4
5
6
7
8
9
10
# innobackupex --user=root --password=redhat --defaults-file=/usr/local/webserver/mysql5.6/my.cnf --no-timestamp --incremental /data/backup/incremental_one --incremental-basedir=/data/backup/base/

    ......................................................
xtrabackup: Creating suspend file '/data/backup/incremental_one/xtrabackup_log_copied' with pid '19979'
xtrabackup: Transaction log of lsn (22333659) to (22333659) was copied.
160201 15:39:26  innobackupex: All tables unlocked
innobackupex: Backup created in directory '/data/backup/incremental_one'
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 1238
160201 15:39:26  innobackupex: Connection to database server closed
160201 15:39:26  innobackupex: completed OK!



    再对数据库进行修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> create database db01;
Query OK, 1 row affected (0.00 sec)
  
mysql> use db01;
Database changed
mysql> create table t2(id int,name varchar(10));
Query OK, 0 rows affected (0.04 sec)
  
mysql> insert into t2 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
  
mysql> select * from t2;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
+------+----------+
3 rows in set (0.00 sec)



3、第二次增量备份
    第二次增量备份目录/data/backup/incremental_two

1
2
3
4
5
6
7
# innobackupex --user=root --password=redhat --defaults-file=/usr/local/webserver/mysql5.6/my.cnf --no-timestamp --incremental /data/backup/incremental_two --incremental-basedir=/data/backup/incremental_one/

   ........................................
innobackupex: Backup created in directory '/data/backup/incremental_two'
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 1689
160201 15:59:10  innobackupex: Connection to database server closed
160201 15:59:10  innobackupex: completed OK!



    模拟故障,删除数据库的数据文件
1
2
3
4
5
# ls /usr/local/webserver/mysql5.6/data/
auto.cnf  ib_logfile0  mysql-bin.000001  node1.pid           test
db01      ib_logfile1  mysql-bin.index   performance_schema  zabbix
ibdata1   mysql        node1.err         sharelinux
# rm -rf /usr/local/webserver/mysql5.6/data/*



    恢复准备
1
2
3
4
5
6
7
# innobackupex --user=root --password=redhat --defaults-file=/usr/local/webserver/mysql5.6/my.cnf --apply-log --redo-only /data/backup/base/

   ........................................
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 22327338
160201 16:09:44  innobackupex: completed OK!



1
2
3
4
5
6
# innobackupex --user=root --password=redhat --defaults-file=/usr/local/webserver/mysql5.6/my.cnf --apply-log --redo-only /data/backup/base/ --incremental-dir=/data/backup/incremental_one/

  ...........................................
innobackupex: Copying '/data/backup/incremental_one/performance_schema/events_stages_history.frm' to '/data/backup/base/performance_schema/events_stages_history.frm'
innobackupex: Copying '/data/backup/incremental_one/performance_schema/setup_instruments.frm' to '/data/backup/base/performance_schema/setup_instruments.frm'
160201 16:13:15  innobackupex: completed OK!



1
2
3
4
5
# innobackupex --user=root --password=redhat --defaults-file=/usr/local/webserver/mysql5.6/my.cnf --apply-log  /data/backup/base/ --incremental-dir=/data/backup/incremental_two/
innobackupex: Copying '/data/backup/incremental_two/performance_schema/setup_instruments.frm' to '/data/backup/base/performance_schema/setup_instruments.frm'
innobackupex: Copying '/data/backup/incremental_two/db01/db.opt' to '/data/backup/base/db01/db.opt'
innobackupex: Copying '/data/backup/incremental_two/db01/t2.frm' to '/data/backup/base/db01/t2.frm'
160201 16:18:27  innobackupex: completed OK!



    数据恢复
1
innobackupex --user=root --password=redhat --defaults-file=/usr/local/webserver/mysql5.6/my.cnf --copy-back  /data/backup/base/



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
innobackupex: Starting to copy InnoDB system tablespace
innobackupex: in '/data/backup/base'
innobackupex: back to original InnoDB data directory '/usr/local/webserver/mysql5.6/data'
innobackupex: Copying '/data/backup/base/ibdata1' to '/usr/local/webserver/mysql5.6/data/ibdata1'
  
innobackupex: Starting to copy InnoDB undo tablespaces
innobackupex: in '/data/backup/base'
innobackupex: back to '/usr/local/webserver/mysql5.6/data'
  
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/data/backup/base'
innobackupex: back to original InnoDB log directory '/usr/local/webserver/mysql5.6/data'
innobackupex: Finished copying back files.
  
160201 16:23:08  innobackupex: completed OK!



    查看目录
1
2
3
4
5
6
7
8
9
10
11
12
13
# ll /usr/local/webserver/mysql5.6/data/  #这个目录下的数据已经恢复回来
total 79916
drwxr-x---. 2 root root     4096 Feb  1 16:18 db01
-rw-r-----. 1 root root 79691776 Feb  1 16:18 ibdata1
drwx------. 2 root root     4096 Feb  1 15:26 mysql
drwxr-xr-x. 2 root root     4096 Feb  1 15:26 performance_schema
drwxr-x---. 2 root root     4096 Feb  1 16:13 sharelinux
drwxr-xr-x. 2 root root     4096 Feb  1 15:26 test
-rw-r--r--. 1 root root       22 Feb  1 16:18 xtrabackup_binlog_info
-rw-r-----. 1 root root       91 Feb  1 16:18 xtrabackup_checkpoints
-rw-r--r--. 1 root root      722 Feb  1 16:18 xtrabackup_info
-rw-r-----. 1 root root  2097152 Feb  1 16:09 xtrabackup_logfile
drwx------. 2 root root    12288 Feb  1 15:26 zabbix




1
2
3
4
5
chown mysql:mysql /usr/local/webserver/mysql5.6/data/ -R  #将目录更改为mysql用户
pkill mysql                                              #杀死原来的mysql进程,然后重启数据库
service mysqld start

Starting MySQL..                                           [  OK  ]



数据已经恢复回来了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db01               |
| mysql              |
| performance_schema |
| sharelinux         |
| test               |
| zabbix             |
+--------------------+
7 rows in set (0.14 sec)
  
mysql> select * from sharelinux.t1;   #第一次增量备份的数据
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
+------+----------+
3 rows in set (0.03 sec)
  
mysql> select * from db01.t2;          #第二次增量备份的数据
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
+------+----------+
3 rows in set (0.08 sec)







运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-190908-1-1.html 上篇帖子: windows mysql 自动备份的几种方法 下篇帖子: phpMyAdmin正确的安装配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表