当数据库位于不同用户下时,将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么?
我知道我可以使用
INSERT INTO database2.table2 SELECT * from database1.table1
但问题是database1
和database2
都在不同的MySQL用户之下。因此user1
只能访问database1
而user2
只能访问database2
。有什么想法吗?
答案 0 :(得分:91)
如果您有shell访问权限,则可以使用mysqldump
转储database1.table1
的内容,并将其封送至mysql
至database2
。这里的问题是table1
仍然是table1
。
mysqldump --user=user1 --password=password1 database1 table1 \
| mysql --user=user2 --password=password2 database2
也许您需要使用其他查询将table1
重命名为table2
。另一方面,您可以使用sed在to管道之间将table1更改为table2。
mysqldump --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2
如果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
答案 1 :(得分:83)
CREATE TABLE db1.table1 SELECT * FROM db2.table1
其中db1是目标,db2是源
答案 2 :(得分:45)
如果您使用的是 PHPMyAdmin, ,那可能非常简单。 假设您有以下数据库:
DB1 & DB2
DB1有一个您希望复制到DB2的表用户
在PHPMyAdmin下,打开DB1,然后转到users表。
在此页面上,点击右上角的"操作" 标签。 在“操作”下,查找将表复制到(database.table):
部分&安培;你完成了!
答案 3 :(得分:22)
答案 4 :(得分:17)
我使用Navicat for MySQL ......
它使所有数据库操作变得容易!
您只需在Navicat中选择两个数据库,然后使用。
INSERT INTO Database2.Table1 SELECT * from Database1.Table1
答案 5 :(得分:9)
使用MySql Workbench的导出和导入功能。
步骤:
1.选择所需的值
E.g. select * from table1;
使用与第一个相似的列创建新表
E.g. create table table2 like table1;
从新表中选择全部
E.g. select * from table2;
单击“导入”并选择在步骤2中导出的CSV文件
答案 6 :(得分:8)
我知道这是一个老问题,只是回答这个问题,所以任何落在这里的人都会有更好的方法。
从5.6.10开始,你可以做到
CREATE TABLE new_tbl LIKE orig_tbl;
请参阅此处的文档:https://dev.mysql.com/doc/refman/5.7/en/create-table-like.html
答案 7 :(得分: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;
答案 8 :(得分:6)
这是另一种简单的方法:
INSERT INTO DB2.TB1 SELECT * from DB1.TB1;
答案 9 :(得分:4)
尝试mysqldbcopy
(documentation)
或者您可以在目标主机上创建“federated table”。联合表允许您从不同的数据库服务器中查看表,就像它是本地表一样。 (documentation)
创建联合表后,您可以使用通常的insert into TARGET select * from SOURCE
答案 10 :(得分:4)
使用MySQL Workbench,您可以使用Data Export将表转储到本地SQL文件(仅数据,仅结构或结构和数据),然后使用数据导入将其加载到其他数据库中。
您可以同时打开多个连接(不同的主机,数据库,用户)。
答案 11 :(得分:3)
对我来说很好
@types/react
答案 12 :(得分:2)
首先创建转储。如果已经存在--no-create-info --no-create-db
,则添加table2
标志:
mysqldump -u user1 -p database1 table1 > dump.sql
然后输入user1
密码。然后:
sed -e 's/`table1`/`table2`/' dump.sql
mysql -u user2 -p database2 < dump.sql
然后输入user2
密码。
与@helmors答案相同,但是这种方法更加安全,因为密码不会以原始文本形式显示在控制台中(反向i搜索,密码嗅探器等)。如果从脚本文件中执行了适当的权限限制,则可以采用其他方法。
答案 13 :(得分:1)
IN xampp只需将所需的表导出为.sql文件,然后将其导入所需的
答案 14 :(得分:1)
这是你需要经常做的事情,还是只需一次性的事情?
您可以执行导出(例如使用phpMyAdmin或类似工具),将您的表及其内容编写为文本文件,然后您可以将其重新导入到其他数据库中。
答案 15 :(得分:1)
使用以下步骤将一些数据库表中的某些列复制并插入另一个数据库表 -
2.INSERT INTO db2.tablename SELECT columnname1,columnname2 FROM db1.tablename;
答案 16 :(得分:0)
获取所需查询的一种简单方法是使用来自information_schema和concat的数据。
SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM `TABLES` WHERE TABLE_SCHEMA = 'old_db';
然后您将获得如下结果列表:
CREATE TABLE new_db.articles LIKE old_db.articles;
CREATE TABLE new_db.categories LIKE old_db.categories;
CREATE TABLE new_db.users LIKE old_db.users;
...
然后您可以运行那些查询。
但是它不适用于MySQL Views。您可以通过在初始查询中附加AND TABLE_TYPE = 'BASE TABLE'
来避免它们:
答案 17 :(得分:0)
对我来说,我需要特定的架构到“information_schema.TABLES”
例如。
SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'old_db';
答案 18 :(得分:-1)
像sakila.customer (Database_name.tablename)一样创建表destination_customer,这只会复制源表的结构,对于数据也要复制到该结构中,请执行此操作 create table destination_customer作为sakila.customer中的* *
答案 19 :(得分:-11)
切换您的主机!!!!拥有如此庞大的数据库记录,您对Godaddy感到无所适从。在Godaddy服务器上,我的数据库中的条目(仍然约200MB +)比您少,而且我试图通过phpMyAdmin完全下载完整数据库的时间超过了一个小时。我尝试了所有表,一次只尝试了数据库的几个表,依此类推。下载被中断了很多次,直到一到两个小时,我终于设法获得了实际上大小相同的三个下载! Godaddy是目前最大的BS。
如果您想要专业的服务,请访问FastComet或A1Hosting或ppl实际上对他们在做什么和在谈论什么的想法。对于任何请求,Godaddy的支持都是愚蠢的,这是一个非常可悲的故事。
Hostadvice(搜索Google)会为您提供最好的托管人。我是通过使用他们的网站并通过与其中一位HostAdvisors聊天进行选择的,我并不后悔我决定全速参加比赛的想法:)
祝你好运!
@Moritz:-.-这不是广告,我不属于任何一家公司!!!他谈到了哥迪,而我也谈到了更好的帮助他!