Экспорт дампа на удаленную машину через ssh
Сегодня столкнулся с очередной не стандартной задачей, а именно я забыл установить уведомитель об окончании свободного места на диске, и конечно именно на этом VPS-е (я их админю сам, без панелек) исчерпалось все доступное пространство. Разумеется выходит один - переезжать на сервер с большим винтом. Однако как же нам перенести базу, если мы не можем сделать её бэкап, место-то под него нету..
Разумеется первым делом, я нашел чего можно удалить и освободил немного места, чтобы сервер проработал еще хотя бы день, после этого, я показал юзерам страницу с информацией что на сервере идут работы, а поисковикам отдал 503 ошибку в этой же странице, чтобы они вернулись чуть позже. Сделано это лишь для того, чтобы освободить нужную мне базу от запросов и изменений.
Теперь я выполнил такую команду:
1 2 3 |
mysqldump -u MYSQL_USERNAME -p MYSQL_PASSWORD -q --default_character_set utf8 YOUR_DATABASE | gzip -c | ssh -p PORT USERNAME@YOUR_TO_HOST 'cat > ~/dump.sql.gz' |
и копирование на удаленный хост в папку root-а, пошло..
Давайте теперь разберемся подробнее:
mysqldump - делает нам бэкап, параметры:
- -u MYSQL_USERNAME = имя пользователя БД
- -p MYSQL_PASSWORD = пароль пользователя БД
- -q = параметр, который позволяет писать данные сразу на диск, не аккумулируя их в памяти (этот параметр по-умолчанию включен, однако я по старинке все равно его использую)
- --default_character_set utf8 = кодировка базы
- YOUR_DATABASE = имя базы данных
далее весь этот поток данных, нам бы не помешало заархивировать, чтоб меньше передавать по сети, поэтому используем команду gzip:
gzip - архивирует поток данных, параметры
- -с = выводить заархивированные данные в стандартный поток
теперь, осталось только передать поток по сети, на удаленную машину, для этого используем ssh:
ssh - программа удаленного доступа, параметры:
- -p PORT = порт на который обслуживает ssh соединения, по-умолчанию: 22
- USERNAME@YOUR_TO_HOST = имя-пользователя-на-сервере@ip-адрес-сервера
- 'cat>~/dump.sql.gz' = команда которая выполнится на удаленной машине и перенаправит поток в файл ~/dump.sql.gz
Собственно это и все, остается только дождаться завершения копирования и импортировать дамп уже в базу на удаленной машине. Напомню, сделать это можно так:
1 2 3 |
gunzip < dump.sql.gz | mysql -u MYSQL_USERNAME -p MYSQL_PASSWORD --default_character_set utf8 YOUR_DATABASE |
Author: | Tags: /
| Rating:
Leave a Reply