Какая разница между -C и gzipping mysqldump?

Я хочу сделать mysqldump непосредственно на моем удаленном хосте. Я видел предложения использовать ключ -c или использовать gzip для сжатия данных "на лету" (а не в файле). Какая разница между ними? Как узнать, поддерживают ли обе машины ключ -C? Как я могу сделать gzip на лету? Я использую linux на обеих машинах.

mysqldump -C -u root -p database_name | mysql -h other-host.com database_name

Ответы

Ответ 1

Опция -C использует сжатие, которое может присутствовать в протоколе клиент-сервер MySQL. Gzip'ing будет использовать утилиту gzip в конвейере. Я уверен, что последнее не принесет пользы, так как сжатие и сжатие будут происходить на одной машине в этом случае. Если машина, из которой вы выгружаетесь, является локальной, то опция -C, вероятно, просто растрачивает циклы процессора - она ​​сжимает сообщения протокола между mysqldump и демонами mysqld.

Единственный конвейер команд, который может иметь смысл здесь, выглядит примерно так:

mysqldump -u root -p database_name | mysql -C -h other-host -Ddatabase_name -B

Вывод mysqldump переходит к конвейеру, который будет читать клиент командной строки mysql. Параметр -C сообщает mysql сжимать сообщения, которые он отправляет, на other-host. Параметр -B отключает буферизацию и интерактивное поведение в клиенте mysql, что может ускорить процесс еще немного.

Скорее всего, было бы быстрее сделать что-то вроде:

mysqldump -u root -p database_name | gzip > dump.gz
scp dump.gz [email protected]:/tmp
ssh [email protected] "gunzip /tmp/dump.gz | mysql -Ddatabase_name -B; rm /tmp/dump.gz"

Если у вас есть SSH, работающий на другом компьютере, все равно.

Ответ 2

Я всегда читаю страницы руководства для этих типов вещей. Если вы посмотрите на man-страницы для mysqldump, вы увидите, что флаг -C (thats a capital C) делает mysqldump сжимать все данные только в пути. это делает поток сжатым, но придет, как вы увидите, несжатым. Вы можете выгрузить файл в локальную систему, а затем передать gzip всего сразу.

на странице руководства:

   o   --compress, -C

       Compress all information sent between the client and the server if
       both support compression.