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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 三高"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的细节探索这里就不做过多演示了,更建议参考官方资料熟悉工具的使用。


写在最后


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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
1月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
134 10
|
3月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
253 36
|
6月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
3月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
174 5
|
3月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
103 0
|
5月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
270 28
|
5月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
129 15
|
10月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
616 3
|
10月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
306 3
|
11月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
264 3

推荐镜像

更多