将表从一个数据库复制到另一个数据库的最简单方法?

Spa*_*rky 136 mysql database

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

我知道我可以用

INSERT INTO database2.table2 SELECT * from database1.table1
Run Code Online (Sandbox Code Playgroud)

但这里的问题是,无论是database1database2是在不同的MySQL用户.所以user1只能访问,database1只能user2访问database2.任何的想法?

小智 100

如果您具有shell访问权限,则可以使用它mysqldump来转储内容database1.table1并将其传递mysqldatabase2.这里的问题table1仍然存在table1.

mysqldump --user=user1 --password=password1 database1 table1 \
| mysql --user=user2 --password=password2 database2
Run Code Online (Sandbox Code Playgroud)

也许你需要重命名table1table2另一个查询.另一方面,您可以使用sed在to管道之间将table1更改为table2.

mysqldump --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2
Run Code Online (Sandbox Code Playgroud)

如果table2已经存在,您可以将参数添加到第一个不创建table-created的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
Run Code Online (Sandbox Code Playgroud)


小智 90

CREATE TABLE db1.table1 SELECT * FROM db2.table1

其中db1是目标,db2是源

  • 这不会复制索引 (8认同)
  • 要复制索引和对象,您可以使用“create table db1.table1 like db2.table1” (5认同)
  • 复制的表没有主键和自动增量设置.你必须在`ALTER TABLE db1.table1 ADD PRIMARY KEY(id)之后运行它; ALTER TABLE db1.table1 MODIFY COLUMN id INT AUTO_INCREMENT;` (4认同)
  • 这不会在不同的 mysql 服务器上工作吗? (3认同)

Mek*_*ria 51

如果您使用的是PHPMyAdmin,那可能非常简单.假设您有以下数据库:

DB1 & DB2
Run Code Online (Sandbox Code Playgroud)

DB1有一个表用户,您希望将其复制到DB2

在PHPMyAdmin下,打开DB1,然后转到users表.

在此页面上,单击右上角的"操作"选项卡.在"操作"下,查找" 将表复制到(database.table)"部分:

你完成了!

  • 我多年来一直在使用PHPMyAdmin ....并且不知道这个.谢谢! (3认同)
  • 简单死了!这是我可以庆祝懒惰的时候! (2认同)

mmd*_*bas 23

MySql Workbench:强烈推荐

数据库迁移工具来自MySql Workbench

这将很容易解决迁移问题.您可以在MySql和SqlServer之间迁移所选数据库的选定表.你应该试一试.

  • 有意思,但程序抓住了用大型数据库进行迁移,命令行效果最好. (2认同)
  • 我的意思是这个工具支持OP要求的MySQL到MySQL的迁移,并且还支持MySQL到SQLServer、SQLServer到MySQL、SQLServer到SQLServer的迁移。我想让其他人明确地寻找类似的解决方案以其他方式使用。 (2认同)

小智 19

我使用Navicat for MySQL ......

它使所有数据库操作变得容易!

您只需在Navicat中选择两个数据库,然后使用.

 INSERT INTO Database2.Table1 SELECT * from Database1.Table1
Run Code Online (Sandbox Code Playgroud)


bin*_*iam 9

使用MySql Workbench的导出和导入功能.步骤:
1.选择所需的值

E.g. select * from table1; 
Run Code Online (Sandbox Code Playgroud)
  1. 单击"导出"按钮并将其另存为CSV.
  2. 使用与第一列类似的列创建新表

    E.g. create table table2 like table1; 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从新表中选择全部

    E.g. select * from table2;  
    
    Run Code Online (Sandbox Code Playgroud)
  4. 单击"导入",然后选择在步骤2中导出的CSV文件

MySql Workbench中导出和导入按钮的示例


Mir*_*nan 9

我知道这是一个古老的问题,只需回答,以便任何落在这里的人都能获得更好的方法.

从5.6.10开始,你可以做到

CREATE TABLE new_tbl LIKE orig_tbl;
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档:https://dev.mysql.com/doc/refman/5.7/en/create-table-like.html

  • 它不会复制数据!阅读您参考的文档:> **CREATE TABLE ... LIKE 不保留任何数据 ** (2认同)

小智 8

这对我很有用

CREATE TABLE dbto.table_name like dbfrom.table_name;
insert into  dbto.table_name select * from dbfrom.table_name;
Run Code Online (Sandbox Code Playgroud)


Wes*_*ger 7

如果您的表位于同一个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;
Run Code Online (Sandbox Code Playgroud)


小智 7

这是另一种简单的方法:

  1. 使用DB1; show create table TB1;
    • 在剪贴板中复制语法以在DB2中创建TB1
  2. 使用DB2;
    • 将语法粘贴到此处以创建表TB1

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


Sep*_*ter 2

这是您需要经常做的事情,还是只是偶尔做的事情?

您可以进行导出(例如使用 phpMyAdmin 或类似的),将您的表及其内容编写到文本文件中,然后您可以将其重新导入到其他数据库中。