Я хочу регулярно выгружать базу данных на моем удаленно размещенном сайте с помощью сценария оболочки. К сожалению, сервер довольно плотно заблокирован, не mysqldump
установлен, двоичные файлы не могут быть выполнены обычными пользователями / в домашних каталогах (поэтому я не могу «установить» его сам), а база данных находится на отдельном сервере, поэтому я не могу получить файлы напрямую.
Единственное, что я могу сделать, это войти в веб-сервер через SSH и установить соединение с сервером базы данных с помощью mysql
клиента командной строки. Как я могу вывести содержимое в файл а-ля mysqldump
в формате SQL?
Бонус: если возможно, как я могу вывести содержимое прямо на мой конец SSH-соединения?
Мне нравится идея туннеля SSH, предложенная ниже, однако, мне нужно будет дважды туннелировать ее.
localhost -> remote web server -> remote database server
Это работает хорошо:
$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N
Однако, попытка войти к mysql терпит неудачу:
$ mysqldump -P 3306 -h localhost -u user -p db
Enter password:
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost'
(using password: YES) when trying to connect
Я предполагаю, что ожидается, что учетные данные пользователя будут 'user'@'mysql.example.com'
. Как я могу убедить это использовать это вместо "реального" хоста?
Хорошо, я получил его на работу, добавив 127.0.0.1 mysql.example.com
в мой файл hosts и подключившись через mysqldump -P 3306 -h mysql.example.com -u user -p db
. Проблема решена! Я все еще был бы заинтересован в решении, которое не требует от меня редактирования файла hosts.
'user'@'localhost'
в дополнение к'user'@'mysql.example.com'
MySQL, а не редактировать файл hosts.