当数据库属于不同的用户时,将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么?
我知道我可以用
INSERT INTO database2.table2 SELECT * from database1.table1
但这里的问题是database1和database2都在不同的MySQL用户下。所以user1只能访问database1, user2只能访问database2。任何想法?
当数据库属于不同的用户时,将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么?
我知道我可以用
INSERT INTO database2.table2 SELECT * from database1.table1
但这里的问题是database1和database2都在不同的MySQL用户下。所以user1只能访问database1, user2只能访问database2。任何想法?
当前回答
MySql工作台:强烈推荐
这将很容易处理迁移问题。支持在MySql和SqlServer之间迁移指定数据库的指定表。你绝对应该试一试。
其他回答
如果你有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
对于我来说,我需要指定模式为“information_schema”。表”
为例。
SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'old_db';
我知道这是一个老问题,只是回答,以便任何人降落在这里得到更好的方法。
从5.6.10开始你就可以做到
CREATE TABLE new_tbl LIKE orig_tbl;
参考文档:https://dev.mysql.com/doc/refman/5.7/en/create-table-like.html
这对我很有效
CREATE TABLE dbto.table_name like dbfrom.table_name;
insert into dbto.table_name select * from dbfrom.table_name;
尝试mysqldbcopy(文档)
或者可以在目标主机上创建“联邦表”。联邦表允许您查看来自不同数据库服务器的表,就像它是本地表一样。(文档)
创建联邦表之后,可以使用通常的insert从SOURCE将数据复制到TARGET select *中