浅析MySQL 备份与恢复

1、简介

数据无价,MySQL作为一个数据库系统,其备份自然也是非常重要且有必要去做。备份的理由千千万,预防故障,安全需求,回滚,审计,删了又改的需求等等,备份的重要性不言而喻。除了备份本身, 如何使用备份来恢复 服务也是一项重点内容,不能用来恢复的备份没有意义。本文主要会针对备份和恢复这两方面做一些简单的介绍。

本文为《高性能MySQL》备份相关章节的读书笔记。

2、备份和恢复的简单定义

正如简介所说,备份人尽皆知,也很容易引起人的重视。根据需求写定期脚本,或者使用其他方式都是比较常见的。但是恢复就没有那么引人注目了。比如说,也许会每周/每天定期进行自动备份。但是多久会进行一次备份的恢复测试?备份的内容是否完成?是否可用于恢复?如果出现故障,恢复的流程是否易操作?

备份只是数据源, 如何使用数据源 , 彻底恢复系统 这个过程。也非常重要。备份与恢复,都是MySQL运维中需要掌握的内容。

备份的意义在于恢复。如果不能恢复,那就不叫备份(比如RAID阵列不是备份,如果DROP DATABASE,RAID阵列不能恢复)

[还原] 和 [恢复] 的区别:

  • 还原:仅指将备份文件中的内容提取出来并加载。
  • 恢复:包括还原备份文件在内的一系列措施,目的是让服务恢复正常运行,比如重启MySQL,修改配置等其他操作 。

也就是说,恢复是要恢复到异常出前,采取的所有操作(比如修改参数,重启服务等)。不仅仅只是还原备份。

3、恢复计划需要考虑的几个因素

恢复计划在设计的时候,需要考虑一些因素,从而根据不同的需求进行更好的规划。可以根据RPO(恢复点目标)和RTO(恢复时间目标)这两个需求来协助制定合适的恢复策略。

  • RPO(恢复点目标):可以容忍丢失多少数据?(需要恢复所有数据,还是能容忍上一次备份以来的数据丢失?)
  • RTO(恢复时间目标):需要等待多久将数据恢复?(用户能接受到什么程度)

也许还需考虑:需要恢复什么?(整个服务器,单个库,单个表,还是事务)

其次,恢复计划需要定期进行测试,抽出数据测试备份确实有效、实际进行一次完整的备份恢复,熟悉整个恢复流程,确保真正发生问题时,可以有条不紊的完成恢复。

4、备份

4.1、备份内容包括什么?

最简单的策略就是 只备份数据和表定义 。但是恢复数据库需要更多内容,如果能备份的越充足,那么恢复起来也就更容易。(主要还是 根据需求 )

比如可以根据实际情况,考虑备份如下内容:

1、Binlog和InnoDB事务日志。

2、主/从库配置文件。

3、数据库操作系统配置(cron、脚本、内核参数)

或者说,根据需要进行备份内容的扩展。如果对于数据库恢复、甚至重建有很高需求(比如要求更快恢复),那么备份更多的内容也必不可少。如果需要有从0恢复数据库的能力,那需要做更多工作。

4.2、物理备份与逻辑备份

备份种类 逻辑备份 物理备份
简介 利用mysqldump等命令实现备份 直接复制数据库文件
优点 可以文本编辑,恢复简单,使用mysqldump备份灵活。 足够直观,备份和恢复过程,本质上就是文件的移动。恢复速度更快。MySQL服务器几乎不需要执行操作。
缺点 备份和恢复都需要MySQL服务参与、且占用CPU资源。有可能很慢 InnoDB的原始文件通常比逻辑备份大得多。

物理备份和逻辑备份的一点抉择:

  • 对于大数据库,必须有物理备份。逻辑备份太慢,也可考虑基于快照的备份做辅助。
  • 对于小数据库,逻辑备份几乎就可以了。

物理备份简单高效,逻辑备份尽量也要做。【两者都要有,看具体需求和资源分配】

其次:除非经过测试,否则不能假设备份可用。比如使用 mysqlcheck -A 测试数据库。

4.3、Binlog备份

Binlog也是备份中的重要一环,因为基于时间点的恢复需要用到它。而且Binlog一般很小,频繁的备份也较容易实现。如果有某个时间点的数据备份,加上自那以后的所有Binlog,就可以回滚所有变动。

4.3.1、备份Binlog的一些策略

FLUSH LOGS
--log_slave_updata

需要注意的是,expire_log_days是通过 日志文件的修改时间 来判断的,而不是内容。(如果一直只有一个Binlog文件,可能就不会清理)。所以一定要使用 FLUSH LOGS 定期刷新Binlog。

4.3.2、老Binlog的清理

最好使用expire_log_days来进行自动的清理,保留一定天数。如果需要用cron清理。那么 不要使用 find+rm配置的cron清理日志。

0 3 * * * /usr/bin/mysql /var/log/mysql -mtime +N -name "mysql-bin.[0-9]"* | xargs rm

使用如下cron代替:

0 3 * * * /usr/bin/mysql -e "PURGE MASTER LOGS BEFORE CURRENT_DATE - INTERVAL N DAY"

4.3.3、Binlog备份的几点注意事项

  • 增长保存时间只是一种配置,不代表Binlog本身就不需要备份。Binlog仍然需要定期备份,以便可以结合最近的备份使用。
  • 需要注意的是,从库也使用Binlog。所以需要 区分从库和备份的Binlog管理 。

4.4、增量备份与差异备份

增量备份:自任意类型备份后,改动的所有内容的备份。

差异备份:特指自上次 全备份 之后,改动的所有内容的备份。

也就是说,差异备份基于全备份。而增量备份基于任意备份(比如某一个指定的差异备份。

差异备份可选项:

  • 不要备份没有改变的表。
  • 不要备份没有改变的行

虽然这样做差异备份可以提高恢复速度。但是全备份还是很有必要的。( 全备份可以频率低,但是必须有 )。

4.5、从库备份

在从库中备份,有时候是一个 可选项 ,不会干扰到主库,避免给主库增加更多的负载。其次,当计划从从库备份的时候,要保存更多信息,比如从库相对于主库的位置(偏移)等。

首先 从库不等于备份 ,从库和主库数据不匹配是很常见的。其次、从从库备份确实可以减轻主库备份时的负载,但是不够好。稳定起见,还是建议进行主库备份、全备份。

4.6、其他注意事项

4.6.1、在线备份与离线备份

离线备份是最简单最安全的。也是一致性最好的。问题就是,大部分数据库不能接受停机备份。所以基本还是用在线备份,或者说不停机备份

可以考虑在业务低峰期进行在线备份,即使负载增大也不会有太大影响。

4.6.2、数据一致性

数据一致性:对于多个表之间数据的一致性要求。(比如两个逻辑相关的操作分在了两个事务内,而备份在两个事务之间执行,就会导致数据不一致)

InnoDB可以在转储一组相关表的时候,开始一个事务,这样可以很大程度上保证数据的一致性。

但是也要注意,如果事务设置的不合理,比如一组相关表的修改分在了两个事务内,这仍然会导致数据不一致。( 一组表的相关操作需要确保在一个事务内 )

4.6.3、定期进行备份恢复测试,确认整个恢复过程需要的资源

能恢复的备份才有价值,不是有备份就可以

小结

本文讲解了一些备份的基本知识和概念,包括一些基本概念、恢复的重要性、备份和恢复的简单策略。还提及到了备份内容的选择、差异/增量备份、Binlog备份等。后续还需要继续学习,了解备份和恢复的具体操作方法和实践。

以上就是浅析MySQL 备份与恢复的详细内容,更多关于MySQL 备份与恢复的资料请关注我们其它相关文章!

(0)

相关推荐

  • Mysql实现企业级日志管理、备份与恢复的实战教程

    背景 随着业务的发展,公司业务和规模不断扩大,网站积累了大量的用户信息和数据,对于一家互联网公司来说,用户和业务数据是根基.一旦公司的数据错乱或者丢失,对于互联网公司而言就等于说是灭顶之灾,为防止系统出现操作失误或系统故障导致数据丢失,公司要求加强用户数据的可靠性,要求全面加强数据层面备份,并能在故障发生时第一时间恢复. 数据备份形式 文件备份: 通过Linux的备份命令把文件统一打个包存起来,可存在本地和远程服务器,等到要恢复时,再用这些文件恢复到指定位置. 数据库数据备份: 在一些对数据可靠

  • 从MySQL全库备份中恢复某个库和某张表的方法

    在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-data=2 >dump.sql 只还原erp库的内容 [root@HE1 ~]# mysql -uroot -pMANAGER erp --one-database <dump.sql 可以看出这里主要用到的参数是--one-database简写-o的参数,极大方便了我们的恢复灵活性. 那么如何从

  • Mysql触发器在PHP项目中用来做信息备份、恢复和清空

    案例: 通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路: 要有一张员工表,还要有一张员工备份表:备份,使用触发器,在点击删除按钮执行删除功能之前将员工表中的信息导入到备份表中,这样就达到了备份的效果:恢复,对备份表使用触发器,将备份表中的数据删除,删除的同时将此数据导入到员工表中:清空,使用truncate方法,将备份表中的数据彻底清空,并且释放内存,而且这个方法进行数据删除不

  • Navicat for MySQL定时备份数据库及数据恢复详解

    在做数据库修改或删除操作中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库.本篇文章主要讲述Navicat for MySQL定时备份数据库和数据恢复等功能,同时可以定时播放电影等设置,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵~ 一. 设置计划任务定时备份数据库 计划任务就是让电脑在指定的时间内执行指定的动作,这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的!其实再通俗一点也就是相当于你在那个时间里面进行了对某个东西对鼠标双击的操作. 1.

  • MySQL数据库备份恢复实现代码

    数据库的备份 #语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql #示例: #单库备份 mysqldump -uroot -p123 db1 > db1.sql mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql #多库备份 mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mys

  • 详解mysql的备份与恢复

    前言: 前面几篇文章为大家介绍了 MySQL 各种语句语法的用法及用户权限相关知识.本篇文章将主要讲解 MySQL 数据库数据备份与恢复相关知识,主要聚焦于逻辑备份,介绍mysqldump工具的使用以及恢复方法. 这里简单讲下物理备份和逻辑备份的概念: 物理备份:备份数据文件,转储数据库物理文件到某一目录.物理备份恢复速度比较快,但占用空间比较大,MySQL中可以用 xtrabackup 工具来进行物理备份. 逻辑备份:对数据库对象利用工具进行导出工作,汇总入备份文件内.逻辑备份恢复速度慢,但占

  • mysql全量备份和快速恢复的方法整理

    一个简单的mysql全量备份脚本,备份最近15天的数据. 备份 #每天备份mysql数据库(保存最近15天的数据脚本) DATE=$(date +%Y%m%d) /home/cuixiaohuan/lamp/mysql5/bin/mysqldump -uuser -ppassword need_db > /home/cuixiaohuan/bak_sql/mysql_dbxx_$DATE.sql; find /home/cuixiaohuan/bak_sql/ -mtime +15 -name

  • C#实现MySQL命令行备份和恢复

    MySQL数据库的备份有很多工具可以使用,这两天写了一个使用C#调用MYSQL的mysqldump命令完成MySQL数据库的备份与恢复的小工具 先来说一下mysqldump命令备份MySQL数据库的使用方法 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 直接将MySQL数据库压缩备份 mysqldump -hhostname -uusername -ppassword databasename |

  • 浅谈mysqldump使用方法(MySQL数据库的备份与恢复)

    #mysqldump --help 1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql    (2)导出数据库结构(不含数据) mysqldump -u username -p -d dbname > dbname.sql    (3)导出数据库中的某张数据表(包含数据) mysqldump -u username -p dbname tablename > tabl

  • 浅析MySQL 备份与恢复

    1.简介 数据无价,MySQL作为一个数据库系统,其备份自然也是非常重要且有必要去做.备份的理由千千万,预防故障,安全需求,回滚,审计,删了又改的需求等等,备份的重要性不言而喻.除了备份本身, 如何使用备份来恢复 服务也是一项重点内容,不能用来恢复的备份没有意义.本文主要会针对备份和恢复这两方面做一些简单的介绍. 本文为<高性能MySQL>备份相关章节的读书笔记. 2.备份和恢复的简单定义 正如简介所说,备份人尽皆知,也很容易引起人的重视.根据需求写定期脚本,或者使用其他方式都是比较常见的.但

  • MySQL备份与恢复之保证数据一致性(5)

    在上一篇文章中我们提到热拷贝(MySQL备份与恢复之热拷贝),热拷贝也就是在MySQL或者其他数据库服务在运行的情况下使用mysqlhotcopy命令进行备份.这篇文章我们讲解怎样保证数据一致性.现在假设有这样一种情况,我们总是在凌晨对数据库进行备份,假设在凌晨之后发生数据库异常,并且导致数据丢失.这样凌晨之前的数据我们已经做了备份,但是凌晨到发生异常这段时间的数据就会丢失(没有binlog的情况下).好在InnoDB存储引擎支持事务,也支持Binlog,凌晨到发生异常这段时间的数据就可以通过日

  • MySQL备份与恢复之真实环境使用冷备(2)

    在上一篇文章(MySQL备份与恢复之冷备)中,我们提到了冷备.但是有个问题,我们存储的数据文件是保存在当前本地磁盘的,如果这个磁盘挂掉,那我们存储的数据不就丢失了,这样备份数据不就功亏一篑,劳而无功.所以真实环境中我们多准备几块磁盘,然后再在这些磁盘上搭建LVM,把MySQL的数据目录挂载到LVM上,这样数据就不是存储在当前磁盘上,就可以保证数据的安全性. 示意图 真实环境使用冷备模拟 第一步,需要提前规划好磁盘,这里做模拟,添加两磁盘   第二步,对磁盘进行分区 [root@serv01 ~]

  • MySQL备份与恢复之热备(3)

    在上两篇文章(MySQL备份与恢复之冷备,MySQL备份与恢复之真实环境使用冷备)中,我们提到了冷备和真实环境中使用冷备.那从这篇文章开始我们看下热备.显然热备和冷备是两个相对的概念,冷备是把数据库服务,比如MySQL,Oracle停下来,然后使用拷贝.打包或者压缩命令对数据目录进行备份:那么我们很容易想到热备就是在MySQL或者其他数据库服务在运行的情况下进行备份.但是,这里存在一个问题,因为生产库在运行的情况下,有对该库的读写,读写频率有可能高,也可能低,不管频率高低,总会就会造成备份出来的

  • 浅析mysql交互式连接&非交互式连接

    交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接.那么这时候就是非交互式操作. 在之前,我基本上不关系这两个属性,都是用的是mysql服务商推荐的默认值,就是8小时. 但是,从昨天开始,由于在新网租用了一个空间,而他的

  • 深入浅析MySQL从删库到跑路_高级(一)——数据完整性

    一.数据完整性简介 1.数据完整性简介 数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况. 数据完整性是指数据的可靠性和准确性,数据完整性类型有四种: A.实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性). B.域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则). C.引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系.引用完

  • 浅析mysql 定时备份任务

    简介 在生产环境上,为了避免数据的丢失,通常情况下都会定时的对数据库进行备份.而Linux的crontab指令则可以帮助我们实现对数据库定时进行备份.首先我们来简单了解crontab指令,如果你会了请跳到下一个内容mysql备份. 本文章的mysql数据库是安装在docker容器当中,以此为例进行讲解.没有安装到docker容器当中也可以参照参照. contab定时任务 使用crontab -e来编写我们的定时任务. 0 5 * * 1 [command] 前面的5个数字分别代表分.时.日.月.

  • 浅析MySQL 锁和事务

    MySQL本身也是在文件系统的基础上发展而来,因为锁的存在使之有所不同. MySQL作为一种数据库软件,难免会存在对其共享资源的并发访问,为了协调和管理不同资源的并发访问,也就产生了锁机制,因为锁机制的存在为数据库提供了数据的完整性和一致性. 从锁的级别来分锁可分为:行级锁.表级锁.页级锁. 从锁的类型来分锁可分为:共享锁.排它锁(独占锁). 为了协调行锁.表锁产生了:意向锁(表级锁). 共享锁,允许事务去读取数据. 排它锁,允许事务去修改或删除数据. 意向锁,获取行级锁的时候,自动添加的表级锁

  • 浅析MySQL并行复制

    01 并行复制的概念 在MySQL的主从复制架构中,主库上经常会并发的执行很多SQL,只要这些SQL没有产生锁等待,那么同一时间并发好几个SQL线程是没有问题的. 我们知道,MySQL的从库是要通过IO_thread去拉取主库上的binlog的,然后存入本地,落盘成relay-log,通过sql_thread来应用这些relay-log. 在MySQL5.6之前的版本中,当主库上有多个线程并发执行SQL时,sql_thread只有一个,在某些TPS比较高的场景下,会出现主库严重延迟的问题.MyS

  • 浅析MySQL的WriteSet并行复制

    [历史背景] 岁月更迭中我已经从事MySQL-DBA这个工作三个年头,见证MySQL从"基本可用","边缘系统可以用MySQL","哦操!你怎么不用MySQL"; 正所谓!"一个数据库的境遇既取决于历史的进程,取决于它的自我奋斗!",关于"历史的进程"在此不表,关于"自我奋斗"这里也只想谈一下并行复制的几个关键时间结点 总的来说MySQL关于并行复制到目前为止经历过三个比较关键的时间结点

随机推荐