Как сделать дамп удаленной базы данных без mysqldump?


8

Я хочу регулярно выгружать базу данных на моем удаленно размещенном сайте с помощью сценария оболочки. К сожалению, сервер довольно плотно заблокирован, не 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.


1
Я бы предложил, чтобы вы предоставили разрешения для 'user'@'localhost'в дополнение к 'user'@'mysql.example.com'MySQL, а не редактировать файл hosts.
Знаркус

Ответы:


15

Вы можете установить ssh-туннель и использовать его mysqldumpна своей локальной машине.

ssh -f -L 3306:localhost:3306 user@remoteserver -N
mysqldump -P 3306 -h localhost -u dbuser dbname

1
В Unix localhost обрабатывается по-разному. В котором номер порта игнорируется, вам нужно использовать 127.0.0.1, чтобы это работало. dev.mysql.com/doc/refman/5.0/ru/connecting.html
Адриан Гунаван


0

Загрузите этот скрипт на ваш веб-сервер (надеюсь, у вас есть хотя бы FTP-доступ), запустите его, укажите имя базы данных / хост (адрес вашего «отдельного сервера») / имя пользователя / пароль и дамп базы данных в любое место, куда вы хотите ...


0

Если ваш сервер является веб-сервером, вы можете использовать скрипт PHP, который выводит базу данных на экран. На вашем сервере резервного копирования поместите cron, который создает страницу дампа. Затем ваша база данных сбрасывается на ваш резервный сервер только по HTTP.

Не забывайте о безопасности: все могут свалить вашу базу. Поставьте пароль или ограничение IP ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.