【问题标题】:How to clone MySQL database under a different name with the same name and the same tables and rows/content using SQL query如何使用 SQL 查询克隆具有相同名称和相同表和行/内容的不同名称的 MySQL 数据库
【发布时间】:2013-02-13 04:22:10
【问题描述】:

我知道如何克隆表,例如:

CREATE TABLE recipes_new LIKE production.recipes; 
INSERT recipes_new 
SELECT * FROM production.recipes;

但我不知道如何克隆例如database_olddatabase_new 数据库,其中包含 database_old 中的所有表和行。

所以,只有数据库的名称会改变。其他一切都保持不变。

现在我通过在 phpmyadmin ad 中导出数据库然后创建一个新数据库并将其导入新数据库来克隆它。

但我想必须有一种更有效的方法来通过 SQL 查询来完成这项任务,比如克隆表。

重要!它需要从 phpmyadmin 中的 SQL 查询窗口完成,而不是从 shell 命令行完成。

提前感谢您建议如何做到这一点。

【问题讨论】:

标签: mysql sql


【解决方案1】:

您是否尝试过使用MySQL Dump

$ mysqldump yourFirstDatabase -u user -ppassword > yourDatabase.sql
$ echo "create database yourSecondDatabase" | mysql -u user -ppassword
$ mysql yourSecondDatabase -u user -ppassword < yourDatabase.sql

【讨论】:

  • 你能告诉我如果我的用户名为 root 并且在我的本地主机上没有密码会是什么样子吗?
  • 它将在 phpmyadmin 的 SQL 查询窗口中工作还是仅在命令行上工作?
  • 是的,我在 Windows 上。命令行是唯一的可能性吗? phpmyadmin 中的 SQL 查询命令呢?可以这样吗?
  • 使用cmd.exe进入MySQL目录,进入bin然后执行上面的命令。
  • 您的示例不考虑 sql 文件中的重复名称。对吗?
【解决方案2】:

重要!它需要从 phpmyadmin 中的 SQL 查询窗口完成,而不是从 shell 命令行完成。

首先创建一个空白数据库:

 CREATE DATABASE `destination` DEFAULT CHARACTER SET 
    latin1 COLLATE latin1_swedish_ci;

然后使用命令show tables;

 show source.tables;

然后为每个数据库表(优化创建表和插入行)运行命令为:

 create table destination.table select * from source.table;

其他方式是使用like命令:

  create table destination.table like source.table

然后插入行;

  insert into destination.table select * from source.table

【讨论】:

  • 谢谢,我会试试这个解决方案,让你知道它是否有效。这一切都在 phpmyadmin 的 SQL 查询窗口中吗?
  • 是的,它是所有的 sql 窗口,如果你知道函数,你也可以使用函数来实现,但我不喜欢 sql 用户函数
  • 这部分有问题:show 2012_myolddatabase.tables;创建表 2013_mynewdatabase.table 从 2012_myolddatabase.table 中选择 *;它表明 2013_mynewdatabase.table 是磨损的声明或其他东西。任何建议如何解决它?我猜想“链接”有问题,这可能在 SQL 中吗?
  • .table 表示要复制的 .table_name
  • 好的,现在看起来像这样:创建数据库2013_new_db字符集utf8整理utf8_general_ci;显示2012_old_db;创建表2013_new_db SELECT * FROM 2012_old_db;它会抛出错误:“SQL 错误 (1064) bla bla check the right syntax to use near 2012_old_db at line 1” 知道有什么问题吗?
【解决方案3】:

如果 phpMyAdmin 可用于数据库,您可以按照以下步骤克隆它:

  1. 选择所需的数据库
  2. 点击操作标签
  3. 在操作选项卡中,转到“复制数据库”-选项并在输入字段中输入所需的克隆数据库名称
  4. 选择“结构和数据”(取决于您的要求)
  5. 选中复选框,“复制前创建数据库”“添加 AUTO_INCREMENT 值”
  6. 点击“开始”

用 phpMyAdmin 4.2.13.3 测试

【讨论】:

  • 这个问题非常接近 OP 的要求(使用 phpMyAdmin),但它不使用 phpMyAdmin 的 SQL 查询窗口。尽管如此,这是一个非常有用的答案,所以我投了赞成票,我认为这个问题很糟糕,因为添加了一个约束,使解决方案比需要的更复杂。
【解决方案4】:
  1. 使用 phpmyadmin (export.sql) 导出您选择的数据库
  2. 使用终端/cmd 导入: mysql -u 用户名 -p 数据库名

喝杯咖啡……

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2012-08-03
    • 2021-08-02
    • 1970-01-01
    • 2019-07-26
    • 2018-11-15
    相关资源
    最近更新 更多