不多废话,直接开讲,不过我的需求环境比特殊,可能和你们想要的效果不一样。

需求环境:

宿主机win7系统,搭建了虚拟机window2008 系统,需要在虚拟机上搭建网站,并通过NAT端口转换,让局域网内其他主机通过访问 宿主机IP:端口号的方式,访问到虚拟机上的站点。

注:这次只针对数据库迁移出现的问题做记录,NAT端口转换在网上有说明如何实现,但我在转换后也遇到了一些问题,下次有时间再记录。

遇到问题:

数据库迁移出现问题。

我本地使用wamp集成环境,虚拟机是phpstudy集成换进,我使用navicat工具,将数据库导出sql文件,在虚拟机上执行报错。报错大意是:数据表中的字段设置为datetime类型,并给该字段设置了current_datestamp默认值,导致不能建表。

当时想了两个办法,第一是直接将mysql中的data文件夹下的数据库文件拷贝过来,网上的说法是将文件拷贝过来,要注意innodb_fast_shutdown的值是1,查看命令 show variables like '%innodb_fast_shutdown',拷贝后,删除虚拟机mysql->data中的log文件,重启服务。这样操作后,数据表都出现了,但是不能打开,会报错 frm的错误。

第二个办法将sql文件中的datetime全部改为timestamp,再次执行,依旧报错,大意是:表中有两个以上的timestamp列,且都设置了默认值current_timestamp。检查后发现宿主机和虚拟机上的mysql版本不一致。


解决本法:

将宿主机的mysql文件夹下除了data文件夹的所有文件拷贝到虚拟机对应的文件夹下,再次测试sql文件,完美执行,且不需要将datetime转为timestamp。

反思:

找到了半天的问题,最后发现问题出在环境上,自己也很无语。看来下次如果还出现一些解决不了的问题,需要将自己的眼光放大才行。

这次的问题也说明,在数据库迁移的时候,尽量要保证两边的数据库版本一致。不过网上也有说高版本会兼容低版本,我没有时间测试了,希望你们能给我解答。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐