一直使用 SQL Server 作为公司产品的数据库来存储系统数据,所以备份还原一直都不是问题,因为 SQL Server 的备份还原非常迅速和易用。但今年公司改变策略,使用起 MySQL 数据库作为新产品的数据库后,我们终于遇到了备份还原的大难题:我们需要把客户的数据库备份并还原到开发环境中。我们同时使用 HeidiSQL和 NaviCat for MySQL 作为数据库管理工具,使用这类工具的导出脚本功能,把整个数据库导出为一个SQL文件,然后在还原目标数据库中执行该 SQL 文件以完成还原动作。原理非常简单,但一个3GB大小的数据库,备份以及还原居然花费了70小时(无可否认我们的服务器的确是有点慢)。这个速度无论让人接受,也影响了客户对我们服务效率的评价。
经过分析发现,还源速度慢的主要原因是因为这类工具在执行 SQL 文件的时候,总是把每一条SQL以一个事务的方式去执行。所以面对几千万的数据,就需要执行几千万次的 SQL 语句,效率更加可想而知。于是想到了 OBDB2DB 这一个数据库转换工具,通过这一个工具把 MySQL 的数据导出为本地 SQLite 数据库,带回来后再将 SQLite 转换为 MySQL 数据库。由于 OBDB2DB 在进行数据转换时采用了批量处理的方式,所以转换速度相比原来的方式大大提高。
OBDB2DB 的使用非常简单,首先按下图将原数据库导出为 SQLite 数据库:
经过短暂的等待之后,我们就可以得到一个 DataBase.DB 的 SQLite 数据库文件(文件名自定义)。把文件带回到开发环境后,我们使用相反的方法把 SQLite 还原到 MySQL 数据库:
带回的数据库,在我的 W540 笔记本上只需要十分钟就还原成功了。在那台老慢的服务器上面还原,也减少至只需要 54 分钟就还原成功!比原来的 70 小时提高了 N 十倍了。不过这个方法有一个缺点,因为是通过异构数据库来进行数据备份和还原,所以视图和存储过程将不会被保留。不过我们的项目都没有使用这两样东西,所以足够使用了。最重要的是,老板说我最近的工作效率提高了~