当数据库属于不同的用户时,将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么?
我知道我可以用
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。任何想法?
当前回答
如果你有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
其他回答
尝试mysqldbcopy(文档)
或者可以在目标主机上创建“联邦表”。联邦表允许您查看来自不同数据库服务器的表,就像它是本地表一样。(文档)
创建联邦表之后,可以使用通常的insert从SOURCE将数据复制到TARGET select *中
如果你的表在同一个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;
使用MySql工作台的导出和导入功能。 步骤: 1. 选择所需的值
E.g. select * from table1;
单击Export按钮并将其保存为CSV。 使用与第一个表相似的列创建一个新表 例如,创建表table2像table1; 从新表中选择所有选项 例如:select * from table2; 单击Import并选择在步骤2中导出的CSV文件
IN xampp只是将所需的表导出为.sql文件,然后将其导入到所需的表中
首先创建转储。如果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的答案相同,但这种方法更安全,因为密码不会以原始文本的形式暴露在控制台(反向搜索,密码嗅探器等)。如果从脚本文件执行,并对其权限设置了适当的限制,则其他方法也可以。