【发布时间】:2012-09-10 10:23:53
【问题描述】:
我目前正在开发一个带有 MySQL 后端的 Windows 应用程序。 现在我想将旧的数据库结构和数据复制到新的数据库服务器。
如何使用 MySQL 工作台解决这个问题?
谢谢!
【问题讨论】:
-
我尝试使用 SQL YOG 试用版,但它没有完全复制行
标签: mysql mysql-workbench
我目前正在开发一个带有 MySQL 后端的 Windows 应用程序。 现在我想将旧的数据库结构和数据复制到新的数据库服务器。
如何使用 MySQL 工作台解决这个问题?
谢谢!
【问题讨论】:
标签: mysql mysql-workbench
如果您的两个 mysql 服务器都在 linux 环境中运行(即使您的应用程序是用于 Windows 的,这种情况也很有可能),最可靠和最快速的复制数据库的方法是在一个我们复制到的服务器:
ssh -p <ssh port (usually 22)> host.from.where.we.copy "mysqldump -u my.sql.username.on.from.host -p\"mysql.password (might require some escaping-magic in case you got special characters in there)\" -F -f --databases name.of.database.we.copy | grep -vE \"^(USE|CREATE DATABASE)\" | bzip2 -c -" </dev/null > /tmp/name.of.database.we.copy.sql.bz2; bzip2 -dc /tmp/name.of.database.we.copy.sql.bz2 | mysql -u mysql.username.on.host.we.copy.to -p'mysql.password' new.database.name
例如:
ssh -p 22 example.com "mysqldump -u root -p\"12345\" -F -f --databases mycooldb | grep -vE \"^(USE|CREATE DATABASE)\" | bzip2 -c -" </dev/null > /tmp/mycooldb.sql.bz2; bzip2 -dc /tmp/mycooldb.sql.bz2 | mysql -u someotheruser -p'54321' mynewcooldbcopy
这将在我们复制的主机上进行转储,用 bz2 压缩它,将文件传输到新服务器并将数据库部署到另一个用户(如果需要)并命名
【讨论】:
使用 MySQL Workbench [迁移向导]
要直接将数据库从一台服务器复制到另一台服务器(甚至是本地服务器)而不创建中间导出/转储文件,您可以在 MySQL Workbench 中使用其Migration Wizard 执行此操作。转到Database --> Migration Wizard。
如果您之前已将源连接和目标连接保存到您的连接列表中,您可以从那里选择它们,或者您可以动态创建一个新连接(请务必选中复选框,将其添加到您的连接列表中)。
您还将选择数据库类型,或者选择它们的通用版本(不记得它叫什么)并让它弄清楚您拥有什么样的数据库服务器。通常,您可以为 MySQL 或 MariaDB 数据库选择 MySQL,因为 MariaDB 通常被设计为 MySQL 的“二进制替代品”。
当它要求您选择哪些数据库时,我的理解是INFORMATION_SCHEMA 是只读的,不应选择。否则,除非您有特定需求,否则可能会选择所有其他表,例如,如果您要克隆服务器(可能还有其相关网站)。
从那里您可以让 MySQL Workbench 完成它的工作。在将架构从旧服务器逆向工程到新服务器的过程中继续单击下一步,直到最终将数据复制过来。
在继续之前,您可以在很多地方进行更改。您还可以选择查看在此过程中记录的潜在问题和警告。
完成后,您仍需要为克隆的数据库添加用户(手动?)。可能还有一种自动化方法可以克隆用户表,但我不知道。如果没有别的,您可以从命令行执行此操作。由于我将其用于本地开发人员,因此无论如何我只能自己添加。
我不确定使用此工具是否比以通常方式导出和导入数据库更快。但这肯定更容易。
该工具实际上是为不同类型的数据库(例如 PostgressSQL 和 MySQL)之间更复杂的迁移而设计的,而不是作为通用工具,例如,将实时数据库的副本检索到本地开发服务器,反之亦然。
在同一菜单下,有Database -> Schema Transfer Wizard,据我了解,当您需要更新到新的服务器版本时使用它。我不清楚这两种工具之间的区别,或者它们的实际用例。
关于如何进行标准导入/导出操作的说明,在 MySQL 工作台中,文档是 SQL Data Export and Import Wizard 和 Table Data Export and Import Wizard。
如果可以直接在开发服务器和实时服务器之间导入/导出,只需选择连接,而不是保存然后读取转储文件,那就太棒了。
我认为它可以通过命令行完成。
【讨论】:
直接复制数据库,不用先导出导入,可以使用MySQL Utilities命令mysqdbcopy:
mysqldbcopy --source=root:root@localhost --destination=root:root@localhost world:world_clone
您可以在 Windows cmd 或 MySQL 实用程序控制台 中运行该命令。
【讨论】:
如果你安装了phpmyadmin,你可以使用以下步骤:
a) 在导出方法中,选择“自定义 - 显示所有可能的选项”
b) 在“格式特定选项”中,确保选择“结构和数据”。
c) 在“对象创建选项”中,确保“ADD CREATE DATABASE / USE statement”也被标记。
导出 SQL 文件。
scp从源服务器导出到目标服务器的文件
在目标服务器的phpmyadmin中,使用“Import”功能,将SQL文件导入数据库。在导入过程中无需选择自定义选项。
【讨论】:
这是只有 MySQL Workbech 的方式,有时你还没有安装在新服务器上,比如在开发到生产的场景中,这样你应该执行 mysqlimport 实用程序。
【讨论】: