文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Xtarbakcup实现对MySQL的“热”备份

2024-04-02 19:55

关注

xtarbackup 备份

简介

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

一、查看系统环境*

[root@db01 ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)

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/

Xtarbakcup实现对MySQL的“热”备份

各文件说明:

(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 RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ‘bkpuser’@’localhost’;       
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;
+----+--------+
| id | name   |
+----+--------+
|  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;"
+----+---------------+
| id | name          |
+----+---------------+
|  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;
+----+--------+
| id | name   |
+----+--------+
|  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 </server/backup/new_bin.sql 
[root@db02 tools]# mysql -e "select * from oldboy.test;"
+----+-------------------+
| id | name              |
+----+-------------------+
|  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/

Xtarbakcup实现对MySQL的“热”备份
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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯