《高性能mysql》之备份与恢复(第十五章)_mysql数据库备份与恢复 高性能mysql-程序员宅基地

技术标签: 高性能MySQL  mysql  

①为什么要备份:
     1) 灾难恢复(如硬件故障,失手删库等)
     2) 人们想法改变,想恢复回原来的
     3) 审计,需要知道某个时间点这部分数据是否有bug
     4) 测试,删了测,测了删

②定义恢复需求:
     
     注:复制不是备份,只有备份才能满足备份要求。

③设计MySQL备份方案:
     -- 在线备份还是离线备份关闭MySQL做备份是最简单 最安全的,但让服务器停机代价过大
          在热备份中,往往要执行   FLUSH TABLES WITH READ LOCK 锁定,导致MySQL关闭并锁定所有的表(MyISAM下会有该问题,但用 InnoDB能避免)
     -- 逻辑备份还是物理备份
          逻辑备份 优点:可用编辑器查看文件结构、恢复简单,直接导入、可用mysqldump之类工具导入、与存储引擎无关、有助于避免数据损坏
                          缺点:需要更多 CPU周期、比数据库本身 文件更大、无法保证导出还原是同样数据、需要mysql加载会很慢(需要不少恢复时间)。
          物理备份:更易出错,体积更轻量

     -- 备份什么
          日志文件、代码(存储过程和触发器)、复制配置(二进制文件、中继日志)、服务器配置(my.cnf)、选定的系统文件(cron文件、脚本等)
          
          增量备份和差异备份:增量备份和差异备份都是 部分备份,可能会导致所有备份无效。
                建议:使用 MySQL Enterprise Backup中的增量备份特性。
                         备份 二进制日志,每次备份后使用FLUSH LOGS 开始一个新的日志(这样每次都备份新的)
                         不要备份 没有改变的表/行
                         备份 所有数据,考虑到简便性,建议尽量做 全备(至少 一周一次)
     
      -- 存储引擎和一致性
          数据一致性:即在备份过程中,别人在插入一条数据,另一条 还没插就备份好了
                              如果使用的非事务型(如InnoDB是),则只能在备份时用 LOCK TABLES住所有的备份表
          文件一致性:文件复制可能存在不一致性如MyISAM中.MYD和.MYI,要保证MyISAM的一致性必须:LOCAK TABLES、FLUSH TABLES。     
                              而对于InnoDB的文件一致性更难,因为其 线程设计是 并发,部分异步与 LOCK TABLES 无关

④管理和备份二进制日志文件:
     -- 用途:二进制日志有助于时间点恢复,数据回滚
      -- 安全的清除过老的二进制日志expire_log_days 告诉MySQL 定期清理日志
          mysql4.1做法:
          新版做法:

⑤备份数据:
     -- 生成逻辑备份:逻辑备份有 SQL导出和符号分隔文件
          SQL导出;phpMyAdmin,Navicat、mysqldump等工具都可以做
          缺点:巨大的sql语句、单个巨大文件,成本高
          符号分隔文件备份(比上面更优):
          
          缺点:仅用于MySQL、写权限(一般root不担心)、不覆盖存在文件
          
      -- 文件快照:使用LVM规划快照
          
          :快照不等同于备份

⑥从备份中恢复:
     -- 恢复物理备份:InnoDB有诸多限制,而MyISAM则可直接将物理备份复制粘贴过去。
          :准备物理备份时需 同时准备逻辑备份。
          
     -- 还原逻辑备份
          SQL文件命令导入:  
               $ mysql < sakila-backup.sql
               ---------------------------------------------------
               mysql中: SET SQL_LOG_BIN = 0;
                              SOURCE sakila-backup.sql
                              SET SQL_LOG_BIN = 0;
               注:上面两种方法均性可,相比较source 报错不强退,不严谨。
               若备份 压缩过,则:
                    $ gunzip -c sakila-backup.sql.gz | mysql
               若想恢复 单个表则:
                     $ grep 'INSERT INTO `actor`' sakila-backup.sql | mysql sakila   或  $ gunzip -c sakila-backup.sql.gz | grep 'INSERT INTO `actor`' | mysql sakila

          加载符号分隔文件:
               优化技巧:创建一个命名管道并将解压数据流流向里面
               
     -- 基于时间点的恢复:只要有二进制日志文件,就可以恢复任何希望的时间点。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_28666081/article/details/62882014

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签