一直使用 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 十倍了。不过这个方法有一个缺点,因为是通过异构数据库来进行数据备份和还原,所以视图和存储过程将不会被保留。不过我们的项目都没有使用这两样东西,所以足够使用了。最重要的是,老板说我最近的工作效率提高了~

快速备份和还原 MySQL 数据库的另一种方法的更多相关文章

  1. Java在线备份和还原MySQL数据库。

    2018年6月29日14:00:48 阅读数:1534 今天整了整整一整天,终于使用Java在线备份和还原MySQL数据库了,哎,备份倒是很快,就是在还原的时候遇到了一个问题,也不报错,结果将sql语 ...

  2. 备份与还原mysql 数据库的常用命令。

    一.备份数据: Mysqldump常用命令: mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > xxx.sql 常见选项: -u: 用户名 -p: 密码 ...

  3. MySQL数据库改名的三种方法

    前不久去面试,被问到Innodb引擎的表如何改数据库名,当时我也只回答了MyISAM改如何操作,被一些细节问题打败,真是操蛋. 如果表示MyISAM那么可以直接去到数据库目录mv就可以. Innodb ...

  4. Navicat备份、还原mysql数据库

    注:本文为原创,转载请附带链接:https://www.cnblogs.com/stm32stm32

  5. 安全快速修改Mysql数据库名的5种方法

    1. RENAME DATABASE db_name TO new_db_name这个..这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了.据说有可能丢失数据.还是不要用的好.详 ...

  6. mysql数据库优化的几种方法

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...

  7. mysql 数据库优化的几种方法

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...

  8. 备份还原mysql数据库

    Windows下cmd命令行中备份还原mysql数据库 先cmd 上cd  到mysql的安装bin目录下,然后再运行下面的命令. 例如:cd C:\Program Files\MySQL\MySQL ...

  9. C#备份还原MySql数据库

    原文:C#备份还原MySql数据库 项目结束,粘点代码出来让Google或Baidu一下,原因是现在还搜不到这么现成的 调用MySql的工具mysqldump来实现. 类Cmd来实现调用cmd命令, ...

随机推荐

  1. SQL Server:统计数据库中每张表的大小

    1. 统计数据库中每张表的大小 1.1 首先执行下面的命令 exec sp_MSforeachtable @command1="sp_spaceused '?'"; 1.2 检测当 ...

  2. 安装了SQL2005再安装SQL 2008R2,提示此计算机上安装了 Microsoft Visual Studio 2008 的早期版本和检查是否安装了 SQL Server 2005 Express 工具的解决方案

    工作电脑上安装了SQL 2005, 但是客户电脑上安装的是SQL 2008R2,有时候连接他们的库调试没法连接,很不方便.然后又安装了个SQL2008 R2,期间遇到这两个问题,网上搜索了一下收到了解 ...

  3. 【转】ETL数据增量抽取——通过触发器方式实现

    在使用Kettle进行数据同步的时候, 共有 1.使用时间戳进行数据增量更新 2.使用数据库日志进行数据增量更新 3.使用触发器+快照表 进行数据增量更新 今天要介绍的是第3中方法. 实验的思路是这样 ...

  4. c#实现清理回收站垃圾

    /// <summary> /// 清理回收站垃圾 /// </summary> /// <param name="sender"></p ...

  5. MMORPG大型游戏设计与开发(客户端架构 part7 of vegine)

    我在讲述某个东西的时候总喜欢从简单的入手,然后从互相关联的地方联合讲解,因为时间关系所以没能讲的十分详细,这点引以为憾,希望得到大家的谅解.这一节讲述的是微引擎(vengine)比较简单的一个模块,那 ...

  6. What makes an excellent front-end developer?(for my English speech)

    What makes an excellent front-end developer? Let me please start this talking by saying that what is ...

  7. Thread对象的yield(),wait(),notify(),notifyall()

    Thread类中的主要方法: join()方法:让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等到此线程完成之后才可以继续执行. setDaemon():设置线程为后台线程,这样即使Ja ...

  8. AC日记——红与黑 codevs 2806

    2806 红与黑  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 白银 Silver 题解  查看运行结果     题目描述 Description 有一个矩形房间,覆盖正方形瓷 ...

  9. Android驱动入门-LED--测试APP编写③

    硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-24  10:47:03 在Android Studio中 ...

  10. android studio 中 .9.png的制作

    折腾好久,最后在一个群里面咨询一个朋友才弄好的,用的是1.2.2版,感觉对.9的支持不太好, 1,用一张干净的png图片放在mipmap里面. 2,点击图片右键最后一项,create 9-patch ...