MySQL 直接复制 data 目录下文件备份数据库时需要注意的几点

学习笔记 马富天 2019-02-20 18:43:13 22 1

【摘要】很久没有更新博客了,因为前段时间我的域名重新进行了备案,中间有一段时间网站关闭了,所有歇了好长一段时间。今天正好没事儿,就打算写篇文章,写的是这段时间遇到的问题,一位朋友叫我帮他备份 MySQL 数据库,我贪图快就直接复制了 MySQL 的 data 目录下对应的数据库文件,本以为这样就将完整的数据都保存下来了,后来出现了问题,所以才有这篇文章。

出现的问题在于:需要备份数据库中有 MyISAM、InnoDB 两个类型的表,而所有 MyISAM 引擎的表结构和数据都保留下来了;而 InnoDB 引擎的表数据保存不够完善。报错如下图所示:

请输入图片名称

给出一个案例:一个数据库名称叫做:test4,数据库中有两个表,一张是 test(InnoDB),一张是 test1(MyISAM),都存有数据,然后在 MySQL 安装目录下的 data 目录将 test4 文件夹备份起来;新建一个 test5 数据库,创建之后把 test4 中所有的文件替换掉 data 文件夹下 test5 文件夹的文件,就会出现如上的问题。

表 test(InnoDB)数据文件是:test.frm、test.ibd(2 个)

表 test1(MyISAM)数据文件是:test1.frm、test1.MYD、test1.MYI(3 个)

如果侥幸我们备份的数据库 test4 中所有的表都是 MyISAM 存储引擎的,那么很幸运,我们备份 test4 成功。但是万一存在 InnoDB 的时候,就吃大亏了。因为我们在建表的时候没有特别指定一般都是创建 InnoDB 类型的表。所有采用直接复制 data 目录下对应数据库的数据文件是不够安全的。

通常拷贝 data 文件是可以完整备份 MySQL 服务器中的所有数据库的所有数据的,这种做法比较适合数据库的搬迁,但并不适合针对某一个数据库的备份。

搬迁数据库的做法是:拷贝 data 数据目录下的所有文件,包括 ibdata1 等文件一并复制过去,并删除 ib_logfile0 ,ib_logfile1 等如 ib_logfile* 这类的文件,当然一些 log 文件可以拷贝也可以不拷贝,拷贝到指定 MySQL 服务器的 data 目录下即可(需要先清空 data 目录,这样等于是完整的搬迁数据库,就连数据库账号密码都搬迁了)。

【总结】如下:

1、当需要备份的数据库中的所有表都是 MyISAM 类型的存储引擎时,可以直接复制 data 目录下对应的数据库数据文件。

2、当不知道表的引擎情况,或者是 InnoDB 引擎,或者是两者混合出现的时候,需要备份对应的数据库数据文件以及 data 目录下的 ibdata1 文件,并删除 ib_logfile0、ib_logfile1 可能不止两个(ib_logfile*)即可。

3、拷贝 data 目录方式准确的说并不是备份数据库,而是对数据库进行搬迁。

4、最后也是最重要的一点:最好的备份数据库的方式还是使用相关工具(如 Navicate for MySQL)导出对应数据库的数据和表结构。

版权归 马富天PHP博客 所有

本文标题:《MySQL 直接复制 data 目录下文件备份数据库时需要注意的几点》

本文链接地址:http://www.mafutian.net/407.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 使用 sha1_file() 判断两个图片(或者文件)是否完全相同 》 下一篇《 numpy 中 array() 和 matrix() 用法的关联与区别 》

所有评论

  1. 首页
  2. 上一页
  3. 1
  4. 下一页
  5. 尾页
  6. 第1页
  7. 每页12条
  8. 共1页
  9. 共1条
评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多