如何:从“远程”表将数据导入“本地”表

LeonTown 2011-09-20 10:08:51
如题,
想实现一个类似如下的功能:
INSERT INTO local_table SELECT * FROM remote_table where ...

其中,local_table是本地(内网)的一个数据库中的表,
remote_table是远程(公网)的一个数据库中的表,
两张表的结构完全一样。


请问,该如何实现呢?
用sql或其它语言都行。。。
...全文
207 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fh13760184 2011-09-20
  • 打赏
  • 举报
回复
存储过程 可以远程的 前提是给权限
wwwwb 2011-09-20
  • 打赏
  • 举报
回复
用MYSQLDUMP导出,再导入到本地表中,再做处理
rucypli 2011-09-20
  • 打赏
  • 举报
回复
如果不安装FEDERATED ,则只能通过导入导出数据来完成
wwwwb 2011-09-20
  • 打赏
  • 举报
回复
安装 FEDERATED 引擎才行
建个FEDERATED 表,再访问
示例
CREATE TABLE xxx_b (
id INT(20) NOT NULL AUTO_INCREMENT,
username VARCHAR(32) NOT NULL DEFAULT '',
password VARCHAR(32),
PRIMARY KEY (id)
)
ENGINE=FEDERATED
CONNECTION='mysql://broot:bpassword@268.56.71.11:3306/dbname/b表';
vipper23 2011-09-20
  • 打赏
  • 举报
回复
内网建一个表remote_table 用federate引擎,指向公网的那个remote_table 表,然后用上边的那个语句导入
LeonTown 2011-09-20
  • 打赏
  • 举报
回复
对对,两个库都是mysql
WWWWA 2011-09-20
  • 打赏
  • 举报
回复
什么数据库?MYSQL?
Rotel-刘志东 2011-09-20
  • 打赏
  • 举报
回复
首先创建数据库链接,然后再将远程表导入本地。
ACMAIN_CHM 2011-09-20
  • 打赏
  • 举报
回复
ACMAIN_CHM 2011-09-20
  • 打赏
  • 举报
回复
另外如果只是某个表,则可以直接

select ..INTO OUTFILE 将表中记录查询输出到文件,然后再从数据文件 LOAD DATA INFILE 到表中。
[Quote]
13.2.5. LOAD DATA INFILE语法
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...)]
LOAD DATA INFILE语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。

要了解有关INSERT和LOAD DATA INFILE的效率的对比和有关LOAD DATA INFILE加速的更多信息,请参见7.2.16节,“INSERT语句的速度”。

由character_set_database系统变量指示的字符集被用于解释文件中的信息。SET NAMES和character_set_client的设置不会影响对输入的解释。

注意,目前不能载入UCS2数据文件。

您也可以通过使用mysqlimport应用程序载入数据文件;通过向服务器发送一个LOAD DATA INFILE语句实现此功能。--local选项用于使mysqlimport从客户主机中读取数据文件。如果客户端和服务器支持压缩协议,则您可以指定—compress选项提高在慢速网络中的性能。请参见8.10节,“mysqlimport:数据导入程序。

如果您使用LOW_PRIORITY,则LOAD DATA语句的执行被延迟,直到没有其它的客户端从表中读取为止。

如果一个MyISAM表满足同时插入的条件(即该表在中间有空闲块),并且您对这个MyISAM表指定了CONCURRENT,则当LOAD DATA正在执行时,其它线程会从表中重新获取数据。即使没有其它线程在同时使用本表格,使用本选项也会略微影响LOAD DATA的性能。

如果指定了LOCAL,则被认为与连接的客户端有关:

· 如果指定了LOCAL,则文件会被客户主机上的客户端读取,并被发送到服务器。文件会被给予一个完整的路径名称,以指定确切的位置。如果给定的是一个相对的路径名称,则此名称会被理解为相对于启动客户端时所在的目录。

· 如果LOCAL没有被指定,则文
[/Quote]
wwwwb 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leontown 的回复:]
引用 7 楼 wwwwb 的回复:

用MYSQLDUMP导出,再导入到本地表中,再做处理

导入导出具体怎么做啊?
[/Quote]
mysqldump -uroot -p >123.txt
mysql -uroot -p <123.txt
ACMAIN_CHM 2011-09-20
  • 打赏
  • 举报
回复
存储过程不行。
MYSQLDUMP可以把远程的记录导出,然后再导入到本地数据库。

mysqldump 的用法,可以参考手册中的描述和例子。

[Quote]
8.8. mysqldump:数据库备份程序
mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。

如果你在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。参见8.9节,“mysqlhotcopy:数据库备份程序”。

有3种方式来调用mysqldump:

shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database DB1 [DB2 DB3...]
shell> mysqldump [options] --all--database
如果没有指定任何表或使用了---database或--all--database选项,则转储整个数据库。

要想获得你的版本的mysqldump支持的选项,执行mysqldump ---help。

如果运行mysqldump没有--quick或--opt选项,mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以用--skip-opt禁用。

如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中,不应使用--opt或-e选项。

mysqldump支持下面的选项:

· ---help,-?

显示帮助消息并退出。

· --add-drop--database

在每个CREATE DATABASE语句前添加DROP DATABASE语句。

· --add-drop-tables

在每个CREATE TABLE语句前添加DROP TABLE语句。

· --add-locking

用LOCK TABLES和UNLOCK TABLES语句引用每个表转储。重载转储文件时插入得更快。参见7.2.16节,“INSERT语句的速度”。

· --all--database,-A

转储所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库。

· --allow-keywords

允许创建关键字列名。应在每个列名前面加上表名前缀。

· ---comments[={0|1}]

如果设置为 0,禁止转储文件中的其它信息,例如程序版本、服务器版本和主机。--skip—comments与---comments=0的结果相同。 默认值为1,即包括额外信息。

· --compact

产生少量输出。该选项禁用注释并启用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking选项。

· --compatible=name

产生与其它数据库系统或旧

[/Quote]
LeonTown 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fh13760184 的回复:]

存储过程 可以远程的 前提是给权限
[/Quote]
这个存储过程的代码怎么写呢?
LeonTown 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwb 的回复:]

用MYSQLDUMP导出,再导入到本地表中,再做处理
[/Quote]
导入导出具体怎么做啊?

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧