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

[经验分享] Xtarbakcup实现对MySQL的“热”备份

[复制链接]

尚未签到

发表于 2018-9-27 07:09:13 | 显示全部楼层 |阅读模式
xtarbackup 备份

简介
  Xtrabackup中主要包含两个工具:
  xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
  innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

一、查看系统环境*
  

[root@db01 ~]# cat /etc/redhat-release  
CentOS>  

  mysql版本
  

[root@db01 ~]# mysql -V  
mysql  Ver 14.14 Distrib 5.6.35, for linux-glibc2.5 (x86_64) using  EditLine wrapper
  

二、部署xtarbackup
  1,安装包
  

yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm  

  2,查看软件包是否存在
  

    [root@db01 ~]# yum list|grep percona  

  3,更新软件包
  

yum install percona-xtrabackup-22  

  4,添加mysql选项,开启相关功能(错误日志、binlog二进制日志,datadir指向,等等)
  

log-bin=mysql-bin  
datadir=/application/mysql/data
  
log-error=/application/mysql/data/db01.err
  

三、xtarbakcup参数及配置文件说明
  3.1 基本语法:
  

[root@db01 mysql]#  innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf /tmp/  
语法解释:
  --user=数据库用户
  --password=数据库密码
  --socket=指定socket
  --default-file=指定配置文件
  /tmp/ 最后面是存放位置
  

  显示如下内容,基本上算是备份成功了
  

innobackupex: Backup created in directory '/tmp/2017-12-13_12-06-55'  
innobackupex: MySQL binlog position: filename 'mysql-bin.000004', position 120
  
171213 12:07:07  innobackupex: Connection to database server closed
  
171213 12:07:07  innobackupex: completed OK!
  

  3.2 查看备份文件
  

[root@db01 mysql]# ll /tmp/2017-12-13_12-06-55/  

DSC0000.jpg

  各文件说明:
  

(1)xtrabackup_checkpoints ----备份类型(如完全或增量)、备份状态(如是否已经没prepare状态)和LSN(日志序列号)范围信息  每个InnoDB页(通常大小为16K)都会包含一个日志序列号,即LSN,LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表名此页面最近是如何发生改变的。
  
backup_type = full-backuped
  
from_lsn = 0
  
to_lsn = 2097320
  
last_lsn = 2097320
  
compact = 0
  
(2)xtrabackup_binlog_info ----mysql服务器当前正在使用的二进制日志及备份这一刻为二进制日志事件的位置
  
(3)xtrabackup_pos_innodb ----二进制日志及用于InnoDB或XtraDB表的二进制日志的当前posistion。
  
(4)xtrabackup_binary ----备份中用到的xtrabackup的可执行文件
  
(5)backup-my.cnf ---- 备份命令用到的配置选项信息;
  

  3.3 注意:
  在使用innobackupex命令备份时吗还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录
  innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据
  还需要注意,备份数据库的用户需要具有相对应的权限,如果要使用一个最小权限的用户进行备份可以使用以下参数:
  

mysql> GRANT>
mysql> FLUSH PRIVILEGES;
  

四、备份案例
  1、模拟数据
  

use oldboy  
insert into test values(1,'full01');
  
insert into test values(2,'full02');
  
insert into test values(3,'full03');
  
insert into test values(4,'full04');
  
insert into test values(5,'full05');
  
select * from test;
  
mysql> select * from test;
  
+----+--------+

  
|>  
+----+--------+
  
|  1 | full01 |
  
|  2 | full02 |
  
|  3 | full03 |
  
|  4 | full04 |
  
|  5 | full05 |
  
+----+--------+
  
5 rows in set (0.00 sec)
  

  2、2018/03/21 0点全量备份
  

date -s "2018/03/21"  
innobackupex --defaults-file=/etc/my.cnf --user=root --password=oldboy123 --socket=/application/mysql-5.6.34/tmp/mysql.sock --no-timestamp /server/backup/new_base_full
  

  3、2018/03/22 0点增量备份
  

mysql -e "use oldboy;insert into test values(6,'new_inc_one_1');"  
mysql -e "use oldboy;insert into test values(7,'new_inc_one_2');"
  
mysql -e "select * from oldboy.test;"
  
+----+---------------+

  
|>  
+----+---------------+
  
|  1 | full01        |
  
|  2 | full02        |
  
|  3 | full03        |
  
|  4 | full04        |
  
|  5 | full05        |
  
|  6 | new_inc_one_1 |
  
|  7 | new_inc_one_2 |
  
+----+---------------+
  

  第一次增量备份
  

date -s "2018/03/22"  
innobackupex --defaults-file=/etc/my.cnf --user=root --password=oldboy123 --socket=/application/mysql-5.6.34/tmp/mysql.sock --no-timestamp --incremental-basedir=/server/backup/new_base_full --incremental /server/backup/new_one_inc
  

  4、2018/03/23 0点增量备份
  

mysql -e "use oldboy;insert into test values(8,'new_inc_two1');"  
mysql -e "use oldboy;insert into test values(9,'new_inc_two2');"
  
mysql -e "select * from oldboy.test;"
  

  第二次增量备份
  

date -s "2018/03/23"  
innobackupex --defaults-file=/etc/my.cnf --user=root --password=oldboy123 --socket=/application/mysql-5.6.34/tmp/mysql.sock --no-timestamp --incremental-basedir=/server/backup/new_one_inc --incremental /server/backup/new_two_inc
  

  5、2018/03/23 0点以后-10点更新数据
  

mysql -e "use oldboy;insert into test values(10,'realbinlog_data_3');"  
mysql -e "use oldboy;insert into test values(11,'realbinlog_data_4');"
  
mysql -e "select * from oldboy.test;"
  

  6、2018/03/23上午10点出故障了
  

mysql -e "use oldboy;update test  set name='oldboy';"  
mysql> select * from test;
  
+----+--------+

  
|>  
+----+--------+
  
|  1 | oldboy |
  
|  2 | oldboy |
  
|  3 | oldboy |
  
|  4 | oldboy |
  
|  5 | oldboy |
  
|  6 | oldboy |
  
|  7 | oldboy |
  
|  8 | oldboy |
  
|  9 | oldboy |
  
| 10 | oldboy |
  
| 11 | oldboy |
  
+----+--------+
  
11 rows in set (0.00 sec)
  

  建议停库:
  /etc/init.d/mysqld stop
  恢复数据库:
  7、合并数据文件
  

innobackupex --apply-log --use-memory=32M --redo-only /server/backup/new_base_full/  
innobackupex --apply-log --use-memory=32M --redo-only --incremental-dir=/server/backup/new_one_inc /server/backup/new_base_full/
  
innobackupex --apply-log --use-memory=32M --incremental-dir=/server/backup/new_two_inc /server/backup/new_base_full/
  

  8、开始恢复
  

cd /application/mysql  
mv data data.11
  
cp -a /server/backup/new_base_full  data
  
chown -R mysql.mysql data
  

  9、处理binlog
  

[root@db02 mysql]# cat /server/backup/new_two_inc/xtrabackup_binlog_info  
oldboy-bin.000006   2286
  

  
mysqlbinlog -d oldboy --start-position=2286 oldboy-bin.000006 -r bin.sql
  
mysqlbinlog -d oldboy  oldboy-bin.000003 oldboy-bin.000004 oldboy-bin.000005 >>bin.sql
  

  
cd /application/mysql/logs/
  
mysqlbinlog -d oldboy --start-position=2286 oldboy-bin.000006 -r /server/backup/new_bin.sql
  

  
删除update一行。update test  set name='oldboy'
  

  10、开启防火墙iptables
  

    iptables -I INPUT ! -s $服务器IP  -p tcp -j DROP  

  11、恢复增量sql到数据库
  

[root@db02 tools]# mysql oldboy   
+----+-------------------+
  
|  1 | full01            |
  
|  2 | full02            |
  
|  3 | full03            |
  
|  4 | full04            |
  
|  5 | full05            |
  
|  6 | new_inc_one_1     |
  
|  7 | new_inc_one_2     |
  
|  8 | new_inc_two1      |
  
|  9 | new_inc_two2      |
  
| 10 | realbinlog_data_3 |
  
| 11 | realbinlog_data_4 |
  
+----+-------------------+
  

、问题总结
  停库
  610 Dec 13 16:04 xtrabackup_info
  [root@db01 data]# \rm -rf *
  1,恢复数据库
  

innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --copy-back /tmp/2017-12-13_15-23-04/  

DSC0001.jpg

  2.删除data下文件内容
  

cd /application/mysql  cd data/
  \rm -rf *
  

  3,恢复之后,要赋予data目录权限
  [root@db01 mysql]# chown -R mysql.mysql /application/mysql/data/
  /etc/init.d/mysqld start



运维网声明 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-602502-1-1.html 上篇帖子: 【MySQL】【安全】探讨MySQL备份所需最小权限 下篇帖子: 【MySQL】安装MySQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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