by Rong Yu

有用户问怎么把他们应用的数据库迁移到MySQL Database on Azure上,有哪些方式,有没有需要注意的地方。今天我们来概括介绍一下迁移应用数据库到MySQL Database on Azure的方式和需要考虑的事项。

应用的可迁移性

首先您可能会想您的应用是否可以顺利的运行在MySQL Database on Azure上。MySQL Database on Azure兼容MySQL 5.5 和 MySQL 5.6,所以绝大部分应用可以不用做任何改动可以顺利地运行在MySQL Database on Azure上。当然为了更好地在MySQL Database on Azure上运行您的应用,我们建议应用要有数据库重连机制以保证良好的容错性,避免由于数据库短暂连不上的时候应用死掉,因为即使是高可用的云端的数据库也不可避免有故障切换和服务器维护等会导致短暂数据库连不上的情况出现。另外我们也建议尽量采用连接池和长连接来访问数据库,特别是对性能要求比较高的应用,详细可以参考如何高效连接到MySQL
Database on Azure

另外一个需要注意的地方是MySQL Database on Azure不支持老的MYISAM引擎,可以参考这个FAQ,为什么MySQL Database on Azure不支持MYISAM格式的数据库?了解为什么。在大多数情况下,您可以直接在建表的code里把MyISAM数据引擎改成InnoDB就可以了。

基于数据导入导出的迁移

如果您的系统可以接受较长时间(比如一二个小时)因系统迁移导致的downtime,您可以用比较简单的数据库导出和导入的方式进行数据库的迁移。

具体步骤:

  1. 登录Azure管理门户,在MySQL Database on Azure上创建一个新的MySQL服务器并进行必要的配置比如每天的备份时间,具体步骤可以参考http://www.windowsazure.cn/documentation/articles/mysql-database-get-started#step1
  2. 通过Azure管理门户在新创建的MySQL服务器上创建要迁移的目标数据库。具体步骤可以参考http://www.windowsazure.cn/documentation/articles/mysql-database-get-started#step4
  3. 如果有多个数据库账号需要访问原数据库,您需要通过Azure管理门户在新的数据库服务器上创建对应的账号。
  4. 如果数据库比较大(比如超过1GB),我们建议在同一个Azure数据中心准备一台VM这样可以先把数据传输到VM上然后再导入到DB里。
  5. 在Azure上完成应用的除了数据库之外的组件的部署(比如website)。
  6. 所有准备工作做好后,现在开始迁移。首先建议把应用关停或运行在只读模式(如果支持),这样以避免迁移过程中有新的数据。
  7. 从当前数据库服务器导出应用数据库到一个文件。您可以用您熟悉的工具比如mysqldump,workbench,等等。下面是用mysqldump导出数据库的例子: >mysqldump --databases <数据库名> --single-transaction --order-by-primary -r <备份文件名> --routines -h<服务器地址> -P<端口号> –u<用户名> -p<密码>
  8. 如果数据文件比较大,建议先把数据文件传输到Azure上的一台VM上(应在同一个数据中心),您可以用您熟悉的数据传输工具(比如FTP或AzCopy等),这样可以避免因网络连接中断导致整个数据传输过程失败。如果备份文件很大,可以压缩后上传。
  9. 把数据库数据导入到目标数据库中。您可以用您熟悉的工具比如mysql.exe,workbench,等等。下面是用mysql.exe导入数据库的例子

8.1 在您的客户端通过mysql.exe连接新创建的MySQL服务器 (注意:如果您不是从Azure的VM上导入数据您需要把客户端加入IP白名单中):

>mysql -h<服务器地址> -P<端口号> –u<用户名> -p<密码>                                                                                                                                          

           8.2 从SQL命令行导入数据:

           >source <备份文件名>;

       10. 把新部署的应用指向迁移好的数据库上,并完成剩余的应用迁移的步骤。

基于数据同步的迁移

上面的数据库迁移方式比较简单,但缺点是会有较长时间的downtime,同时每一个迁移步骤要能够很熟练的完成并能很好地预期时间,否则会对您的业务连续性带来较大的影响。如果您不能接受迁移过程中有较长时间的downtime, 比如是公司的网站,或者希望分阶段完成平滑的迁移,建议您用数据库同步的方式把当前的生产数据库同步到Azure上,MySQL Database on Azure提供了这个功能,在同步期间您的应用和当前的数据库可以继续工作不受影响。

建议的迁移步骤:

  1. 同步数据库到MySQL Database on Azure,您可以把运行在MySQL Database on Azure上的数据库服务器配置为从服务器。具体配置和同步数据库的步骤请参考如何配置数据同步复制到MySQL Database on Azure。注意:您会需要打开当前的数据库服务器的外部访问,我们强烈建议您配置SSL并只允许外部通过SSL访问。
  2. 在Azure上部署新的应用并指向新建的Azure上的数据库。注意:此时由于Azure上的数据库运行在只读模式,应用的功能可能受限。
  3. 确认Azure上的从数据库已达到同步的状态。您可以根据复制页面上的复制状态和复制滞后来确认同步状态。

4. 关停老的应用或者让应用运行在只读模式(如果支持只读模式)。

5. 停止数据库同步复制。您只需在下面的页面上点击“禁用”然后保存就可以。

注意:这个操作会重启数据库服务器。

6. 启用新的应用。

常见问题

  1. 导入TRIGGER, PROCEDURE, VIEW, FUNCTION, 或EVENT过程中报”Access denied; you need (at least one of) the SUPER privilege(s) for this operation” 错误。                                                                                      
                 检查报错的语句有否使用DEFINER并使用非当前用户,比如DEFINER=`user`@`host`, 如果这样的话MySQL是要求SUPER权限来执行该语句,由于MySQL Database on Azure不提供用户SUPER权限(参考http://www.windowsazure.cn/documentation/articles/mysql-database-operation-limitation
    ),导致运行该语句失败。您只需要把DEFINER从该语句删掉而使用缺省的当前用户就可以了。
  2. MYSQL Database on Azure 的管理门户只支持对用户设置整个数据库的读写权限,如果我现在的数据库有对用户权限更细化的设          置,迁移会成功吗?                                                                                                                         没有问题,虽然我们的管理门户 以及PowerShell
    /REST API在创建用户或数据库时只支持对整个数据库设置读写权限,但您可以用“grant”语句对用户权限进行更细化的设置。

小结

您可以看到MySQL Database on Azure支持基于数据库导出导入的迁移和基于数据库同步的迁移,用户可以根据应用的特点和业务的要求选择合适的迁移方式。另一点您可以看到这些迁移方式基本上也是MySQL用户已经熟悉了的,而这也是我们研发MySQL Database on Azure的一个基本出发点。

迁移应用数据库到MySQL Database on Azure的更多相关文章

  1. MySQL Database on Azure - 利用PowerShell快速创建使用数据库服务

    如果您的应用需要通过脚本快速创建一个或多个MySQL数据库,MySQL Database on Azure目前开放了对于PowerShell的支持,可以帮助您快速利用自动化脚本进行数据库服务的创建.管 ...

  2. MySQL Database on Azure

    在国际版的Microsoft Azure上,MySQL服务是与ClearDB合作运营的.由于ClearDB无法在中国地区提供服务,因此微软中国的研发团队开发了专门面向中国市场的MySQL Databa ...

  3. Windows Azure® 由世纪互联运营发布MySQL Database on Azure正式商用版

    我们很高兴宣布MySQL Database on Azure于2015年9月1日在中国地区正式商用.回望过去,从2014年12月对少量用户开放的预览试用,到2015年4月30日对中国用户全面开放的公共 ...

  4. MySQL Database on Azure服务在中国正式商用

    基于由世纪互联运营的Windows Azure平台,MySQL Database on Azure服务助力中国用户实现数据库在云端的快速部署.推进用户的创新开发 2015年9月10日,北京——微软中国 ...

  5. MySQL Database on Azure新功能

    本月中国版的MySQL Database on Azure发布了两项新功能: 1.主从复制——只读实例 在这之前Azure上的MySQL数据库也是支持主从复制的,但是只能作为on-premises部署 ...

  6. MySQL Database on Azure 参数设置

    在使用MySQL过程中,经常会根据需要对MySQL的参数进行一些设置和调整.作为PaaS版本的MySQL,MySQL Database on Azure在参数设置方面有一些限制,客户不能像使用on-p ...

  7. MySQL Database on Azure 支持 5.7 版本啦!

    MySQL Database on Azure 目前已经全面开放对 5.7 的支持.您可以通过管理门户,在 MySQL 数据库服务器创建时选择 5.7 版本进行体验.MySQL 5.7 版本目前是 M ...

  8. MySQL Database on Azure 的用户名

    MySQL Database on Azure是中国版Windows Azure上的一个PaaS服务,类似于AWS上的RDS.MySQL Database on Azure的用户名与on-premis ...

  9. 用kettle实现数据库迁移之oracle到mysql

    项目完成后,需要把历史oracle 的数据库转移mysql 用kettle 转换数据. 步骤: 1.打开spoon.bat,文件-->新建-->转换,点击“主对象树”,DB连接右键“新建” ...

随机推荐

  1. uva 11374

    Problem D: Airport Express In a small city called Iokh, a train service, Airport-Express, takes resi ...

  2. ExtJs之文本框及数字输入

    结合HTML来理解, 比较容易. <!DOCTYPE html> <html> <head> <title>ExtJs</title> &l ...

  3. hdu 4759 Poker Shuffle 二进制

    思路:主要是二进制的运用. 为了方便从0开始,首先看下右移一下,高位异或1的规律:(可以从右往左一列一列看) 000(0) -> 100(4) -> 110(6) -> 111(7) ...

  4. Servlet3.0-使用注解定义Servlet

    我使用的开发环境:MyEclipse10+Tomcat7+JDK6. 开发Servlet3的程序需要一定的环境支持.Servlet3是Java EE6规范的一部分,MyEclipse10和Tomcat ...

  5. 负载均衡之Haproxy配置详解(及httpd配置)

    下图描述了使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1.web2.web3.img1.img2.但是由于haproxy会存在单点故障问题,因此使 ...

  6. JLINK固件丢失或升级固件后提示Clone的解决办法

    J-LINK V8固件烧录指导 J-LINK 是使用过程中,如果内部固件意外损坏或丢失,请参考下面操作步骤说明,重新烧录JLINK固件. 安装固件烧录软件 请ATMEL官方网址下载AT91-ISP下载 ...

  7. Struts2笔记——struts常用标签

    使用struts标签前,首先要配置struts2架构,然后导入标签库,jsp插入如下语句: <%@taglib uri="/struts-tags" prefix=" ...

  8. C#之你懂得的反射

    前言:反射在C#中虽然不常用(如果不需要动态加载xx.dll),但是有时候却是设计某个程序或者完成某类功能比较好用的技术.比如:一个支持动态扩展的程序,这样就需要动态加载dll,动态创建加载dll的程 ...

  9. C# windows 服务编写及安装

      最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作不成功,可能是开发环境或项目配置的不同,这里 ...

  10. C#AutoResetEvent和ManualResetEvent的区别

    一:终止状态和非终止状态 首先说说线程的终止状态和非终止状态.AutoResetEvent和ManualResetEvent的构造函数中,都有bool变量来指明线程的终止状态和非终止状态.true表示 ...