14.6.1.4 Перемещение или копирование таблиц InnoDB
В этом разделе описаны методы перемещения или копирования некоторых или всех InnoDB таблиц на другой сервер или экземпляр. Например, вы можете перенести весь экземпляр MySQL на более крупный и быстрый сервер; вы можете клонировать весь экземпляр MySQL на новый сервер-реплика; вы можете скопировать отдельные таблицы в другой экземпляр для разработки и тестирования приложения или на сервер хранилища данных для подготовки отчётов.
В Windows, InnoDB имена баз данных и таблиц всегда хранятся в нижнем регистре. Чтобы перемещать базы данных в двоичном формате с Unix на Windows или с Windows на Unix, создавайте все базы данных и таблицы с именами в нижнем регистре. Удобный способ сделать это — добавить следующую строку в раздел [mysqld] вашего файла my.cnf или my.ini перед созданием каких-либо баз данных или таблиц:
[mysqld]
lower_case_table_names=1
Методы перемещения или копирования InnoDB таблиц включают:
Импорт таблиц
Таблица, которая находится в файловой табличной области, может быть импортирована из другого экземпляра сервера MySQL или из резервной копии с помощью функции Переносимая таблица. Смотрите Раздел 14.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 см. в Разделе 28.1, “Обзор MySQL Enterprise Backup”.
Копирование файлов данных (метод холодного резервного копирования)
Вы можете перенести InnoDB базу данных, просто скопировав все соответствующие файлы, перечисленные в разделе «Холодные резервные копии» в Разделе 14.19.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.