Как ограничить пропускную способность, используемую mysqldump - PullRequest
6 голосов
/ 22 декабря 2008

Мне нужно вывести большую базу данных по сетевому каналу, который не имеет такой большой полосы пропускания, и другие люди должны использовать ее одновременно. Если я попробую это, это впитает всю пропускную способность, а задержка увеличится, и все остальные будут испорчены.

Мне известен флаг --compress для mysqldump, который несколько помогает.

Как я могу сделать это, не впитывая всю пропускную способность через это соединение?

Обновление:

Предложение скопировать файл дампа, используя scp с флагом -l, является хорошим, но я должен отметить, что у меня нет SSH доступа к серверу базы данных.

Ответы [ 6 ]

6 голосов
/ 29 декабря 2008

trickle * * 1004

Trickle - это портативный и легкий формирователь полосы пропускания для пользователей

Вы не упоминаете, как вы на самом деле передаете дамп БД, но если передача происходит по TCP / IP, то ручеек должен работать. Например, если вы используете nc (например: nc -L 1234 > backup.sql), следующая команда передаст резервную копию со скоростью не более 20 КБ / с:

mysqldump [database name] | trickle -u 20 nc backup.example.com:1234
3 голосов
/ 23 декабря 2008

У вас должен быть доступ к машине с Linux (извините, я человек с Linux).

Входящая политика может уменьшить объем входящего трафика, но сервер на другой стороне должен иметь хорошо функционирующий стек TCP / IP.

tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 родительский ffff: протокол ip prio 50 \
u32 соответствует ip src server.ip.address / 32 полицейский тариф 256 Кбит \
Взрыв 10k капли жидкости: 1
tc qdisc add dev eth0 root tbf \
скорость 256 кбит, задержка 25 мс, пакет 10 К

Дополнительную информацию о входных фильтрах можно найти в инструкции по расширенной маршрутизации.

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


Если вы делаете это в Linux, вы можете выгрузить файл локально, сжать его и использовать scp, чтобы скопировать файл с ключом -l, чтобы ограничить используемую пропускную способность:

-l предел Ограничивает используемую полосу пропускания, указанную в Кбит / с.

например

scp -l 16 удаленный хост файла дампа: имя_файла

1 голос
/ 22 декабря 2008

Я использовал один трюк, чтобы указать формат CSV, а не вставку. Это не меняет объем используемой полосы пропускания за единицу времени, но может уменьшить общее количество выводимых байтов.

0 голосов
/ 29 декабря 2008

Используете ли вы механизм транзакционных таблиц, как InnoDB? Это ваша основная база данных? Будь очень осторожен! mysqldump будет удерживать блокировки таблиц и нарушать производственное использование вашей базы данных. Замедление резервного копирования приведет к увеличению продолжительности этого периода. Всегда mysqldump на локальный диск, а затем скопируйте дамп оттуда.

Еще один подход может состоять в том, чтобы настроить ведомое устройство репликации на удаленном сайте и извлечь из него резервные копии. Затем обновления базы данных будет сочиться через вашу утверждало ссылку вместо спускался в один большой комок.

Другая альтернатива: делать резервные копии, когда никто другой не использует сеть:)

0 голосов
/ 22 декабря 2008

На клиенте вы можете запустить прокси, который ограничит скорость загрузки. Вы также можете контролировать количество соединений и т. Д.

Если вы работаете в Windows, это должно хорошо работать:

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

0 голосов
/ 22 декабря 2008

Если вы отправите его по TCP, пропускная способность будет поровну распределена между всеми сторонами. Если вы хотите еще больше понизить скорость, вам нужно настроить устройство так, чтобы выходило только определенное количество данных.

...