Копирование базы данных MySQL через HTTP - PullRequest
1 голос
/ 11 декабря 2010

У меня 2 сервера.На # 1 удаленный доступ к БД отключен.База данных огромна (~ 1 ГБ), поэтому невозможно выгрузить ее с помощью phpMyAdmin, так как происходит сбой и зависание соединения.У меня нет доступа по SSH.Мне нужно скопировать всю БД в # 2 (где я могу настроить практически все).

Моя идея состоит в том, чтобы использовать какой-то уровень доступа HTTP поверх # 1.

Например, простой скрипт PHP, который принимает запрос в качестве аргумента _GET / _POST и возвращает результат в виде тела HTTP.

На # 2 (или на моем рабочем столе) я мог бы установить какое-то серверное приложениекоторый будет запрашивать последовательно для каждой строки в каждой таблице, даже по одной за раз.

И мой вопрос: знаете ли вы какое-нибудь готовое к использованию приложение с таким потоком?

Кстати: # 1 - это только PHP, # 2 - это PHP, Python и т. Д.

Я не могу ничего запустить на # 1, все fopen, curl, сокеты, система и т. Д. Отключены.Я могу получить доступ к БД только из PHP, удаленные подключения запрещены

Ответы [ 7 ]

1 голос
/ 11 декабря 2010

Можно ли подключиться к удаленному серверу MySQL из PHP на сервере №1?

Я знаю, что вы сказали: «удаленные подключения запрещены», но вы не упомянули этот сценарий.

Если это возможно, вы можете ВЫБРАТЬ из своей старой базы данных и напрямую ВСТАВИТЬ в MySQL, работающий на сервере # 2.

0 голосов
/ 11 декабря 2010

Я не уверен, как вам удалось попасть в эту ситуацию.Хостинг-провайдер явно необоснован, и вам следует с ними связаться.Вам также следует как можно скорее прекратить использование их сервисов (хотя это похоже на то, что вы пытаетесь сделать в любом случае).

К сожалению, PHPMyAdmin не подходит для операций с базами данных, которые важны для данных, поскольку их слишком много.ошибки и ограничения - вы, конечно, не должны полагаться на то, что они будут выгружать или восстанавливать.

mysqldump - это единственный способ НАДЕЖНО сбросить базу данных и вернуть ее обратно и иметь хороший шанс для полноты и правильности данных,Если вы не можете запустить его (локально или удаленно), боюсь, все ставки сняты.

0 голосов
/ 11 декабря 2010

Существует опция репликации, если хотя бы один из хостов доступен удаленно через TCP.Синхронизация первичной БД таким способом будет медленной, но будет иметь преимущество в сохранении всех метаданных таблицы, которые в противном случае вы потеряли бы, выполнив последовательности выбора / вставки.Подробнее здесь: http://dev.mysql.com/doc/refman/5.0/en/replication.html

0 голосов
/ 11 декабря 2010

давным-давно я использовал Sypex Dumper для этого, просто оставил открытый браузер на ночь и на следующее утро, пока дб дамп был доступен на ftp

0 голосов
/ 11 декабря 2010

Я подозреваю, что вы можете получить доступ к обоим серверам, используя FTP.

Как вы получите свои php файлы на нем в противном случае.

Возможно, вы можете просто скопировать базу данных mysql, если вы сможете получить к ней доступ через FTP.

Работает не во всех случаях, проверьте: http://dev.mysql.com/doc/refman/5.0/en/copying-databases.html для получения дополнительной информации.

Или вы можете попробовать варианты, найденные по этой ссылке:

http://www.php -mysql-tutorial.com / вики / MySQL-уроки / с помощью-PHP-к-подпорки-MySQL-databases.aspx

Не знаю, как настроен ваш php, хотя, как я понимаю, процесс обработки всей базы данных может занять некоторое время.

установка максимального времени выполнения и т. Д.

0 голосов
/ 11 декабря 2010

Мне кажется, что вы должны связаться с владельцем хоста и спросить, можете ли вы каким-либо образом получить свои данные. Это слишком глупо, что вы должны транслировать всю свою базу данных и заново вставить ее на новый компьютер. Он потребляет много ресурсов на php-сервере, с которого вы получаете данные. (И если хостинг-провайдер уже ограничен, у вас может быть ограничение на количество операций sql, которые вам разрешены в течение определенного периода времени)

Хотя, если вы вынуждены это сделать, вы можете сделать select * from table и для каждой строки преобразовать его в объект json, который вы видите в строке. Это вы можете сохранить на диске на вашем конце и использовать для его вставки позже.

0 голосов
/ 11 декабря 2010

Не понятно, что доступно на сервере №1.

Предполагая, что вы можете запустить только php, вы все равно сможете

  • запустите scp с php и подключитесь к серверу # 2, отправьте такие файлы

  • может быть, вы можете использовать php для запуска локальных команд на сервере # 1? в этом случае что-то вроде запуска rsync через php с сервера # 1 может работать

...