Mysql 将表从一个数据库复制到另一个数据库的最简单方法?

Mysql 将表从一个数据库复制到另一个数据库的最简单方法?,mysql,database,Mysql,Database,当数据库位于不同的用户下时,将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么 我知道我可以用 INSERT INTO database2.table2 SELECT * from database1.table1 但是这里的问题是database1和database2都在不同的MySQL用户下。因此user1只能访问database1,而user2只能访问database2。有什么想法吗?这是你需要定期做的事情,还是一次性的 您可以执行导出(例如使用phpMyAdmin或类似工

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

我知道我可以用

INSERT INTO database2.table2 SELECT * from database1.table1

但是这里的问题是
database1
database2
都在不同的MySQL用户下。因此
user1
只能访问
database1
,而
user2
只能访问
database2
。有什么想法吗?

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


您可以执行导出(例如使用phpMyAdmin或类似工具),将表及其内容脚本化为文本文件,然后您可以将其重新导入另一个数据库。

如果您具有shell访问权限,您可以使用
mysqldump
转储
database1.table1的内容,并将其通过管道传输到
mysql
database2
。这里的问题是
table1
仍然是
table1

mysqldump--user=user1--password=password1数据库1表1\
|mysql--user=user2--password=password2数据库2
也许您需要使用另一个查询将
table1
重命名为
table2
。另一方面,您可以使用sed将to管道之间的表1更改为表2

mysqldump--user=user1--password=password1数据库1表1\
|sed-e's/`table1`/`table2`/'\
|mysql--user=user2--password=password2数据库2
如果表2已经存在,您可以将参数添加到第一个mysqldump中,而不让create创建表

mysqldump--no create info--no create db--user=user1--password=password1数据库1表1\
|sed-e's/`table1`/`table2`/'\
|mysql--user=user2--password=password2数据库2
:强烈建议


这将很容易处理迁移问题。您可以在MySql和SqlServer之间迁移选定数据库的选定表。你一定要试试。

试试
mysqldbcopy
()

或者,您可以在目标主机上创建“”。联邦表允许您查看来自不同数据库服务器的表,就像它是本地表一样。()


创建联邦表后,您可以使用通常的
插入操作将数据从源文件复制到目标文件select*中

我使用Navicat for MySQL

它使所有的数据库操作变得简单

只需在Navicat中选择两个数据库,然后使用

 INSERT INTO Database2.Table1 SELECT * from Database1.Table1

createtabledb1.table1从db2.table1中选择*


db1是目标,db2是源,使用MySQL Workbench,您可以使用数据导出将表转储到本地SQL文件(仅数据、仅结构或结构和数据),然后数据导入将其加载到另一个数据库中


您可以同时打开多个连接(不同的主机、数据库和用户)。

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

E.g. select * from table1; 
  • 单击导出按钮并将其另存为CSV
  • 使用与第一个表相似的列创建新表

    E.g. create table table2 like table1; 
    
  • 从新表中选择“全部”

    E.g. select * from table2;  
    
  • 单击导入并选择在步骤2中导出的CSV文件


  • 使用以下步骤将一些列从一个数据库表复制并插入到另一个数据库表中-

  • 创建表tablename(columnname数据类型(大小)、columnname数据类型(大小)) 2.INSERT INTO db2.tablename从db1.tablename中选择columnname1、columnname2

    如果您使用的是PHPMyAdmin,它可能非常简单。 假设您有以下数据库:

    DB1 & DB2
    
    DB1有一个表用户,您希望将其复制到DB2

    在PHPMyAdmin下,打开DB1,然后转到users表

    在此页面上,单击右上角的“操作”选项卡。 在操作下,查找部分将表复制到(database.table):


    &你完了

    在xampp中,只需将所需的表导出为.sql文件,然后将其导入所需的

    如果您的表位于同一台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;
    

    下面是另一个简单的方法:

  • 使用DB1;显示创建表TB1;
    • 复制剪贴板中的语法以在DB2中创建TB1
  • 使用DB2;
    • 将语法粘贴到此处以创建表TB1

  • INSERT-INTO DB2.TB1从DB1.TB1中选择*

    我知道这是一个老问题,回答这个问题是为了让任何登陆这里的人都能找到更好的方法

    从5.6.10开始,您可以

    CREATE TABLE new_tbl LIKE orig_tbl;
    

    请参阅此处的文档:

    获取所有所需查询的一种简单方法是使用信息模式和concat中的数据

    从'TABLES'中选择concat('CREATE TABLE new_db','TABLE_NAME','LIKE old_db','TABLE_NAME',;'),其中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视图。您可以通过在初始查询中添加
    和TABLE_TYPE='BASE TABLE'
    来避免它们:

    创建表目标客户,如sakila.customer(Database_name.tablename),这只会复制源表的结构,要使用结构复制数据,请执行以下操作:创建表目的地\u customer as select*from sakila.customer首先创建转储。如果
    表2
    已经存在,则添加了
    --无创建信息--无创建db
    标志:

    mysqldump -u user1 -p database1 table1 > dump.sql
    
    然后输入
    user1
    password。然后:

    sed -e 's/`table1`/`table2`/' dump.sql
    
    mysql-u user2-p database2
    然后输入
    user2
    password

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

    mysql -u user2 -p database2 < dump.sql
    CREATE TABLE dbto.table_name like dbfrom.table_name;
    insert into  dbto.table_name select * from dbfrom.table_name;
    
    SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM information_schema.TABLES  WHERE TABLE_SCHEMA = 'old_db';