Как я могу переместить таблицы MySQL с одного физического сервера на другой?
Например, такой точный сценарий: у меня есть сервер MySQL, который использует таблицу innodb и имеет размер около 20 ГБ.
Я хочу переместить его на новый сервер, какой самый эффективный способ сделать это?
Ответы:
Мой любимый способ - передать команду sqldump команде sql. Вы можете сделать все базы данных или конкретную. Так, например,
Вы можете сделать все базы данных с
Единственная проблема заключается в том, что база данных слишком велика и канал разрушается. В этом случае вы можете сделать таблицу за таблицей или любым из других методов, упомянутых ниже.
источник
netcat
.Я недавно переместил базу данных на 30 ГБ со следующей ошибкой:
Старый сервер
~/mysqldata/*
)tar -czvf mysqldata.tar.gz ~/mysqldata
)Новый сервер
tar -xzvf mysqldata.tar.gz
)источник
В соответствии с Руководством по изучению сертификации MySQL 5.0 , глава 32, раздел 32.3.4, стр. 456 457 описаны условия двоичной переносимости, в которых описывается следующее:
Существует два основных способа перемещения отдельных таблиц на основе механизма хранения.
Для данного примера предположим следующее:
MyISAM таблицы
Если mydb.mytable использует механизм хранения MyISAM, таблица будет физически отображаться как три отдельных файла.
.Frm содержит структуру таблицы
.MYD содержит данные таблицы
.MYI содержит страницу индекса таблицы
Эти файлы используются взаимозависимо для представления таблицы с логической точки зрения в MySQL. Так как эти файлы не имеют дальнейшей логической привязки к нему, перенос таблицы с одного сервера БД на другой. Вы даже можете сделать это с сервера Windows на сервер Linux или MacOS. Конечно, вы можете отключить MySQL и скопировать 3 файла таблицы. Вы можете запустить следующее:
в одном сеансе SSH держать таблицу только для чтения и удерживать блокировку в течение 24 часов. Через секунду выполните копирование в другой сессии ssh. Затем завершите сеанс mysql с 24-часовой блокировкой. Вам не нужно ждать 24 часа.
Таблицы InnoDB
Исходя из вышеупомянутой цитаты из книги сертификации, существует множество факторов, которые определяют, как сделать резервную копию конкретной таблицы InnoDB. Для простоты, ясности и краткости просто выполните mysqldump желаемой таблицы, используя параметры --single-транзакции, чтобы получить идеальный дамп таблицы на момент времени. Не нужно разбираться с семантикой InnoDB, если вам нужна только одна таблица. Вы можете перезагрузить этот дамп-файл на любой сервер MySQL по вашему выбору.
Поскольку два вопроса были объединены здесь (Jcolebrand): РЕДАКТИРОВАТЬ
Если вы более чем готовы жить с некоторой медленной производительностью БД, вы можете выполнить серию rsyncs со старого сервера (ServerA) на новый сервер (ServerB), даже если mysql все еще работает на ServerA.
Шаг 01) Установите ту же версию MySQL на сервере B, что и у ServerA
Шаг 02) На сервере A, запустите
SET GLOBAL innodb_max_dirty_pages_pct = 0;
из mysql и около 10 минут (Это удаляет грязные страницы из пула буферов InnoDB. Это также помогает быстрее выполнять завершение работы mysql) Если ваша база данных - это MyISAM, вы можете пропустить этот шаг.Шаг 03)
rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql
Шаг 04) Повторяйте шаг 03, пока rsync не займет менее 1 минуты
Шаг 05)
service mysql stop
на сервере АШаг 06) Выполните еще одну rsync
Шаг 07)
scp ServerA:/etc/my.cnf ServerB:/etc/
Шаг 08)
service mysql start
на сервере BШаг 08)
service mysql start
на сервере А (необязательно)Попробуйте!
ПРЕДОСТЕРЕЖЕНИЕ
Вы можете создать подчиненное устройство репликации следующим образом. Просто помните, что в главном /etc/my.cnf явно указывается идентификатор сервера, а в ведомом /etc/my.cnf - другой номер для идентификатора сервера.
источник
Вам даже не нужен mysqldump, если вы перемещаете всю схему базы данных, и вы готовы остановить первую базу данных (поэтому она согласована при передаче)
Я не могу вспомнить, обрабатывает ли mysqldump пользователей и разрешения, или только данные ... но даже если это так, это намного быстрее, чем делать дамп и запускать его. Я бы использовал это, только если мне нужно было выгрузить базу данных mysql, чтобы затем вставить ее в какую-то другую СУБД, если мне нужно было изменить параметры хранения (innodb против myisam), или, возможно, если бы я менял основные версии mysql (но Я думаю, что я сделал это между 4 и 5, хотя)
источник
--all-databases
дампы схемы mysql. Запуск mysql на следующей машине вызывает разрешения, если вы перенесли папку данных на другую машину с тем же основным выпуском MySQL. (MySQL 5.5.x в MySQL 5.5.x, MySQL 5.1.x в MySQL 5.1.x, MySQL 5.0.x в MySQL 5.0.x)mysqldump
обрабатывает пользователей и разрешения, так как они хранятся вmysql
схеме.Если вы просто хотите переместить конкретную таблицу, попробуйте:
mysqldump -u username -ppassword databasename tablename > databasename.tablename.sql
Вы можете указать больше имен таблиц выше, в той же команде. После завершения команды переместите файл databasename.tablename.sql на другой сервер, а затем восстановите, используя:
Обратите внимание, что обратный файл .sql создается с помощью программы mysqldump , а восстановление выполняется непосредственно в mysql .
источник
Может быть такая возможность, когда вы перемещаете реальные файлы базы данных (для моей установки они расположены в / var / lib / mysql), но я не совсем уверен, как это будет действовать / работать.
источник
Тебе нужно взять время простоя. Это займет некоторое время в зависимости от скорости вашей сети. Я собираюсь предположить, что вы работаете с MySQL в Linux / Unix. Вот процесс, который я использую:
Затем продолжайте как обычно, настраивая локальный MySQL.
* Примечание: вы также можете использовать параметр -c с rsync, чтобы добавить контрольную сумму к передаче, однако это будет медленным, в зависимости от скорости процессора.
источник
Я могу подтвердить, что метод DTest также работает для копирования между Ubuntu и OSX.
Чтобы скопировать все базы данных без каких-либо дампов или чего-либо подобного:
Убедитесь, что у вас есть чистый mysql из mysql (установил dmg, скачанный с mysql http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-5.1.63-osx10.6-x86_64.dmg ), что (ОЧЕНЬ ВАЖНО) никогда не запускался.
Скопируйте содержимое папки / var / lib / mysql / с компьютера с Ubuntu поверх / usr / local / mysql / data / contents на компьютере Mac. Чтобы получить доступ к папке получения на машине с Ubuntu, мне пришлось использовать sudo, то есть:
Я скопировал папку с помощью scp.
Перед тем, как начать, возьмите копию папки mysql на Mac, чтобы убедиться, что вы ничего не испортили.
После копирования папки выполните следующие действия на компьютере Mac:
Запустите сервер mysql в первый раз (из панели настроек в System Preferences-> mysql). Все пользователи и базы данных теперь должны быть настроены правильно.
Это работало с MySQL 5.1.61 на Ubuntu 64 бит 11.10 и MySQL 5.1.63 на OSX LION (MacBook Pro).
источник
Я думаю, что все предыдущие ответы, вероятно, работают нормально, но на самом деле не решают проблему установки имени базы данных во время передачи.
Вот как я это сделал с помощью bash:
Вы могли бы быть лучше использовать ,
rsync
чемscp
и не сжимать файл , если вы делаете это часто.На моем исходном сервере:
На моем сервере назначения:
На любой машине, чтобы увидеть прогресс:
Все это предполагает, что у вас есть файл конфигурации MySQL в вашем домашнем каталоге на обеих машинах и установлены разрешения:
источник
вы перемещаете его на другой сервер базы данных MySQL? если это так, используйте экспорт
источник
Общий метод Linux:
отредактируйте datadir (и сокет) для mysqld и mysqld_safe (если применимо), чтобы указать новое местоположение, затем
Я опубликовал это, потому что никто, кажется, просто не перечислил наименьшее количество шагов, чтобы сделать это, и я чувствую, что это самый простой способ лично.
источник
Возможно, это лучший способ сделать это:
Версия 1 : копирование файлов данных (только MYISAM)
Версия 2 : mysqldump
Версия 3 : master / slave + mysqldump / file-copy
сценарий:
PS:
для копирования небольших таблиц используйте:
источник
Я бы предложил два простых шага для переноса всей базы данных с одного сервера на другой.
Шаг 1 : Сделайте полное резервное копирование баз данных на исходном сервере, используя mysqldump .
Шаг 2 : Вы можете использовать команду rsync для передачи всей базы данных на конечный сервер.
источник