从一个数据库复制表格到另一个数据库的最简单方法是什么?

216

当两个数据库在不同用户下,从一个数据库中的表复制数据到另一个数据库中的表的最佳方法是什么?

我知道可以使用

INSERT INTO database2.table2 SELECT * from database1.table1

但是这里的问题在于database1database2都属于不同的MySQL用户。因此,user1仅能访问database1,而user2仅能访问database2。有什么想法吗?


6
您可以向用户授予表级别的权限。请参见:http://dev.mysql.com/doc/refman/5.5/en/grant.html - Omesh
2
很不幸,这对我来说行不通,因为我正在使用Godaddy共享主机服务器。他们不允许在数据库中进行这样的操作。 - Sparky
@mmdemirbas 数据库中的一个表几乎有100万行记录。数据库转储文件将非常大。当我尝试导出数据时,只有大约10,000行被成功导出 - 可能是因为数据量太大的缘故。 - Sparky
我知道你可以使用RENAME来移动表格,而且速度非常快。是否有相应的技巧来复制表格? - Dan
顺便提一下:您需要确保字段列表在两个表中的顺序相同。否则,将需要按名称从database1中选择字段,以便它们映射到database2中的正确字段。我遇到了这个问题,因为我备份了一个数据库,在初始创建后修改了table1,并且新的数据库是从mysqldump文件创建的。 - Steve L
20个回答

146

创建表 db1.table1 并从 db2.table1 中选择所有数据

其中db1为目标数据库,db2为源数据库。


如果这两个用户没有权限从彼此选择数据,那么这是否有效? - Beryllium
3
这在不同的 MySQL 服务器上行不通吗? - PUG
16
这不会复制索引。 - bcoughlan
9
复制的表格没有设置主键和自增属性。您需要在运行以下命令后进行修改:ALTER TABLE db1.table1 ADD PRIMARY KEY (id); ALTER TABLE db1.table1 MODIFY COLUMN id INT AUTO_INCREMENT; - Weston Ganger
5
要复制索引和对象,可以使用以下命令:create table db1.table1 like db2.table1 - Yehia
显示剩余5条评论

136

如果你可以使用 shell 访问,你可以使用 mysqldump 导出 database1.table1 的内容,并将其传输到 mysql 中的 database2。问题在于,table1 仍然是 table1

mysqldump --user=user1 --password=password1 database1 table1 \
| mysql --user=user2 --password=password2 database2

也许你需要使用另一个查询将table1重命名为table2。或者你可以使用sed在两个竖杠之间将table1更改为table2。

mysqldump --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2

如果table2已经存在,你可以将参数添加到第一个mysqldump中,以防止创建表。

mysqldump --no-create-info --no-create-db --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2

这个问题在于当它被自动化时,你必须显示密码。如果不是自动化的,并且由用户从命令行执行,则没问题。 - Michael Nelles
@Nelles 你可以使用任何级联用户选项文件来存储用户和密码信息,通常是本地的 ~/.my.cnf 文件,以避免在命令本身中透露这些值。请参阅 https://dev.mysql.com/doc/refman/8.0/en/option-files.html。 - Leo Galleguillos

76

如果您正在使用 PHPMyAdmin,那么这可能非常简单。 假设您有以下数据库:

DB1 & DB2

您希望将DB1中的users表复制到DB2。

在PHPMyAdmin中打开DB1,然后进入users表。

在该页面上,点击右上角的"操作"选项卡。 在“操作”下面,找到复制表到(数据库.表):部分。

& 就这样完成了!


2
超级简单!这时我可以庆祝我的懒惰! - Dut A.
1
你节省了我的时间。我一开始采用了幼稚的方法,先导出再导入。 - Hamza Zafeer
1
完美的答案。不知道phpmyadmin有这个功能。 - zookastos
1
很棒的信息。流畅。 - neophyte
1
当我遇到外键约束时,我该如何处理这个操作?我能否以某种方式编辑查询? - Christia
显示剩余5条评论

30

我使用 Navicat for MySQL...

它使得所有的数据库操作变得简单易行!

你只需要在 Navicat 中选择这两个数据库,然后使用即可。

 INSERT INTO Database2.Table1 SELECT * from Database1.Table1

在 SequelPro 上使用,完美运行。谢谢。 - McRui

30

对我来说它运作良好。

CREATE TABLE dbto.table_name like dbfrom.table_name;
insert into  dbto.table_name select * from dbfrom.table_name;

29

MySql工作台:强烈推荐使用

从MySql工作台进行数据库迁移的工具

它可以轻松处理迁移问题,您可以在MySQL和SQL Server之间迁移所选数据库的所选表格。强烈建议您尝试一下。


我即将尝试这个,已经设置好了,但我想知道你是否比较过 mysql Workbench 迁移和 SQLYog 的数据库复制?从我快速查看的情况来看,它们非常相似,但 mysql workbench 是一个更新的特性。 - wired00
不,我没有尝试过SQLYog。 - mmdemirbas
使用MySQL Workbench迁移到SQL Server并不明显。我在Workbench中查找帮助或UI时没有发现任何线索。但我知道MySQL的SSMA适用于我。 - subsci
2
有趣的是,但在迁移大型数据库时,命令行效果最佳。 - calraiden
1
@mmdemirbas,"您可以在MySQL和SqlServer之间迁移所选数据库的所选表格。" 但是,OP的问题并不涉及SQL Server。 - user82216
2
我的意思是,这个工具支持MySQL到MySQL的迁移,就像OP所问的那样,同时也支持MySQL到SQLServer、SQLServer到MySQL、SQLServer到SQLServer的迁移。我想要明确地告诉其他人,如果他们在寻找类似的解决方案来用于其他方面,这个工具也可以胜任。 - mmdemirbas

14
如果您的表位于同一台MySQL服务器上,您可以运行以下命令:

如果您的表位于同一台mysql服务器上,您可以运行以下命令

CREATE TABLE destination_db.my_table SELECT * FROM source_db.my_table;
ALTER TABLE destination_db.my_table ADD PRIMARY KEY (id); 
ALTER TABLE destination_db.my_table MODIFY COLUMN id INT AUTO_INCREMENT;

1
其他索引怎么办?!问题要求复制一个表,不仅仅是它的数据。 - Jorj

13

这里有另一种简单的方法:

  1. 使用 DB1 数据库,运行 show create table TB1 命令。
    • 复制命令行中的语法以在 DB2 中创建 TB1 表。
  2. 使用 DB2 数据库。
    • 粘贴刚才复制的语法以创建 TB1 表。

INSERT INTO DB2.TB1 SELECT * from DB1.TB1;


这帮助我自动复制数据库,而不必使用GUI程序,谢谢。 - Dwagner

12

3
不会复制数据!请阅读您引用的文档:> CREATE TABLE ... LIKE 不保留任何数据 - dgpro

8
使用MySql Workbench的导入和导出功能。 步骤:
1. 选择您想要的值。
E.g. select * from table1; 
  1. Click on the Export button and save it as CSV.
  2. create a new table using similar columns as the first one

    E.g. create table table2 like table1; 
    
  3. select all from the new table

    E.g. select * from table2;  
    
  4. Click on Import and select the CSV file you exported in step 2

Sample of the Export and Import buttons in MySql Workbench


1
我认为它仅适用于行数不超过十亿的表格。 - KodornaRocks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接