MySQL全面瓦解30:备份与恢复

mysql,全面,瓦解,备份,恢复 · 浏览次数 : 367

小编点评

**1. 数据库备份灾难恢复** 数据库备份是灾难恢复的关键步骤,因为当发生数据灾难时,需要对损坏的数据进行恢复和还原需求的变更或回滚。 **2. 备份需要考虑的关键点** * **PRO:**可以容忍丢失多少数据恢复时间目标(RTO):需要等待多久将数据恢复恢复的时候是需要持续提供服务还是 停机恢复。 * **RTO:**需要等待多久将数据恢复恢复的时候是需要持续提供服务还是 停机恢复。 * **数据:**基础数据。 * **日志:**包含 二进制日志 和 InnoDB事务日志 等。 **3. 备份方案** **3.1 离线备份和在线备份** * 离线备份:也就是传统意义上的cold backup(冷备份):需要关闭MySQL服务,读写请求均不允许状态下进行,这种模式下数据损坏和不一致性风险最小。 * 在线备份:也就是hot backup(热备份):在数据备份的同时,MySQL业务持续进行中,仅限于InnoDB引擎。 **3.2 逻辑备份和物理备份** **3.2.1 逻辑备份** * 导出数据库表的定义和数据写入备份文件的定义bak_filename.sql * 备份的文件名:bak_filename.sql **3.2.2 导出全部数据库–all-databases 或者 -Amysqldump -uroot -p123456 --all-databases > /user/brand/db_bak/all.sql **3.2.3 导出部分数据表-databases [dbname,[dbname...]] --tables [tbname,[tbname...]] **3.2.4 创建之前先删库或表–add-drop-database 、 –add-drop-table在create database 前先 drop database;在create table之前先 drop table默认关闭,所以一般在导入时需要保证数据库已存在。 **3.2.5 锁表–add-locks:备份数据库表时锁定数据库表,默认就是打开的状态,可以使用–skip-add-locks取消 **3.2.6 进行压缩–compact:压缩模式,去掉注释、头尾等结构信息,让输出更少 **4. 数据恢复** 可以使用mysql命令进行数据恢复,语法如下: ```mysql -u user -p pwd [dbname] < bak_filename.sql ``` **5. 总结** 备份和恢复主要使用在以下几个方面: * **灾难恢复需求的变更或者版本回滚数据和变更审计多版本测试。** * **归纳总结以上内容,生成内容时需要带简单的排版**

正文

合辑地址:MySQL全面瓦解

1 为什么需要数据库备份

  • 灾难恢复:当发生数据灾难的时候,需要对损坏的数据进行恢复和还原
  • 需求的变更或者回滚:当需求发生变更,或者需要回滚到之前的版本时,数据库备份也显得很重要。
  • 审计:需要知道某一个阶段的数据或者Schema的实际情况
  • 测试:将实际的生产环境的数据导入到本地备份为测试数据,来验证新功能,可以省去很多麻烦。

2 备份需要考虑的几个关键点

  • 恢复点目标(PRO):可以容忍丢失多少数据
  • 恢复时间目标(RTO):需要等待多久将数据恢复
  • 恢复的时候是需要持续提供服务 还是 停机恢复。
  • 需要恢复的内容:整个服务器,多库多表,单库单表,或是特定的事务或语句。

3 备份方案

3.1 离线备份和在线备份

离线备份:就是传统意义上的cold backup(冷备份):需要关闭MySQL服务,读写请求均不允许状态下进行,这种模式下数据损坏和不一致性风险最小。
半离线备份:也就是我们说的warm backup(温备份): MySQL服务不关闭,但只开放了Read操作,关闭了Write操作。
在线备份:也就是hot backup(热备份):在数据备份的同时,MySQL业务持续进行中,仅限于InnoDB引擎。

3.2 逻辑备份和物理备份

3.2.1 逻辑备份:导出数据库表的定义和数据

逻辑备份有如下优点:

  • 恢复非常简单
  • 可以通过网络来备份和恢复
  • 备份的结果为ASCII文件,可以编辑
  • 与存储引擎无关
  • 非常灵活,可以使用mysqldump的工具提供很多可选项。

逻辑备份的缺点:

  • 必须由数据库服务器来完成备份和恢复过程
  • 备份结果占据更多的空间:逻辑备份在某些场景下比数据库文件本身还要大
  • 精度问题,无法保证还原出来的数据强一致
  • 还原时间长:还原之后,加载注释语句,转换存储格式,重建索引都需要消耗一定时间

3.2.2 物理备份:直接复制原数据文件

物理备份的优点:

  • 备份和恢复操作都比较简单,且能够跨平台,操作系统和MySQL版本。
  • 恢复速度快,都是基于文件的,复制到对应的目的地即可,InnoDB需要停止数据库服务,有额外的动作。
  • 步骤更少:不需要执行重新生成数据和重建索引的动作,效率提升。

物理备份的缺点:

  • InnoDB备份的原始文件往往比逻辑备份的大很多,空间要求大。

3.3 根据要备份的数据集合的范围

  • 完全备份:full backup,备份整个数据库信息。
  • 增量备份: incremental backup 上次完全备份或增量备份以来改变了的数据,需与完全备份配合使用。一般来说增量频率高,备份频率也高。
  • 差异备份:differential backup 上次完全备份以来改变了的数据。
  • 建议的恢复策略:
    • 完全+增量+二进制日志
    • 完全+差异+二进制日志

4 备份的内容主要有哪些?

  • 数据:基础数据。
  • 日志:包含 二进制日志 和 InnoDB事务日志 等。
  • 配置信息:包括服务器配置 和 复制相关的配置(主从复制中的中继日志和日志索引文件等)。
  • 代码:存储过程、函数、触发器、视图等
  • 选定的OS文件:入UNIX服务器上的 cron任务、用户和组的配置、管理的脚本、sudo规则等。

5 数据备份和数据恢复方案介绍

5.1 输出outfile文件

使用 select into outfile 方式实现数据的备份和还原
具体的操作步骤如下:

# 选择对应的数据库
mysql> use attend;  
Database changed

# 查询需要备份的数据
mysql> select * from userinfo where id < 10000;
+----+----------+------------------+---------+
| id | usercode | username         | usersex |
+----+----------+------------------+---------+
|  1 | 374532   | 翁智华_attend    |       1 |
|  2 | 123456   | 小度             |       0 |
+----+----------+------------------+---------+
2 rows in set (0.01 sec)

# 选择备份的数据(可以精确条件),应该有两条数据,注意备份的地址具备write权限
mysql> select * from userinfo where id < 10000 into outfile '/Users/Brand/Downloads/tmp/userinfo.txt' ;

# 检查文件是否存在
brand@MacBook-Pro ~ %  cd /Users/Brand/Downloads/tmp/

# 因为它是文本模式,所以我们使用 load data infile 恢复,并且在恢复之前先删除掉要恢复的数据,做个测试
mysql> delete from userinfo where id < 10000;
mysql> load data infile '/Users/Brand/Downloads/tmp/userinfo.txt' into table userinfo;

5.2 使用工具进行备份与还原

可以使用类似 mysqldump工具 或者 mysqlhotcopy工具对数据进行备份和还原,也可以使用免费的热备份软件 Percona XtraBackup。
这边以 mysqldump 为例子演示温备的实现:

5.2.1 备份基本语法

mysqldump -h主机 -P端口 -u用户名  -p密码 param1, param2, param3... > bak_filename.sql

这边对各个字段坐下说明:

  • h:登录用户所在的主机名称
  • P:主机端口
  • u:登录用户用户名
  • p:用户密码
  • param:导出参数(库、表、加锁等参数)
  • ">":将备份数据表的定义和数据写入备份文件的定义
  • bak_filename.sql:备份的文件名

5.2.2 导出全部数据库

–all-databases 或者 -A

mysqldump -uroot -p123456  --all-databases  >  /user/brand/db_bak/all.sql
mysqldump -uroot -p123456  -A  > /user/brand/db_bak/all.sql

5.2.3 导出部分数据表

-databases [dbname,[dbname...]] --tables [tbname,[tbname...]] ,如果多个表where条件相同,也可以组合在一起使用:

mysqldump -uroot -p123456 --databases db1  --tables tb1 --where="id>1000"  > /user/brand/db_bak/db1_tb1.sql

5.2.4 创建之前先删库或表

–add-drop-database 、 –add-drop-table

  • 在create database 前先 drop database;在create table之前先 drop table
  • 默认关闭,所以一般在导入时需要保证数据库已存在。。
mysqldump -uroot -p123456  -A --add-drop-database --skip-add-drop-table >  /user/brand/db_bak/all.sql

5.2.5 锁表

–add-locks:备份数据库表时锁定数据库表,默认就是打开的状态,可以使用–skip-add-locks取消

# 不佳参数选项的时候,默认是添加LOCK的
mysqldump -uroot -p123456  -A  >  /user/brand/db_bak/all.sql

# 取消LOCK的状态
mysqldump -uroot -p123456  -A --skip-add-locks   > /user/brand/db_bak/all_skip_lock.sql

5.2.6 进行压缩

–compact:压缩模式,去掉注释、头尾等结构信息,让输出更少

mysqldump -uroot -p123456  -A --compact >  /user/brand/db_bak/all_compact.sql

5.2.7 数据恢复

使用mysql命令进行恢复,语法如下

mysql -u user -p pwd [dbname] < bak_filename.sql

注意箭头方向

# 删除数据库,模拟数据库损坏
mysql> drop database db1;

# 导入完全备份的文件
mysql < /user/brand/db_bak/all_compact.sql

6 总结

备份和恢复主要使用在以下几个方面:

  • 灾难恢复
  • 需求的变更或者版本回滚
  • 数据和变更审计
  • 多版本测试

与MySQL全面瓦解30:备份与恢复相似的内容:

MySQL全面瓦解30:备份与恢复

> [合辑地址:MySQL全面瓦解](https://www.cnblogs.com/wzh2010/category/1859594.html "合辑地址:MySQL全面瓦解") # 1 为什么需要数据库备份 - 灾难恢复:当发生数据灾难的时候,需要对损坏的数据进行恢复和还原 - 需求的变更或者回

MySQL性能优化浅析及线上案例

关于数据库的性能优化其实是一个很复杂的大课题,很难通过一篇帖子讲的很全面和深刻,这也就是为什么我的标题是‘浅析’,程序员的成长一定是要付出代价和成本,因为只有真的在一线切身体会到当时的紧张和压力,对于一件事情才能印象深刻,但反之也不能太过于强调代价,如果可以通过一些别人的分享就可以规避一些自己业务的问题和错误的代价也是好的。

面试必问:MySQL死锁 是什么,如何解决?(史上最全)

MySQL死锁接触少,但面试又经常被问到怎么办? 最近有小伙伴在面试的时候,被问了MySQL死锁,如何解决? 虽然也回答出来了,但是不够全面体系化, 所以,小北给大家做一下系统化、体系化的梳理,帮助大家在面试过程中能够脱颖而出,拿到自己心仪的Offer 插播一条:如果你近期准备面试跳槽,建议在htt

MySQL面试题全解析:准备面试所需的关键知识点和实战经验

本次种子题目主要涵盖了MySQL的存储引擎和索引结构,如B+树索引和哈希索引,以及覆盖索引和回表的概念。此外,还包含了MySQL事务的ACID特性和隔离级别。另外,对MySQL主从集群中的binlog日志的执行顺序和作用进行了讨论。最后,还涉及了分库分表和读写分离的概念。这些内容涵盖了MySQL数据库的核心知识和重要技术,不仅在面试中起到关键作用还对于优化数据库性能和应用开发都具有重要意义。

MySQL实战实战系列 07 行锁功过:怎么减少行锁对性能的影响?

在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁。 MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一

[转帖]全球共有多少MySQL实例在运行?这里有一份数据

https://www.cnblogs.com/zhoujinyi/p/16377269.html 摘要 Shadowserver Foundation在5月31日发布了一份全网的MySQL扫描报告,共发现了暴露在公网的360万个MySQL实例。因为这份报告基数够大,而且信息也非常完整,从数据库专业

MySQL基础4-数据查询

一、DQL介绍 DQL全称:Data Query Language(数据查询语言),用来查询数据库中表的记录。 关键字:select 二、DQL语法 select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序

Vitess全局唯一ID生成的实现方案

为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键。 但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足全局唯一的需求。因此,产生了多种解决方案,如UUID,SnowFlake等。下文将介绍Vitess是如何解决这个问题的。

Mysql-Xtrabackup备份恢复

恢复准备 1、安装Xtrabackup 2、数据备份和拷贝 恢复步骤 1、恢复全量备份2、恢复增量备份到全量备份注意:开始恢复的增量备份要添加--redo-only参数,最后一次增量备份去掉--redo-only参数3、对整体的完全备份进行恢复:停库——恢复——启动库 恢复场景 全量备份恢复 noh

[转帖]MySQL命令执行sql文件的两种方法

使用命令执行 sql 脚本文件 方法一,在 Windows 下使用 cmd 命令执行(或Unix或Linux控制台下) 【Mysql的bin目录】mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】,示例: C:MySQLinmysql –uroot –p123456 -Dtes