Задача
Вы хотите скопировать таблицы или базы данных с одного сервера MySQL на другой.
Решение
Используйте вместе mysqldump и mysql, соединив их каналом (pipe).
Обсуждение
Вывод mysqldump в формате SQL можно использовать для копирования таблиц и баз данных с одного сервера на другой. Предположим, что вы хотите копировать таблицу states базы данных cookbook локального хоста в базу данных cb, работающую на хосте other-host.com. В качестве одного из способов сделать это можно предложить выгрузить вывод в файл:
% mysqldump cookbook states > dump.txt
Затем скопируем dump.txt на other-host.com и запустим там команду импортирования таблицы в базу данных cb сервера:
% mysql cb < dump.txt
Есть и другой способ, не требующий использования промежуточного файла, – отправка вывода mysqldump по сети непосредственно удаленному серверу MySQL. Если с хоста, на котором расположена база данных cookbook, вы можете соединиться с обоими серверами, то выполните такую команду:
% mysqldump cookbook states | mysql -h other-host.com cb
Часть команды, относящаяся к mysqldump, устанавливает соединение с локальным сервером и пишет вывод дампа в канал. Вторая половина команды, относящаяся к mysql, соединяется с удаленным сервером MySQL other-host.com. Она считывает ввод из канала и отправляет каждое предложение серверу other-host.com.
Если вы не можете напрямую соединиться с удаленным сервером, применяя mysql на локальной машине, отправьте вывод дампа в канал, который использует ssh для удаленного вызова mysql на other-host.com:
% mysqldump cookbook states | ssh other-host.com mysql cb
ssh соединяется с сервером other-host.com и запускает на нем mysql. Затем из канала считывается вывод mysqldump и передается удаленному процессу mysql. Использование ssh удобно для отправки дампа по сети машине, MySQL-порт которой блокирован брандмауэром, но соединения с SSH-портом разрешены.
Если у вас нет доступа к ssh, может быть, вы можете использовать rsh. Однако программа rsh более уязвима, так что предпочтительнее применять ssh. Чтобы копировать на другой сервер несколько таблиц, укажите их имена после аргумента базы данных в команде mysqldump. Чтобы копировать всю базу данных, ничего не указывайте после имени базы данных, mysqldump скопирует все таблицы.
Если вы подумываете о том, чтобы вызвать mysqldump с опцией --all-databases для отправки всех баз данных на другой сервер, помните, что вывод будет включать таблицы базы данных mysql, в том числе таблицы привилегий.
Если удаленный сервер работает с другим множеством пользователей, то вы навряд ли захотите заменить таблицы его привилегий!