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, с которой не будет создаваться псевдотерминал и не испортится бинарный поток.
Кросспост с блога
С документацией на эту тему не очень хорошо, но
с этой опцией не будут интерпритироваться специцальные конструкции, например, escape-последовательности. Можно погуглить для полноты информации.
Но стоит отметить, что, по-идее, в данном случае и без ключа -T псевдо tty не должен создаваться, так что это просто перестраховка, которая не бывает лишней (особенно, если используется старая версия ssh, в которой поведение может отличаться)
с этой опцией не будут интерпритироваться специцальные конструкции, например, escape-последовательности. Можно погуглить для полноты информации.
Но стоит отметить, что, по-идее, в данном случае и без ключа -T псевдо tty не должен создаваться, так что это просто перестраховка, которая не бывает лишней (особенно, если используется старая версия ssh, в которой поведение может отличаться)
Или -W
-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.
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.
Можно, но этот вариант не универсален. У нас несколько человек и динамические адреса - для всех ненадобавляешься. Но как временное решение тоже подходит.
ТС сказал же, весь прикол в том, что это сработает если на сервере с БД нет места под бекап=) Внимательней)
В этом комменте имеется в виду, что можно mysql-ем подключатся к серваку по сети, а не локально, и забирать дамп с БД-сервера по нативному протоколу MySQL-я, так что сохранятся будет не на сервере с БД, на локальной машине; ssh типо лишний.
Но с ssh безопасней, не? Ведь насколько я знаю MySQL не шифрует трафик. Да и давать удалённый доступ к БД — дырко.
Но с ssh безопасней, не? Ведь насколько я знаю MySQL не шифрует трафик. Да и давать удалённый доступ к БД — дырко.
Стоит обратить внимание на опцию -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-доступ.
Зачем жать бзипом поток, потом разжимать, если все что идет через 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-доступ.
Имеется в виду, что не будут интерпритироваться, например escape-последовательности.
Но стоит отметить, что, по-идее, в данном случае и без ключа -T псевдо tty не должен созадаваться.
Эффективность bzib2 -9 выше, так как при сжатии по ssh должна быть низкая задержка - у bzip2 такого требования нету, так что на больших БД может быть значительное преимущество.
Но стоит отметить, что, по-идее, в данном случае и без ключа -T псевдо tty не должен созадаваться.
Эффективность bzib2 -9 выше, так как при сжатии по ssh должна быть низкая задержка - у bzip2 такого требования нету, так что на больших БД может быть значительное преимущество.
Тут согласен, что bzip -9 жмет лучше, но зачем потом его разжимать на принимающей стороне? В моем примере он жмется и в таком виде уже идет на бэкапный сервер.
Ну, по сути мне не для бэкапа нужно, а чтобы восстановить БД на другом сервере и протестировать кое-какие изменения.
Да по сути это всё одни и те же велосипеды, cat нужен для того что бы принять все что идет ему на stdin(который приходит от ssh pipe) и записать в файл.
Не совсем понятно, когда гоняешь бинарные потоки, -T рекомендуется или именно обязательно и где про это подробнее почитать можно?