Назад | Перейти на главную страницу

поведение оболочки оболочки с MySQLDump

Я использую mysqldump для большой базы данных (несколько ГБ) и импортирую результат из канала, см. Команды ниже, выполняет ли он инкрементный канал или дождитесь завершения первого, а затем импортируйте? это хороший способ импорта больших БД между серверами? Я знаю, что вы можете экспортировать его в gz, затем в pscp и затем импортировать. Приветствуется быстрая альтернатива

mysqldump -u root -ppass -q mydatabase | mysql -u root -ppass --host=xxx.xx.xxx.xx --port=3306 -C mydatabase

mysqldump выводит команды SQL, которые удаляют таблицы (если они существуют), создают их, а затем заполняют таблицы по одной строке за раз. Каждый оператор выполняется, как только он прочитан; это включает в себя обновление индексов соответствующим образом после каждого оператора и ведение любого настроенного вами журнала. Он чрезвычайно надежен и портативен и, следовательно, прекрасно подходит для резервного копирования, но это настолько неэффективный механизм передачи, который вы могли бы придумать.

Если вы справляетесь с весь набор баз данных, вы можете сократить этот процесс, просто скопировав файлы базы данных (обычно находятся в /var/lib/mysql). Двоичный формат для более популярных механизмов хранения переносим для разных архитектур, что делает копию файла относительно надежной. Тем не менее, убедитесь, что вы предприняли шаги для предотвращения изменения данных при копировании, заблокировав таблицы или просто выключив MySQL до завершения процесса копирования (или архивирования).

Обратите внимание, что MyISAM хранит все свои файлы в подкаталоге схемы, поэтому /var/lib/mysql/mydb/ будет содержать все, что вам нужно для схемы («базы данных»), называемой mydb. Просто скопируйте этот подкаталог на другой сервер, и все готово. Однако таблицы InnoDB по умолчанию хранят свои данные в /var/lib/mysql/ibdata* и /var/lib/mysql/ib_logfile*, разделяя эти файлы между всеми другими различными таблицами InnoDB на сервере. Итак, если вы используете InnoDB, mysqldump ваш единственный действительно безопасный вариант, если вы не переносите все.

Он делает это «постепенно» *. В частности, второй процесс будет выполнять инструкцию mysql, как только увидит ее, а первый будет отправлять инструкцию mysql каждый раз, когда встречает новую строку. \n персонаж.

* в зависимости от того, как вы определяете инкрементальный.

Чтобы быстро скопировать базу данных на удаленный хост через ssh, вы можете использовать:

mysqldump | gzip | ssh remotehost sh -c 'gunzip | mysql'

Кроме того, указывать пароли непосредственно в командной строке - это вообще плохая практика.

Если вы хотите импортировать сжатую базу данных, вы можете использовать эту команду.

zcat mydatabase.sql.gz | mysql -u root -ppass --host=xxx.xx.xxx.xx --port=3306 -C mydatabase