Shtsh 15.05.2012 23:09

Tips & tricksДамп БД mysql по ssh

Проблема: есть сервер БД, где мало свободного места (на дамп не хватит). Нужно сделать дамп БД.

Решение:
1
ssh -T <user>@<host> “mysqldump -u <db_user> -p <other> database | bzip2 -9” | bzip2 -dc > database.dump


Стоит обратить внимание на опцию -T, с которой не будет создаваться псевдотерминал и не испортится бинарный поток.

Кросспост с блога


Тэги: mysql mysqldump ssh
+ 4 -
Похожие Поделиться

sirex 15.05.2012 23:45 #
Т.е. использование ssh host "mysqldump ... | gzip -9" | cat > dump.sql.gz потенциально не безопасно?
Не совсем понятно, когда гоняешь бинарные потоки, -T рекомендуется или именно обязательно и где про это подробнее почитать можно?
Shtsh 16.05.2012 17:22 #
С документацией на эту тему не очень хорошо, но
с этой опцией не будут интерпритироваться специцальные конструкции, например, escape-последовательности. Можно погуглить для полноты информации.
Но стоит отметить, что, по-идее, в данном случае и без ключа -T псевдо tty не должен создаваться, так что это просто перестраховка, которая не бывает лишней (особенно, если используется старая версия ssh, в которой поведение может отличаться)
mealsforall 16.05.2012 08:07 #
Или -W
Shtsh 16.05.2012 17:16 #
Не нашёл в мане такого ключа. Что он делает?
mealsforall 16.05.2012 23:04 #
-W host:port
Requests that standard input and output on the client be for‐
warded to host on port over the secure channel. Implies -N, -T,
ExitOnForwardFailure and ClearAllForwardings and works with Pro‐
tocol version 2 only.
s4f 16.05.2012 11:38 #
Хм, почему не сделать
1
mysqldump -h <host> -u <db_user> -p <pass> database > database.dump


Т.е. добавить grant-права mysql подключаться с другого компа и забрать дамп по сети
Shtsh 16.05.2012 17:12 #
Можно, но этот вариант не универсален. У нас несколько человек и динамические адреса - для всех ненадобавляешься. Но как временное решение тоже подходит.
thebeetlebum 16.05.2012 21:01 #
ТС сказал же, весь прикол в том, что это сработает если на сервере с БД нет места под бекап=) Внимательней)
kstep 17.05.2012 16:41 #
В этом комменте имеется в виду, что можно mysql-ем подключатся к серваку по сети, а не локально, и забирать дамп с БД-сервера по нативному протоколу MySQL-я, так что сохранятся будет не на сервере с БД, на локальной машине; ssh типо лишний.

Но с ssh безопасней, не? Ведь насколько я знаю MySQL не шифрует трафик. Да и давать удалённый доступ к БД — дырко.
Shtsh 17.05.2012 18:15 #
Безопасней да и влом дополнительно правила iptables добавлять.
nikebl 16.05.2012 13:12 #
Стоит обратить внимание на опцию -T, с которой не будет создаваться псевдотерминал и не испортится бинарный поток. Что именно имеется ввиду?
Зачем жать бзипом поток, потом разжимать, если все что идет через ssh и так жмется на лету?
ssh user@HOST "mysqldump --defaults-extra-file=/home/user/.my.cnf (тут лежат доступы к базе ) dbname | gzip -9" | cat > /storage/backups/mysql_backup-`date +%Y-%m-%d`.gz
Снимается так, проблем не было, все восстанавливалось отлично. Подключения к БД из внешней сети закрыто по соображениям безопасности, есть только ssh-доступ.
Shtsh 16.05.2012 17:20 #
Имеется в виду, что не будут интерпритироваться, например escape-последовательности.
Но стоит отметить, что, по-идее, в данном случае и без ключа -T псевдо tty не должен созадаваться.
Эффективность bzib2 -9 выше, так как при сжатии по ssh должна быть низкая задержка - у bzip2 такого требования нету, так что на больших БД может быть значительное преимущество.
nikebl 18.05.2012 12:27 #
Тут согласен, что bzip -9 жмет лучше, но зачем потом его разжимать на принимающей стороне? В моем примере он жмется и в таком виде уже идет на бэкапный сервер.
Shtsh 18.05.2012 23:15 #
Ну, по сути мне не для бэкапа нужно, а чтобы восстановить БД на другом сервере и протестировать кое-какие изменения.
kstep 17.05.2012 16:43 #
По сути аналогично тому, что написал ТС. А зачем здесь cat?
nikebl 18.05.2012 12:29 #
Да по сути это всё одни и те же велосипеды, cat нужен для того что бы принять все что идет ему на stdin(который приходит от ssh pipe) и записать в файл.
kstep 10.08.2012 14:05 #
Я к тому, что нельзя ли разве написать так?

ssh user@HOST "mysqldump --defaults-extra-file=/home/user/.my.cnf (тут лежат доступы к базе ) dbname | gzip -9" > /storage/backups/mysql_backup-`date +%Y-%m-%d`.gz