将 mysql 表转储到 CSV(stdout),然后将输出通过隧道传输到另一台服务器

2024-03-08

我正在尝试将数据库表移动到另一台服务器;复杂的是当前运行该表的机器几乎没有剩余空间;所以我正在寻找一个可以通过网络工作的解决方案。

我尝试过从 src 机器上 mysqldumping 数据库并将其通过管道传输到目标 mysql 中;但我的数据库有 48m 行,即使关闭 auto_commit 并将 trx_commit cmd 设置为 2;我有一些狗缓慢的时间。

mysqldump -uuser -ppass --opt dbname dbtable  | mysql -h remove.server  -uuser -pass dbname

然后我尝试一次 mysqldump 一百万行; scp 将它们发送到目标机器并执行 mysql

我做了一些阅读,mysql 建议使用 CSV LOAD IN FILE 样式导入比插入快约 20 倍。所以现在我被困住了。

我可以弄清楚如何使用标准 sql 语法导出为 CSV:

SELECT *
INTO OUTFILE '/tmp/tmpfile'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM table;

但这显然不起作用,因为它会很快耗尽我已经很低的磁盘空间。所以我一直在寻找一个开关,让 mysqldump 将 csv 转储到标准输出。从我读到的来看,这似乎不可能。我能想到的唯一方法是创建一个 FIFO 并指向 mysql 在那里转储 - 然后编写一个脚本,同时读取 FIFO 并将其发送到目标服务器。但不太确定如何同步到其他服务器的语法;这让我想到了下一个问题。

假设我可以让 mysql 将 CSV 转储到标准输出而不是文件;然后我如何将该输出传送到目标服务器?如果我可以简单地在目标服务器上获取单个 csv 文件,我会很高兴,因为它有更多空间;因为这样我就可以简单地从文件中使用 mysqlimport 。

这让我想到了下一点......我很乐意能够做到这一点:

mysqldump -uuser -ppass --opt dbname --tab /dev/stdout dbtable  | mysqlimport -h remove.server  -uuser -pass dbname 

但看起来 mysqlimport 不支持管道传输;你必须向它传递一个文件。

打字时突然想到;

是否可以使用上面列出的 FIFO 方法?然后让 mysqlimport 从 FIFO 读取并插入到目标服务器?我想唯一的问题是 mysql 转储的速度比导入到目标服务器的速度快;随后填充 src 服务器。

我对如何将 mysql CSV 转储到标准输出并将其通过网络传输到目标服务器(最好同时导入,但很高兴将其转储为目标上的文件)有点迷失。

任何帮助将不胜感激!

干杯, 本


UPDATE:我正在使用 innodb 表;我无法关闭 src 盒子超过 10 分钟。


UPDATE:我现在使用 sshfs 将目标上的目录安装到 src 上,并让 mysql 将 csv 转储到该文件夹​​中 - 似乎工作得很好。然后只需使用 mysqlimport 将其加载到目标数据库中即可。


UPDATE:所以现在我已经设法将数据放入目标框中 - 导入仍然像使用插入完成一样慢。 12 小时内导入了 900 万行。这里有些不对劲。有任何想法吗?


UPDATE:对于那些感兴趣的人...这也不起作用:http://forums.mysql.com/read.php?22,154964 http://forums.mysql.com/read.php?22,154964


你需要mysqlhostcopy http://dev.mysql.com/doc/refman/5.0/en/mysqlhotcopy.html哪个支持scp,当然,服务器之间的物理距离会导致流量问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 mysql 表转储到 CSV(stdout),然后将输出通过隧道传输到另一台服务器 的相关文章

  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • POINT 列上的 MySQL INSERT/UPDATE

    我正在尝试用我国家的地理位置填充我的数据库 我的一张表有 4 个字段 ID PK 纬度 经度和地理点 EDIT SCDBs Punto Geografico SET lat 18 469692 SET lon 63 93212 SET g
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • 连接 Netbeans 和 MySQL 但出现大整数错误

    所以我正在尝试向我的 Netbeans 数据库 即 MySQL 添加新连接 但我遇到了大整数转换错误 有人可以帮助我吗 详细地 我右键单击现有的MySQL 服务器位于 localhost 3306 root 已断开连接 gt gt 选择co
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • Windows 8.1 升级后 Apache 无法工作 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 今天从 Windows 8 升级到 Windows 8 1 后 Apache 不再工作 我上次从 Windows 7 升级到 Window
  • 从另一台计算机访问 MYSQL

    我想开发一个java桌面应用程序 我想在其中设置服务器 这意味着我在这里使用mysql db 该数据库将仅存储在一台电脑上 其余所有用户都可以访问该数据库 所以 我听说了mysql远程连接 其中尝试了一些事情 这些措施如下 我的电脑已连接w
  • MySql 5.7 ORDER BY 子句不在 GROUP BY 子句中并且包含非聚合列

    我试图在不禁用 my ini 中的 only full group by 的情况下弄清楚 这是我的查询 SELECT p title COUNT t qty AS total FROM payments t LEFT JOIN produc
  • MySQL“LIKE”搜索不起作用

    我通过 LOAD DATA INFILE 在 MySQL 中导入了一个 txt 数据库 一切似乎都正常 唯一的问题是 如果我使用以下查询在数据库上搜索记录 SELECT FROM hobby WHERE name LIKE Beading
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • MYSQL - 使用逗号分隔字符串作为变量输入的存储过程

    我希望有人能够提供帮助 我已经创建了我的第一个存储过程 没什么花哨的 但是我遇到了问题 我想给它一个字符串输入 例如 1 2 3 4 5 然后它执行一个简单的操作SELECT FROM TABLE WHERE EAN IN VAR 所以存储
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie

随机推荐