当前位置: 首页 > news >正文

MySQL管理与优化(20):备份与恢复

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

备份与恢复:

  • 备份使得数据库的中的数据更加高效安全

备份/恢复策略:

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

  • 确定要备份的表的存储引擎是事务性还是非事务性,两种不同存储引擎备份方式在处理数据一致性方面是不太一样的。
  • 确实使用全量备份还是增量备份。全备份的优点是备份保持最新备份,恢复的时候可以花费更少的时间;缺点是如果数据量过大,将花费很多的时间,并对系统造成较长时间的压力。增量备份则恰恰相反,只需备份每天的增量日志,备份时间少,对负载压力下;缺点是恢复的时候需要全备份加上次备份到故障前的所有日志,恢复时间会长些。
  • 可以考虑采取复制的方法来做异地备份,但复制不能代替备份,它对数据库的误操作也是无能为力。
  • 定期做备份,备份的周期要充分考虑系统可以承受的恢复时间。备份要在系统负载较小的时候进行。
  • 确保MySQL打开log-bin选项,有了BINLOG,MySQL才可以在必要的时候做完整恢复,或基于时间点的恢复,或基于位置的恢复。
  • 要经常做备份恢复测试,确保备份是有效的,并且是可以恢复的。

逻辑备份和恢复:

  • 逻辑备份可以针对不同的存储引擎,而使用相同的方法来备份;而物理备份对于不同的存储引擎会有不同的方法。

备份:

  • MySQL中的逻辑备份将数据库中的数据备份为一个文本文件,备份的文件可以查看和编辑。
  • 我们可以是使用mysqldump工具实现备份,如:
-- 备份所有数据库
mysqldump -uroot -p --all-database > all.sql

-- 备份数据库test
mysqldump -uroot -p test > test.sql

-- 备份数据库test下的表emp
mysqldump -uroot -p test emp > test_emp.sql

-- 备份数据库test下的表emp, dept
mysqldump -uroot -p test emp dept > test_emp_dept.sql

-- mysqldump --help可查看更多选项
  • 为了保证数据备份的一致性,对于MyISAM表备份时需要加上-l参数,对于InnoDB可采用--single-transaction选项。

完全恢复:

  • 同样,我们可以使用mysqldump实现简单的恢复:
-- 恢复某个数据库
mysql -uroot -p db_name < bakfile

-- 上面的恢复可能不完整,还需要将备份后执行的日志进行重做
mysqlbinlog binlog-file | mysql -uroot -p db_name

基于时间点恢复:

  • MySQL恢复中分为完全恢复非完全恢复,非完全恢复分为基于时间点的恢复和基于位置的恢复。
  • 基于时间点的恢复:
-- 若上午10点发生了误操作,可以用下面的语句进行恢复
mysqlbinlog --stop-date="2014-10-06 9:59:59" bin_log_file | mysql -uroot -p****

-- 跳过10点的误操作,再恢复
mysqlbinlog --start-date="2014-10-06 10:00:01" bin_log_file | mysql -uroot -p****

基于位置恢复:

-- 保存某时间段内的日志
mysqlbinlog --start-date="2014-10-06 12:10:20" --stop-date="2014-10-06 12:15:00" bin_log_file > temp_file

-- 越过某些位置的日志,进行恢复,如跳过1000~2000位置的日志
mysqlbinlog --stop-position="1000" bin_log_file | mysql -uroot -p****
mysqlbinlog --start-position="2000" bin_log_file | mysql -uroot -p****

物理备份和恢复:

  • 物理备份又分为冷备份热备份两种,和逻辑备份相比,优点是备份和恢复的速度更快。

冷备份:

  • 停掉MySQL服务,在操作系统级别恢复MySQL的数据文件;重启MySQL服务,使用mysqlbinlog工具恢复备份以来所有的BINLOG。

热备份:

  • 热备份需要针对不同存储引擎,主要是MyISAM和InnoDB。
  • MyISAM存储引擎:
-- 1. 使用mysqlhotcopy工具
mysqlhotcopy -u root -p **** db_name /path/to/new_directory

-- 2. 手动锁表复制
flush tables for read;
-- 复制数据文件到备份目录
  • InnoDB存储引擎:

可以参考收费工具ibbackup,http://dev.mysql.com/doc/mysql-enterprise-backup/3.7/en/ihb-meb-compatibility.html

表的导入导出:

导出:

  • 有时我们需要对数据库表进行导出,以:

        1. 作为Excel显示;

        2. 为了节省备份空间

        3. 为了快速加载数据,LOAD DATA的加载速度比普通的SQL加载快20倍以上。

  • 可以有两种办法来实现:
-- 使用SELECT ... INTO OUTFILE ...
SELECT * FROM table_name INTO OUTFILE 'file_name' [option];

其中option选项:


NOTE: SELECT ... INTO OUTFILE ...产生的输出文件如果已存在,将会创建失败,不会覆盖原文件。

第2种方法是用mysqldump导出:

mysqldump -u username -T target_dir db_name table_name [option]
其中option选项:

导入:

  • 使用LOAD DATA INFILE:
LOAD DATA [LOCAL] INFILE 'file_name' INTO TABLE table_name [option]
其中option选项如下:

  • 使用mysqlimport:
mysqlimport -u root -p*** [--LOCAL] db_name file_name [option]
其中option:

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

不吝指正。

转载于:https://my.oschina.net/indestiny/blog/324603

相关文章:

  • mysqldump 备份命令使用中的一些经验总结
  • Mysql开启慢查询日志
  • 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
  • 一套后台管理html模版
  • 关于CXF的FrontEnd和数据绑定方案
  • Android开发之计算器(一)界面设计之activity_main布局文件
  • 再谈Redirect(客户端重定向)和Dispatch(服务器端重定向)
  • 男神的补习
  • 360浏览器兼容模式 不能$.post (不是a 连接 onclick的问题!!)
  • Fluent NHibernate系列文章
  • 第八次作业
  • 计算思维导论
  • maven项目搭建
  • 图像识别技术
  • RTP协议
  • 30秒的PHP代码片段(1)数组 - Array
  • es6--symbol
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript DOM 10 - 滚动
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js作用域和this的理解
  • Linux gpio口使用方法
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • ucore操作系统实验笔记 - 重新理解中断
  • 如何编写一个可升级的智能合约
  • 微信小程序开发问题汇总
  • 由插件封装引出的一丢丢思考
  • 再次简单明了总结flex布局,一看就懂...
  • 智能网联汽车信息安全
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • !$boo在php中什么意思,php前戏
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (03)光刻——半导体电路的绘制
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)原始图像数据和PDF中的图像数据
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net和jar包windows服务部署
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @property python知乎_Python3基础之:property
  • @Transactional类内部访问失效原因详解
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [17]JAVAEE-HTTP协议
  • [30期] 我的学习方法
  • [C]整形提升(转载)