这次面临服务器对不同操作系统迁移,我全力支持迁移工作。
一直做c++游戏服务端,对类似规模迁移全然没实战经验,踏错一步就是万丈深渊。程序代码的迁移比较有信心,数据库感觉有点烦银。经过一两周折腾,小心翼翼把“数据库全功能”成功导入了mysql(5.1.40),并且把程序底层调用接口相应改好。测试顺利通过,长呼一口气擦擦汗吧。这次迁移最头疼的存储过程的批量迁移,收集资料总结两个数据库的存储过程语法的差异,反复修改迁移脚本,终于成功了。
转结构、数据都可以用工具比较完美的迁移,没有找到工具可以完美转移存储过程,由于存储过程量较大,所以选择手动写脚本工具!可是并不顺利,不兼容的语法把写工具的工作变得复杂。
这次回忆下碰到比较多的不兼容语法,基本找到等效的替代办法,记性不好写出来方便以后查看
SQLSERVER | MYSQL |
|
|
|
|
句末加分号 | |
|
|
@A INT, @B INT OUTPUT, @C VARCHAR(255), @D DATETIME, @E DECIMAL(8,2), @F BIT, @G FLOAT, ... |
|
放到as以后
| 放到begin以后
|
| #有的情况可以直接输出。 #最好加一个out X做返回值,不过程序那边得改动底层接口 |
|
|
|
|
|
|
|
|
|
|
| #为了删除数据,不完全等效,用TRUNCATE重置了整个表,比如自增量 |
|
|
-- | # -- |
... | ... #这里不是省略 |
弄好后“mysqldump -uXXX -pXXX -R -d -x --default-character-set=utf8 --opt --extended-insert=false --skip-triggers dbo > /data/dbo.sql”备份一下,不带数据的,带数据去掉“-d”
还原"mysql -uXXX -pXXX -f --default-character-set=utf8 dbo < /data/dbo.sql" , 出现“Unknown character set: 'gbk'”类似的错误,说明缺字符集,或者你能保证数据是utf8,就搜一下sql文件注释(没错就在注释)里的gbk替换成utf8就行了