繁体   English   中英

如何将整个数据库复制到另一个服务器数据库?

[英]How to copy the whole database to another server database?

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

如何使用 MySQL Workbench 解决此问题?

谢谢!

  1. 打开 MySQL 工作台
  2. 创建旧服务器的连接(如果还没有)
  3. 创建新服务器的连接(如果还没有)
  4. 转到服务器管理并单击管理导入/导出
  5. 选择旧服务器
  6. 在导出到磁盘选项卡中选择所有架构
  7. 在选项中选择导出到自包含文件,等到它完成
  8. 返回服务器管理并单击管理导入/导出
  9. 选择新服务器
  10. 切换到“从磁盘导入”
  11. 点击“从自包含文件导入

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

使用 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 数据导出和导入向导,以及表数据导出和导入向导

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

要直接复制数据库,无需先进行导出和导入,您可以使用MySQL Utilities命令mysqdbcopy

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

您可以在 Windows cmdMySQL Utilities Console 中运行该命令。

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

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

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

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

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

导出 SQL 文件。

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

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

如果您的两个 mysql 服务器都在 linux 环境中运行(即使您的应用程序是用于 windows 的,也很有可能发生这种情况),复制数据库的最可靠和快速的方法是在我们复制的服务器上运行此 oneliner到:

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 压缩它,将文件传输到新服务器并将 db 部署到另一个用户(如果需要)和名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM