如何限制mysqldump使用的带宽

时间:2008-12-22 17:49:35

标签: mysql linux networking large-data-volumes

我必须通过没有那么多带宽的网络管道转储大型数据库,而其他人需要同时使用。如果我尝试它,它会吸收所有带宽和延迟,并且其他所有人都会搞砸。

我知道mysqldump的--compress标志有点帮助。

如果不通过此连接吸收所有带宽,我该怎么做?

更新

使用带有-l标志的scp复制转储文件的建议很好,但我应该注意到我没有SSH访问数据库服务器的权限。

6 个答案:

答案 0 :(得分:6)

trickle

  

trickle是一个便携式轻量级用户空间带宽整形器

您没有提到您实际上是如何转换数据库转储,但如果通过TCP / IP进行传输,则应该使用trickle。例如,如果您使用nc(例如:nc -L 1234 > backup.sql),则以下命令将以不超过20KB / s的速度传输备份:

mysqldump [database name] | trickle -u 20 nc backup.example.com:1234

答案 1 :(得分:3)

你必须能够访问一台linux机器(对不起,我是一个与众不同的人)。

入口策略可以减少传入流量,但另一方面的服务器需要具有表现良好的TCP / IP堆栈。

tc qdisc add dev eth0 handle ffff:ingress
tc filter add dev eth0 parent ffff:protocol ip prio 50 \
u32匹配ip src server.ip.address / 32警察率256kbit \
爆裂10k drop flowid:1
tc qdisc add dev eth0 root tbf \
速率256kbit延迟25ms突发10k

您可以在高级路由指南中找到有关入口过滤器的更多信息。

http://www.linux.org/docs/ldp/howto/Adv-Routing-HOWTO/index.html


如果您在linux中执行此操作,则可以在本地转储该文件,对其进行压缩并使用scp通过-l开关复制该文件以限制使用的带宽:

-l limit              限制使用的带宽,以Kbit / s为单位。

例如

scp -l 16 dumpfile remotehost:filepathandname

答案 2 :(得分:1)

我使用的一个技巧是指定CSV格式而不是插入。它不会改变每单位时间使用的带宽,但它可以减少您提取的总字节数。

答案 3 :(得分:0)

如果您通过TCP发送,带宽将在所有各方之间平均分配。如果您想要进一步降低速度,则需要将设备调整为仅允许一定数量的数据输出。

答案 4 :(得分:0)

在客户端上,您可以运行限制下载速度的代理。 您还可以控制连接数等。

如果你在Windows上,这应该很好用:

http://www.youngzsoft.net/ccproxy/index.html

答案 5 :(得分:0)

您使用的是像InnoDB这样的事务表引擎吗?这是您的主数据库吗?要非常小心! mysqldump将保存表锁并中断数据库的生产使用。减慢备份只会导致这段中断变得更长。始终mysqldump到本地光盘,然后从那里复制转储。

另一种方法可能是在远程站点上设置复制从站,并从中进行备份。然后,数据库更新将在您的竞争链接上流淌,而不是一蹴而就。

另一种选择:当其他人没有使用网络时进行备份:)