【问题标题】:How to copy the whole database to another server database?如何将整个数据库复制到另一个服务器数据库?
【发布时间】:2012-09-10 10:23:53
【问题描述】:

我目前正在开发一个带有 MySQL 后端的 Windows 应用程序。 现在我想将旧的数据库结构和数据复制到新的数据库服务器。

如何使用 MySQL 工作台解决这个问题?

谢谢!

【问题讨论】:

  • 我尝试使用 SQL YOG 试用版,但它没有完全复制行

标签: mysql mysql-workbench


【解决方案1】:

如果您的两个 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 压缩它,将文件传输到新服务器并将数据库部署到另一个用户(如果需要)并命名

【讨论】:

    【解决方案2】:

    使用 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。

    如果可以直接在开发服务器和实时服务器之间导入/导出,只需选择连接,而不是保存然后读取转储文件,那就太棒了。
    我认为它可以通过命令行完成。

    【讨论】:

    【解决方案3】:

    直接复制数据库,不用先导出导入,可以使用MySQL Utilities命令mysqdbcopy:

    mysqldbcopy --source=root:root@localhost --destination=root:root@localhost world:world_clone
    

    您可以在 Windows cmd 或 MySQL 实用程序控制台 中运行该命令。

    【讨论】:

    【解决方案4】:

    如果你安装了phpmyadmin,你可以使用以下步骤:

    1. 在源服务器的phpmyadmin中,使用“Export”功能,确保

    a) 在导出方法中,选择“自定义 - 显示所有可能的选项”

    b) 在“格式特定选项”中,确保选择“结构和数据”。

    c) 在“对象创建选项”中,确保“ADD CREATE DATABASE / USE statement”也被标记。

    导出 SQL 文件。

    1. scp从源服务器导出到目标服务器的文件

    2. 在目标服务器的phpmyadmin中,使用“Import”功能,将SQL文件导入数据库。在导入过程中无需选择自定义选项。

    【讨论】:

    • 与问题 MySQL Workbench 无关,但如果已安装仍然是一个有用的选项
    【解决方案5】:
    1. 打开 MySQL 工作台
    2. 创建旧服务器的连接(如果还没有)
    3. 创建新服务器的连接(如果还没有)
    4. 转到服务器管理并单击管理导入/导出
    5. 选择旧服务器
    6. 在“导出到磁盘”选项卡中选择所有架构
    7. 在选项中选择导出到独立文件,等待完成
    8. 返回服务器管理并单击管理导入/导出
    9. 选择新服务器
    10. 切换到“从磁盘导入”
    11. 点击“从独立文件导入”

    这是只有 MySQL Workbech 的方式,有时你还没有安装在新服务器上,比如在开发到生产的场景中,这样你应该执行 mysqlimport 实用程序。

    【讨论】:

    • 导出到独立文件对我不起作用(我使用的是 Workbench 6.0)。幸运的是导出到转储项目文件夹工作正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多