17.6.1.4 Перемещение или копирование таблиц InnoDB
В этом разделе описаны методы перемещения или копирования некоторых или всех InnoDB таблиц на другой сервер или экземпляр. Например, вы можете перенести весь экземпляр MySQL на более мощный и быстрый сервер; вы можете клонировать весь экземпляр MySQL на новый сервер-реплика; вы можете скопировать отдельные таблицы в другой экземпляр для разработки и тестирования приложения или на сервер хранилища данных для создания отчётов.
В Windows, InnoDB база данных и имена таблиц всегда хранятся в нижнем регистре. Чтобы переместить базы данных в двоичном формате с Unix на Windows или с Windows на Unix, создайте все базы данных и таблицы с использованием имён в нижнем регистре. Удобный способ сделать это — добавить следующую строку в раздел [mysqld] вашего файла my.cnf или my.ini перед созданием баз данных или таблиц:
[mysqld]
lower_case_table_names=1
Запрещается запускать сервер с параметром lower_case_table_names, отличающимся от параметра, используемого при инициализации сервера.
Методы перемещения или копирования InnoDB таблиц включают:
Импортирование таблиц
Таблица, находящаяся в файловой табличном пространстве, может быть импортирована из другого экземпляра MySQL или из резервной копии с помощью функции Переносимое табличное пространство. См. Раздел 17.6.1.3, «Импортирование таблиц InnoDB».
MySQL Enterprise Backup
Продукт MySQL Enterprise Backup позволяет создавать резервные копии работающей базы данных MySQL с минимальным прерыванием работы, создавая последовательную моментальную фотографию базы данных. При копировании таблиц MySQL Enterprise Backup позволяет продолжать чтение и запись. Кроме того, MySQL Enterprise Backup может создавать сжатые файлы резервных копий и резервировать подмножества таблиц. В сочетании с бинарным журналом MySQL можно выполнить восстановление по состоянию на определённый момент времени. MySQL Enterprise Backup включён в подписку MySQL Enterprise.
Для получения дополнительной информации о MySQL Enterprise Backup, см. Раздел 32.1, «Обзор MySQL Enterprise Backup».
Копирование файлов данных (метод холодного резервного копирования)
Вы можете переместить базу данных InnoDB, просто скопировав все соответствующие файлы, указанные в разделе "Холодные резервные копии" в Разделе 17.18.1, «Резервное копирование InnoDB».
Файлы данных и журналов InnoDB совместимы во всех платформах, имеющих одинаковый формат чисел с плавающей точкой. Если форматы чисел с плавающей точкой отличаются, но вы не использовали типы данных FLOAT или DOUBLE в ваших таблицах, то процедура остаётся прежней: просто скопируйте соответствующие файлы.
При перемещении или копировании файлов табличного пространства .ibd имя каталога базы данных должно быть одинаковым на исходной и целевой системах. Определение таблицы, хранящееся в общем табличном пространстве InnoDB, включает имя базы данных. Идентификаторы транзакций и номера последовательности журналов, хранящиеся в файлах табличного пространства, также различаются между базами данных.
Чтобы переместить файл .ibd и соответствующую таблицу из одной базы данных в другую, используйте оператор RENAME
TABLE:
RENAME TABLE db1.tbl_name TO db2.tbl_name;
Если у вас есть “чистая” резервная копия файла .ibd, вы можете восстановить его в установку MySQL, откуда он произошёл, следующим образом:
Таблица не должна была быть удалена или усечена с момента копирования файла
.ibd, так как это изменяет идентификатор таблицы, хранящийся внутри табличного пространства.-
Выполните этот оператор
ALTER TABLEдля удаления текущего файла.ibd:ALTER TABLE
tbl_nameDISCARD TABLESPACE; Скопируйте резервную копию файла
.ibdв соответствующий каталог базы данных.-
Выполните этот оператор
ALTER TABLE, чтобы указатьInnoDBиспользовать новый файл.ibdдля таблицы:ALTER TABLE
tbl_nameIMPORT TABLESPACE;ПримечаниеФункция
ALTER TABLE ... IMPORT TABLESPACEне проверяет ограничения внешних ключей на импортированные данные.
В данном контексте “чистая” резервная копия файла .ibd — это резервная копия, удовлетворяющая следующим требованиям:
В файле
.ibdнет незавершенных изменений транзакций.В файле
.ibdнет неслитых записей буфера вставок.Очистка удалила все помеченные удалением записи индексов из файла
.ibd.mysqld сбросил все изменённые страницы файла
.ibdиз буфера в файл.
Вы можете создать чистую резервную копию файла .ibd следующим образом:
Остановите всю активность сервера mysqld и подтвердите все транзакции.
Дождитесь, пока
SHOW ENGINE INNODB STATUSпокажет, что активных транзакций в базе данных нет, и основной статус потокаInnoDB—Waiting for server activity. Затем можно скопировать файл.ibd.
Другой способ создания чистой копии файла .ibd — использование продукта MySQL Enterprise Backup:
Используйте MySQL Enterprise Backup для создания резервной копии установки
InnoDB.Запустите второй сервер mysqld на резервной копии и дайте ему очистить файлы
.ibdв резервной копии.
Восстановление из логического резервного копирования
Вы можете использовать утилиту, такую как mysqldump, для создания логической резервной копии, которая создаёт набор операторов SQL, которые можно выполнить для воспроизведения исходных определений объектов базы данных и данных таблиц для переноса на другой сервер SQL. При использовании этого метода не имеет значения, отличаются ли форматы или содержат ли ваши таблицы данные с плавающей точкой.
Для повышения производительности отключите autocommit при импорте данных. Выполняйте коммит только после импорта всей таблицы или части таблицы.
© 2025 Oracle
Licensed under the GPLv2 License.