我必须通过没有那么多带宽的网络管道转储大型数据库,而其他人需要同时使用。如果我尝试它,它会吸收所有带宽和延迟,并且其他所有人都会搞砸。
我知道mysqldump的--compress标志有点帮助。
如果不通过此连接吸收所有带宽,我该怎么做?
更新
使用带有-l标志的scp复制转储文件的建议很好,但我应该注意到我没有SSH访问数据库服务器的权限。
答案 0 :(得分:6)
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)
答案 5 :(得分:0)
您使用的是像InnoDB这样的事务表引擎吗?这是您的主数据库吗?要非常小心! mysqldump将保存表锁并中断数据库的生产使用。减慢备份只会导致这段中断变得更长。始终mysqldump到本地光盘,然后从那里复制转储。
另一种方法可能是在远程站点上设置复制从站,并从中进行备份。然后,数据库更新将在您的竞争链接上流淌,而不是一蹴而就。
另一种选择:当其他人没有使用网络时进行备份:)