返回顶部

[文摘] MySql直接备份数据库文件的方法(MyISAM和InnoDB有所不同)

[复制链接]
awagink 显示全部楼层 发表于 2014-9-10 17:10:47 |阅读模式 打印 上一主题 下一主题
mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法

补充:正常情况下,建议数据库备份最好用工具进行备份,通过拷贝数据库表进行数据迁移,不同的环境会出现各种不同的意外问题。
背景:今天在整理一个网站的时候,操作系统由于系统自动更新导致一直出现系统蓝屏死机,唉,悲剧了,于是重新安装了系统 windows server 2008 enterprise 32bit。
详情:
      系统安装完成后,重新配置之前那个网站,appache服务配好之后,再配置数据的时候是这样做的,将原来Mysql 文件夹(C:\Windows.old\ProgramData\MySQL\MySQL Server 5.1\data)下的数据库文件夹及"*.frm"
拷贝到新安装的myql数据库文件夹下面(C:\ProgramData\MySQL\MySQL Server 5.1\data),重启mysql服务,通过使用navicate for mysql 工具查看数据库 “xxdatabase”中某张表,结果显示“ mysql table 'xxtable' doesn`t exist ”,
这个可把我给急坏了,心想这下可玩大了,网站的数据要是出问题了,领导还不把我给烧烤了啊。
    于是我就google 啊,百度啊,bing啊,stackoverflow啊等几大常用的搜索全用上了,搜索出来的答案全部都不能解决问题啊,一不留神时间到了该吃饭的点了,唉,心想先吃饱饭,然后在思考更有思路,哈哈。于是回去猛吃了一顿,可把我给撑的啊,废话少说,回来后又找啊找啊,结果还是没能找到合适解决方案,于是认真查看了下mysql 的data文件加下的文件,发现了WIN-4FA0WLP5F0V.err和WIN-4FA0WLP5F0V.pid 两个文件,于是看了具体的错误内容如下

感觉应该是数据库引擎配置的问题,于是搜索了有关InnoDB 和MyISAM的相关资料,如下这段内容很有意义
以表”Table”为例:
如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中.
如类型是InnoDB, 数据文件则存储在”$innodb_data_home_dir/″中的ibdata1文件中(一般情况),结构文件存在于table_name.frm中.
MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。
而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。
MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。解决方法就是:
同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务
由于MySQL这样数据混杂的形式, 往往很容易让使用者在备份时忘记了备份InnoDB, 从而导致了上述错误.
意思就是说在数据库引擎类型InnoDB时拷贝数据文件的同时还需要拷贝ibdata1,于是把ibdata1也拷贝过去覆盖,发现还是有点问题,于是停止mysql服务,将目录下的ib_logfile*文件全部删除掉,重新启动mysql服务,well done,可以了
高兴啊,于是稍微总结了,希望以后遇到相同的问题,能够快速解决。
1,在进行mysql数据库备份的或迁移的时候,尽量备份完成所需要的数据;
2,如果直接拷贝原有数据库文件"*.frm"、"*.MYD"、"*.MYI"等文件时候,如果原数据库引擎是InnoDB,切记还需拷贝ibdata1文件
3,备份数据库的时候,最好是用相关的工具进行备份或是导出sql文件,以免浪费时间在数据库恢复上
4,msyql版本或是备份工具的版本不同,也可能引起数据恢复有问题。
实践证明以上问题是存在的,解决方案是可行的,哈哈,为了以后方便,写了这篇博客随笔,希望大牛看到了不要鄙视,欢迎拍砖。

----------------------------------------------------

1:MyISAM类型的数据文件可以在不同操作系统中COPY,这点很重要,布署的时候方便点。(只需要拷贝 数据库名字文件夹下面的文件,这样数据库就拷贝完了)
2:  InnoDB类型的 要注意多拷贝 ibdata1 , 最好不要是直接复制文件夹,而是应该用sql导入导出

目的:把A机中的库转移到B机中。

1、停止mysql服务,在A机mysql安装目录下,找到my.ini文件打开,在此文件中找到datadir,把这个路径下的数据文件:ibdata1以及所有文件夹拷贝到B机中d:\mysql_data文件夹下(其他文件是log文件,不用拷贝,这些log文件依赖于当前系统,如果这些log文件都拷贝到B机中,会出错);

2、在B机中装正常安装mysql。

3、配件B机中的mysql服务器。先关闭mysql服务器。然后打开mysql安装目录,找到my.ini文件,在这个文件中把datadir的值改为数据文件的位置d:/mysql_data(注意是'/')。再my.ini文件中,把default-storage-engine的值改为myisam,因为InnoDB引擎不支持直接拷贝数据文件备份数据库。

4、启动mysql服务器,此时,数据库就变为了A机中的库了,所以用户名、密码都是原来的。

经测试增删查改都没问题


您需要登录后才可以回帖 登录 | 注册

本版积分规则

纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ