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

我知道我可以用

INSERT INTO database2.table2 SELECT * from database1.table1

但这里的问题是database1和database2都在不同的MySQL用户下。所以user1只能访问database1, user2只能访问database2。任何想法?


当前回答

如果你有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已经存在,你可以在第一个mysqldump中添加参数,它不允许创建table- created。

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

其他回答

创建表db1。SELECT * FROM db2.table1

哪里db1是目标,db2是源

MySql工作台:强烈推荐

这将很容易处理迁移问题。支持在MySql和SqlServer之间迁移指定数据库的指定表。你绝对应该试一试。

获得所需的所有查询的一种简单方法是使用来自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视图一起工作。你可以通过在初始查询中附加AND TABLE_TYPE = 'BASE TABLE'来避免它们:

对于我来说,我需要指定模式为“information_schema”。表”

为例。

SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM information_schema.TABLES  WHERE TABLE_SCHEMA = 'old_db';

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

E.g. select * from table1; 

单击Export按钮并将其保存为CSV。 使用与第一个表相似的列创建一个新表 例如,创建表table2像table1; 从新表中选择所有选项 例如:select * from table2; 单击Import并选择在步骤2中导出的CSV文件