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

我知道我可以用

INSERT INTO database2.table2 SELECT * from database1.table1

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


当前回答

像sakila.customer(Database_name.tablename)一样创建表destination_customer,这只会复制源表的结构,对于数据也要复制结构,这样创建表destination_customer作为select * from sakila.customer

其他回答

如果你有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;创建表TB1 复制剪贴板中的语法,在DB2中创建TB1 使用DB2; 将语法粘贴到这里以创建表TB1

插入到db2。SELECT * from DB1.TB1;

创建表db1。SELECT * FROM db2.table1

哪里db1是目标,db2是源

这是你需要定期做的事情,还是只做一次?

你可以做一个导出(例如使用phpMyAdmin或类似),将脚本出你的表和它的内容到一个文本文件,然后你可以重新导入到另一个数据库。

首先创建转储。如果table2已经存在,添加——no-create-info——no-create-db标志:

mysqldump -u user1 -p database1 table1 > dump.sql

输入user1密码。然后:

sed -e 's/`table1`/`table2`/' dump.sql
mysql -u user2 -p database2 < dump.sql

输入user2密码。

与helmor的答案相同,但这种方法更安全,因为密码不会以原始文本的形式暴露在控制台(反向搜索,密码嗅探器等)。如果从脚本文件执行,并对其权限设置了适当的限制,则其他方法也可以。