[英]How to copy the whole database to another server database?
我目前正在开发一个带有 MySQL 后端的 Windows 应用程序。 现在我想将旧的数据库结构和数据复制到新的数据库服务器。
如何使用 MySQL Workbench 解决此问题?
谢谢!
这是只有 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 cmd
或MySQL Utilities Console 中运行该命令。
如果您安装了phpmyadmin ,则可以使用以下步骤:
a) 在导出方法中,选择“自定义 - 显示所有可能的选项”
b) 在“格式特定选项”中,确保选择“结构和数据”。
c) 在“对象创建选项”中,确保“ ADD CREATE DATABASE/USE 语句”也被标记。
导出 SQL 文件。
scp从源服务器导出的文件到目标服务器
在目标服务器的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.