一、 备份恢复策略

进行备份或恢复操作时需要考虑一些因素:

1、确定要备份的表的存储引擎是事务型还是非事务型,两种不同的存储引擎备份方式在处理数据一致性方面是不太一样的。

2、确定使用全备份还是增量备份。全备份的优点是备份保持最新备份,恢复的时候可以花费更少的时间;缺点是如果数据量大,将会花费很多的时间,并对系统造成较长时间的压力。增量备份相反,只需要备份每天的增量日志,备份时间少,对负载压力也小;缺点就是恢复的时候需要全备份加上次备份到故障前的所有日志,恢复时间长一些。

3、可以考虑采用复制的方法来做异地备份,但不能代替备份,它对数据库的误操作也无能为力。

4、要定期做备份,备份的周期要充分考虑系统可以承受的恢复时间。备份要在系统负载较小的时候进行

5、确保 MySQL 打开 log-bin 选项,有了 binlog,MySQL 才可以在必要的时候做完整恢复,或基于时间点的恢复,或基于位置的恢复。

6、经常做备份恢复测试,确保备份是有效的,是可以恢复的。

二、 逻辑备份和恢复

在 MySQL 中,逻辑备份的最大优点是对于各种存储引擎都可以用同样的方法来备份;而物理备份则不同,不同的存储引擎有着不同的备份方法,因此,对于不同存储引擎混合的数据库,逻辑备份会简单一点。

1. 备份

MySQL 中的逻辑备份是将数据库中的数据备份为一个文本文件,备份的文件可以被查看和编辑。在 MySQL 中,可以使用 mysqldump 工具来完成逻辑备份:

如果没有指定数据库中的任何表,默认导出所有数据库中的所有表。

示例:

1. 备份所有数据库:

2. 备份数据库 test

3. 备份数据库 test 下的表 emp

4. 备份数据库 test 下的表 emp 和 dept

5. 备份数据库test 下的所有表为逗号分割的文本,备份到 /tmp:

注意:为了保证数据备份的一致性, myisam存储引擎在备份时需要加上-l参数,表示将所有表加上读锁,在备份期间,所有表将只能读而不能进行数据更新。但是对于事务存储引擎来说,可以采用更好的选项 --single-transaction,此选项使得 innodb 存储引擎得到一个快照(snapshot),使得备份的数据能够保证一致性。

2. 完全恢复

mysqldump 的恢复也很简单,将备份作为输入执行即可:

注意,将备份恢复后数据并不完整,还需要将备份后执行的日志进行重做:

完整的 mysqldump 备份与恢复示例:

1. 凌晨 2:00,备份数据库:

其中 -l参数表示给所有表加读锁,-F表示生成一个新的日志文件,此时,t2 中 emp 表的数据如下:

2. 备份完毕后,插入新的数据:

3. 数据库突然故障(其实是小伙伴没事儿删库练手玩儿),数据无法访问。需要恢复备份:

删库跑路:

数据恢复:

4. 使用 mysqlbinlog 恢复自 mysqldump 备份以来的 binglog

根据前面操作的内容,可知从备份的时间点到删库的时间点之间的操作被记录到了 mysql-bin.000002 文件中

至此,数据恢复成功。

3. 基于时间点恢复

由于误操作,比如误删除了一张表,这时使用完全恢复时没有用的,因为日志里面还存在误操作的语句,我们需要的是恢复到误操作之前的状态,然后跳过误操作语句,再恢复后面执行的语句,完成恢复。这种恢复叫不完全恢复,在 MySQL 中,不完全恢复分为 基于时间点的恢复和基于位置的恢复。基于时间点恢复的操作步骤:

(1) 如果是上午 10 点发生了误操作,可以用以下语句用备份和 binlog 将数据恢复到故障前:

(2) 跳过故障时的时间点,继续执行后面的 binlog,完成恢复。

4. 基于位置恢复

和基于时间点的恢复类似,但是更精确,因为同一个时间点可能有很多条 sql 语句同时执行。恢复的操作步骤如下:

(1) 在 shell 下执行命令:

该命令将在 /tmp 目录创建小的文本文件,编辑此文件,知道出错语句前后的位置号,例如前后位置号分别为 368312 和 368315。

(2) 恢复了以前的备份文件后,应从命令行输入下面的内容:

上面的第一行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为 mysqlbinlog 的输出包括每个 sql 语句记录之前的 set timestamp 语句,因此恢复的数据和相关的 mysql 日志将反映事务执行的 原时间。

三、 表的导入导出

在数据库的日常维护中,表的导入导出时很频繁的一类操作。

1. 导出

在某些情况下,为了一些特定的目的,经常需要将表里的数据导出为某些符号分割的纯数据文本,而不是 sql 语句:

1、用来作为 Excel 显示;2、单纯为了节省备份空间;3、为了快速的加载数据,load data 的加载速度比普通 sql 加载要快 20 倍以上。

使用 select ...into outfile ... 命令来导出数据,具体语法如下:

其中 option 参数可以是以下选项:

例如,将 test 表中数据导出为数据文本,其中,字段分隔符为“,”,字段引用符为“"”,记录结束符为回车符:

发现第一列是数值型,如果不希望字段两边用引号引起,则语句改为:

测试转义字符,MySQL 导出数据中需要转义的字符主要包括以下 3 类:

1、转义字符本身 2、字段分隔符 3、记录分隔符

1、当导出命令中包含字段引用符时,数据中含有转义字符本身和字段引用符的字符需要被转义;

2、当导出命令中不包含字段引用符时,数据中含有转义字符本身和字段分割符的字符需要被转义。

注意:select ... into outfile ... 产生的输出文件如果在目标目录下有重名文件,将不会被创建成功,源文件不会被自动覆盖。

使用 mysqldump 导出数据为文本的具体语法如下:

mysqldump -u username -T target_dir dbname tablename [option]

其中,option 参数可以是以下选项:

1、--fields-terminated-by=name (字段分隔符);

2、--fields-enclosed-by=name (字段引用符);

3、--fields-optionally-enclosed-by=name (字段引用符,只用在 char、varchar 和 test 等字符型字段上);

4、--fields-escaped-by=name (转义字符);

5、--lines-terminated-by=name (记录结束符);

例子:

可以发现,除多了一个表的创建脚本文件,mysqldump 和 select ... into outfile ... 的选项和语法非常相似。其实 mysqldump 实际调用的就是后者提供的接口,并在其上面添加了一些新的功能而已。

2. 导入

导入用 select ... into outfile 或者 mysqldump 导出的纯数据文本

和导出类似,导入也有两种不同的方法,分别是 load data infile... 和 mysqlimport,它们的本质是一样的,区别只是在于一个在 MySQL 内部执行,另一个在 MySQL 外部执行。

使用 “load data infile...” 命令,具体语法如下

option 可以是以下选项:

1、fields terminated by 'string' (字段分割符,默认为制表符't');

2、fields [optionally] enclosed by 'char' (字段引用符,如果加 optionally 选项则只用在 char varchar text 等字符型字段上。默认不使用引用符);

3、fields escaped by 'char' (转义字符,默认为'')

4、lines starting by 'string' (每行前都加此字符串,默认为'')

5、lines terminated by 'string' (行结束符,默认为'n')

6、ignore number lines (忽略输入文件中的前几行数据)

7、(colnameoruservar,...) (按照列出的字段顺序和字段数量加载数据);8、set col_name = expr,...将列做一定的数值转换后再加载。

fields 、lines 和前面 select...into outfile...的含义完全相同,不同的是多了几个不同的选项,下面的例子将文件'test.txt'中的数据加载到表 test 中:

如果不希望加载文件中的前两行,可以进行如下操作:

使用 mysqldump 实现

语法:

其中,option 参数可以是以下选项:

1、fields-terminated-by=name (字段分隔符) 2、fields-enclosed-by=name (字段引用符) 3、fields-optionally-enclosed-by=name (字段引用符,只用在 char、varchar、text等字符型字段上) 4、fields-escaped-by=name (转义字符) 5、lines-terminated-by=name (记录结束符) 6、ignore-lines=number (忽略前几行)

注意:如果导入和导出是跨平台操作的(windows 和 linux),那么要注意设置参数 line-terminated-by,windows 上设置为 line-terminated-by='rn', linux 上设置为 line-terminated-by='n'。

mysql10分钟备份一次_做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次...相关推荐

  1. mysql binlog 备份_做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次...

    原文:https://www.toutiao.com/i6855460778359816715/ 平台:头条 作者:程序员不就是0和1 一. 备份恢复策略 进行备份或恢复操作时需要考虑一些因素: 1. ...

  2. linux备份mysql需要暂停服务吗_【MySQL运维】线上MySQL数据库停服迁移流程

    一.数据备份与恢复阶段,选在凌晨1点进行操作,暂停服务进行备份(允许停服2个小时) 1.首先停止Nginx服务,并且修改数据库用户密码,防止还有新的连接进来 2.杀掉某个用户所有进程 for i in ...

  3. mysql主从备份导入数据库_[导入]MySQL数据库的主从及双机备份

    花了半天时间研究了下下MYSQL的备份实现,发现其是在MY.CNF(MY.INI)配置文件中作的设置,直接设置服务器唯一性ID号加上其它的附加设 置,则可作为一台MASTER,而在 SLAVE机上,也 ...

  4. mysql运维机制_《MySQL运维内参》节选 | InnoDB日志管理机制(一)

    引 子 InnoDB 存储引擎是支持事务ACID特性的,它是以二十多年前IBM的一篇著名文章<ARIES:A Transaction Recovery Method Supporting Fin ...

  5. mysql 集群 运维_【MySQL运维】Canal集群模式与多数据库同步部署

    一.Canal工作原理 Canal基于数据库的增量日志进行解析,然后提供增量数据的订阅和消费.Canal会将自己伪装成MySQL的 Slave去向主库进行同步请求,然后将获取到的binlog解析成特定 ...

  6. Mysql运维常用命令回顾整理

    一.前景 Mysql作为开源数据库的中坚力量之一,虽然目前已被甲骨文收购,面临闭源风险,但是mysql扔是我们运维工作中最常面对的工作,那如何做好mysql运维工作,甚至做好mysql的基础运维,都是 ...

  7. mysql 回滚_一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具

    goInception 一个集审核.执行.备份及生成回滚语句于一身的MySQL运维工具, 通过对执行SQL的语法解析,返回基于自定义规则的审核结果,并提供执行和备份及生成回滚语句的功能 架构图 使用方 ...

  8. mysql系列问答题_(2)MySQL运维基础知识面试问答题

    面试题001:请解释关系型数据库概念及主要特点? 面试题002:请说出关系型数据库的典型产品.特点及应用场景? 面试题003:请解释非关系型数据库概念及主要特点? 面试题004:请说出非关系型数据库的 ...

  9. mysql运维备份_MySQL运维经验

    原标题:MySQL运维经验 1. 概要 每台机器都使用多实例的模型. 每个机器放多个实例,每个实例放多个DB. 多实例之间没有进行资源隔离,这么做是让每个实例都能发挥最大性能. 目前大部分核心业务已切 ...

最新文章

  1. python窗口程序-Python GUI 编程(Tkinter)
  2. angularjs -- 路由监听
  3. arcgis引用样式无符号_【技术积累】arcgis制图应用:符号制作
  4. Natasha 4.0 探索之路系列(三) 基本的动态编译
  5. spring整合kafka项目生产和消费测试结果记录(一)
  6. C/C++基本数据类型
  7. Linux网络 - 数据包的接收过程
  8. python 爬虫 微博 github_GitHub - peanut-shi/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
  9. 老年手机计算机的按键怎么调至桌面,怎样设置一键回到桌面啊,就是这个图标(如图)...
  10. 石家庄计算机学院生活费每月多少,石家庄高校每月生活费约1000元
  11. App Transport Security has blocked a cleartext
  12. IntelliJ IDEA 集成 SVN
  13. 解决问题:Unable to connect to Redis
  14. ElementUI 的 el-select 设置值后显示value而不是label
  15. 动车报销凭证怎么取?高铁票的报销凭证在哪里取?
  16. python打印数字对应的星号_python打印表格式数据-星号或注释
  17. 纷享销客百思特 | 数字化营销赋能企业新增长沙龙圆满落幕
  18. RFID标签的基础知识(3)--了解芯片(之超高频标签芯片篇)
  19. Web 基础——Nginx(二)
  20. IP网络主动测评系统——X-Vision

热门文章

  1. 学习笔记:防火墙带宽管理
  2. linux 程序提权,Linux提权辅助工具
  3. 线程+线程池【面试题】
  4. 字体图标的网站和使用
  5. Android学习之Recyclerview
  6. ultraos win10启动盘_rufus制作win10启动盘,软碟通u盘装系统win10
  7. Spring5从入门到精通(史上最全版)
  8. 慎用 ConstraintLayout
  9. 前端面试问题(四)html css
  10. Xshell下利用tftp和iperf3进行网络吞吐量测试