三高"Mysql - Mysql备份概览(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 三高"Mysql - Mysql备份概览(下)

XtraBackup物理备份



XtrqBackup虽然不是官方开发的工具,但是使用的频率却远高于mysqldump,物理备份相对比mysql的逻辑备份来说更加可靠,同时对于系统的影响也要更小。

为什么需要物理备份通常具备下面的理由:

  1. 逻辑备份针对大数据量备份速度十分缓慢。
  2. 导出速度快不需要二次转化。
  3. 对于数据库的压力较小。
  4. 增量备份更加容易。


直接拷贝裸文件可行么?


我们直接CV数据库的文件可以么?理论上是可行的但是实际操作会发现有很多问题,以Innodb的存储引擎的数据为例,它不仅涉及Binlog文件,idb文件(数据库原始数据)以及frm文件,还包括独有的redo log和 undo log这些文件等,此时会发现如果要拷贝这些文件只能冷备,但是仅仅冷备还是不行的,因为这里还牵扯操作系统和数据库版本兼容等等问题,有十分明显的跨平台的问题。

从结论来看,直接拷贝裸文件理论上是可行的,但是实际上备份出来的数据可能完全不可用,甚至可能无法兼容。


如何实现物理+全量+热备?


实现思路如下:核心的思想是监听redo log文件变化的同时,备份Idb文件和备份过程中进行了改动的redo log文件。

  1. 启动监听线程,收集redo log
  2. 备份idb文件,记录监听过程中新产生的redo log日志
  3. 备份idb完成,停止收集redo log日志
  4. 增加FTWRL锁拷贝元数据frm


FTWRL锁是啥?

FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与Binlog位点匹配)。需要注意的是这个锁的粒度非常大,基本是锁住整个库的等级,如果是备份主库会导致整个主库“卡”住,从库则会导致线程等待。

所需权限:FLUSH_TABLESRELOAD权限。

由于这里讲的主要是备份的内容,想进一步了解FTWRL锁实现细节和使用教程可以参考下面的博客:


注意在第四步给整个库加全局锁会有一段时间数据库是处于温备的情况的(不能进行读写)。

这里还存在一个问题,如何知道哪些数据是增量数据?Xtrabackup的思路是在Mysql中每一个数据页存在一个LSN号码,在备份的时候可以通过这个LSN号确定哪个页存在变化,当进行过一次全量备份之后记录变化过数据的LSN号,在下一次备份可以直接找比上一次LSN号更大的值进行备份。


LSN(log sequence number):日志序列号,是一个一直递增的整形数字,在MySQL5.6.3版本后占8个字节。它表示事务写入到日志的字节总量。LSN主要用于发生crash时对数据进行recovery!每个数据页重做日志checkpoint都有LSN。


Xtrabackup介绍


在介绍Xtrabackup之前需要了解Mysql的ibbackup,它是由Innodb官方开发,后续被改名为Mysql Enterprise Backup,由于这个软件为收费软件用户并不多,所以后续出现了完全替代品Xtrabackup并且被广泛使用。

Xtrabackup是由percona开源的免费数据库备份软件,不同于Mysqldump这是一个第三方公司开发的软件,在前面提到的Mysqldump命令是逻辑备份,逻辑备份最大的问题是在数据量特大的情况下导出会十分缓慢并且十分影响数据库的读写性能,并且导出的时候需要对于数据库进行“RR级别”的锁定或者使用表锁(MyISAM),所以对于大数据量还是建议使用物理备份的方式备份。

Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupexxtrabackup。下面是xtrabackup其他工具的大致介绍:

1)xtrabackup 是专门用来备份InnoDB表的,和mysql server没有交互;

2)innobackupex 是一个封装xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。

3)xbcrypt 加密解密备份工具

4)xbstream 流传打包传输工具,类似tar


XtraBackup特点


  • 备份速度快,几乎不影响服务器的正常业务处理
  • 压缩存储,节省磁盘容量,同时可以存储到另一个服务器
  • 还原速度很快,对于服务器的负载较小。


XtraBackup安装过程


Xtrabackup是没有windows和mac版本的,只有linux版本,所以需要做实验也只能使用linux系统,所以这里简单记录一下如何安装:

下载地址:Percona Software downloads for databases


网络异常,图片无法展示
|


注意里面包含很多软件,这里找到如上截图所示的界面,根据自己的Mysql 版本下载:

  • 8.0:对应Mysql8.0以上版本。
  • 2.4:对应Mysql5.0 - Mysql5.7版本。

下面是xtrabackup的大致安装操作流程:


wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
[root@centos ~]# ll
total 703528
-rw-r--r-- 1 root root 654007697 Sep 27 09:18 mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
-rw-r--r-- 1 root root  65689600 Nov 30 00:11 Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
[root@centos ~]# tar xf Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
[root@centos ~]# yum install percona-xtrabackup-24-2.4.9-1.el6.x86\_64.rpm -y
[root@centos ~]# which xtrabackup 
/usr/bin/xtrabackup
[root@centos ~]# innobackupex -v
innobackupex version 2.4.9 Linux (x86\_64) (revision id: a467167cdd4)
#已经安装完成


XtraBackup全量备份与恢复


Xtrabackup安装完成之后,我们可以使用下面的命令进行备份操作:


[root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" --backup /root


执行完成之后,会在对应的目录里面新增一个日期文件目录,接着我们需要同步log日志:


#使用此参数使用相关数据性文件保持一致性状态
[root@centos ~]#innobackupex --apply-log /root/(日期)/


最后我们通过下面的命令对于备份文件进行恢复:


[root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /root/(日期)/


Xtrabackup增量备份与恢复


需要注意的是增量备份仅能应用于InooDB或XtraDB表,下面的命令用于创建增量备份的数据。


[root@Vcentos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /backup/ --incremental-basedir=/root/(日期)
#--incremental /backup/   指定增量备份文件备份的目录
#--incremental-basedir    指定上一次全备或增量备份的目录


增量备份的恢复命令:


[root@centos ~]# innobackupex --apply-log --redo-only /root/(日期)/
[root@centos ~]# innobackupex --apply-log --redo-only /root/(日期)/ --incremental-dir=/backup/(日期)/


如果需要恢复全部的数据,可以使用下面的命令处理:


[root@centos ~]#innobackupex --defaults-file=/etc/my.cnf --copy-back /root/(日期)/


增量备份合并至全量备份,可以使用下面的命令:


innobackupex --apply-log bakdir/xxx-xx-xx/ --incremental-dir=basedir/YYYY-YY-YY/


小结

  • 物理备份是一种高效备份方式。
  • XtraBackup 采用备份idb + 备份期间监听改动redo log的方式实现全量热备+增量备份。
  • XtraBackup 是常用的Mysql物理备份工具。
  • 物理备份最大缺点是备份之后的文件无法直接阅读。


Mysql备份产生的创新


从Mysqldump对于备份的改进过程中我们可以从下面的方式进行思考:

  1. 直接复制磁盘:比复制数据文件更为直接,直接复制物理磁盘设备镜像备份。
  2. 多线程备份:通过多线程的方式加快备份的速度。
  3. 备份工具管理:我们可以发现传统备份都是小黑框,对于备份工具本身进行管理的软件是许需要的。

由此扩展出下面几个比较特殊的备份方式扩展:

  • Mylvmbackup:LVM备份磁盘。备份磁盘是一种物理温备的备份方式,备份磁盘本身是一种很好的思路扩展,但是备份磁盘同样有一个严重的问题,那就是兼容性的问题,所以这个备份工具使用了LVM逻辑卷进行磁盘管理。
  • Mydumper:多线程备份。这个工具的使用频率甚至比Mysqldump还要高一些。Mydumper主要有下面的特点

1. 和Mysqldump类似的工具,2. 实现了多线程兵法备份还原,3. 速度更快。

  • Zmanda Recovery Manager(ZRM):备份工具管理。提供了可视化的方式管理备份文件,类似于数据库管理工具中的navicat,这个工具的特点是集成Binlog和多种备份工具。


如何养成良好数据管理习惯


最后无论多少的备份软件其实最好的情况是备份的数据我们永远也用不上,除开备份以外我们还有其他的方式来防止数据丢失,比如遵循下面的规范:

  • 权限隔离
  • 业务只有DML权限,删除尽量使用假删除
  • 开发人员只拥有只读账号,当然很多情况下稍微大一些的公司都有明确的权限管理。
  • DBA日常只使用只读账户,特殊操作再切换账号
  • 永远不要使用root直接连客户端,禁用root连接mysql
  • SQL 审计
  • DBA环境上线之前审计SQL语句
  • 开发修改数据需要DBA执行
  • Inception 自动审核工具
  • 伪删表
  • 删表之前先改个名字,观察业务影响
  • 删除过程使用脚本给特殊标记表名称删除,而不是手动操作
  • 对于本地开发需要备份的表可以使用加入_bak进行标记。
  • 完备过程
  • 上线之前必须备份


总结


本节从Outfile这个古老的命令入手,介绍了mysqldump的命令前身以及对于outfile命令的改进优化,讲述如何通过mysqldump实现增量和全量备份,同时介绍了内部的细节。但是逻辑备份通常只适用于数据量不是很大并且系统运行接受一定延迟响应对情况下可以这么做,一旦数据量过大并且要求快速响应,如果想要热备不影响系统,更加推荐Xtrabackup备份,这个工具可以说是运维备份Mysql DB的一大杀器,十分强大并且十分好用,这里简单介绍了实现的细节,对于XtraBack的细节探索这里就不做过多演示了,更建议参考官方资料熟悉工具的使用。


写在最后


本篇同样侧重理论为主,下一篇内容围绕整个课程的核心如何搭建“三高”架构进行讲解。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
136 4
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
113 3
|
1月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
51 3
|
2月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
69 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
183 3
|
4月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
4月前
|
SQL 数据可视化 关系型数据库
MySQL 备份可视化巡检系统
MySQL 备份可视化巡检系统
|
4月前
|
存储 关系型数据库 MySQL
MySQL备份与恢复
MySQL备份与恢复
69 0
|
4月前
|
关系型数据库 MySQL Shell
分享一篇mysql数据库备份脚本
分享一篇mysql数据库备份脚本
39 0
|
4月前
|
关系型数据库 MySQL Shell
MySQL 备份:从mysqldump全备中 匹配出某几个表
MySQL 备份:从mysqldump全备中 匹配出某几个表