Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将select语句的结果复制到本地数据库表中_Mysql_Sql - Fatal编程技术网

Mysql 将select语句的结果复制到本地数据库表中

Mysql 将select语句的结果复制到本地数据库表中,mysql,sql,Mysql,Sql,我想将远程数据库查询的内容复制到本地数据库表中。最好的方法是什么?目前,我正在尝试以下方法: mysql --host=example.com --user=syncdb --password=syncdb_pass db_name \ -e "SELECT user, MD5(user) FROM auth_user" \ > mysql -u root --host=127.0.0.1 --password="" localdb 命令的第一部分可以很好地抓取数据——我刚刚

我想将远程数据库查询的内容复制到本地数据库表中。最好的方法是什么?目前,我正在尝试以下方法:

mysql --host=example.com --user=syncdb --password=syncdb_pass db_name \
      -e "SELECT user, MD5(user) FROM auth_user" \
> mysql -u root --host=127.0.0.1 --password="" localdb
命令的第一部分可以很好地抓取数据——我刚刚添加的第二部分是一种伪代码,用来显示我正在尝试做什么。我怎样才能做到这一点?另一种看法是:

INSERT INTO mylocaldb.table (SELECT user, MD5(user) FROM myremotedb.auth_user)

没有这种可能性

首先用你的手做一张新桌子

    CREATE TABLE new_tbl SELECT user, MD5(user) FROM auth_user;
然后

这将转储新表并将其传输到远程服务器数据库

然后在原始服务器上删除新表,并在远程服务器上重命名它
如果您使用的是mysql 8,那么由于新的mysqldump和gtid,就不存在这种可能性

首先用你的手做一张新桌子

    CREATE TABLE new_tbl SELECT user, MD5(user) FROM auth_user;
然后

这将转储新表并将其传输到远程服务器数据库

然后在原始服务器上删除新表,并在远程服务器上重命名它
在使用mysql 8的情况下,由于新的mysqldump和gtid,可用于此目的的另一个工具是execsql.py,它将从脚本文件中读取一组命令,其中脚本命令可以汇总远程服务器上的数据,并将这些数据复制到本地服务器。如果将数据复制到本地服务器后,您将对其执行更多操作,则执行这些步骤的命令可以包含在复制操作后的同一脚本中

假设初始连接到本地数据库,并且要运行的脚本名为get_remote_users.sql,则可以使用如下命令启动该过程:

execsql.py -u root -w get_remote_users.sql 127.0.0.1 localdb
命令行选项和参数的含义如中所述

然后,可以使用以下脚本连接到远程数据库,创建视图,将该视图复制到本地数据库,然后删除该视图

-- !x! connect to mysql(server=example.com, db=db_name, user=syncdb, need_pwd=True, password=syncdb_pass) as remote
-- !x! use remote
create or replace view userlist as
select user, MD5(user) as user_md5 from auth_user;
-- !x! copy userlist from remote to replacement remote_users in initial
drop view userlist;
-- !x! use initial
以-开头的行!x!是execsql的元命令

这将在本地数据库中创建或替换名为remote_users的表

如果这是一个经常发生的操作,并且可以在远程服务器上保留userlist视图,那么可以将此脚本缩减为仅包含和元命令的两行


免责声明:我编写了execsql.py。

用于此目的的另一个工具是execsql.py,它将从脚本文件中读取一组命令,其中脚本命令可以汇总远程服务器上的数据,并将这些数据复制到本地服务器。如果将数据复制到本地服务器后,您将对其执行更多操作,则执行这些步骤的命令可以包含在复制操作后的同一脚本中

假设初始连接到本地数据库,并且要运行的脚本名为get_remote_users.sql,则可以使用如下命令启动该过程:

execsql.py -u root -w get_remote_users.sql 127.0.0.1 localdb
命令行选项和参数的含义如中所述

然后,可以使用以下脚本连接到远程数据库,创建视图,将该视图复制到本地数据库,然后删除该视图

-- !x! connect to mysql(server=example.com, db=db_name, user=syncdb, need_pwd=True, password=syncdb_pass) as remote
-- !x! use remote
create or replace view userlist as
select user, MD5(user) as user_md5 from auth_user;
-- !x! copy userlist from remote to replacement remote_users in initial
drop view userlist;
-- !x! use initial
以-开头的行!x!是execsql的元命令

这将在本地数据库中创建或替换名为remote_users的表

如果这是一个经常发生的操作,并且可以在远程服务器上保留userlist视图,那么可以将此脚本缩减为仅包含和元命令的两行

免责声明:我编写了execsql.py