Резервное копирование MySQL: Могу ли я скопировать отдельные файлы таблиц MyISAM на другой сервер с другой версией MySQL и другой ОС? - PullRequest
3 голосов
/ 25 декабря 2009

Я имею в виду копирование отдельных файлов таблицы MyISAM:
(закройте mysqld и скопируйте файлы .frm, .myd и .myi из одной папки базы данных в другую)


Вопрос:
(а) я могу использовать этот способ для резервного копирования папки базы данных MySQL с одного сервера на другой сервер с другой версией MySQL?

(б) могут ли эти файлы резервных копий перемещаться в разные ОС? (пример: от Debian к Centos)

Ответы [ 5 ]

7 голосов
/ 07 апреля 2010

Только копии файлов MyISAM на уровне файлов между версиями серверов с одинаковыми:
- ЦП 'endian' (SPARC! = X86)
- Версии MySQL могут быть обновлены без преобразования (копирование 5.0.48 в 5.0.52 некорректно из-за изменений структуры индекса, но копирование 5.0.52 в 5.1.45 допустимо).

Остерегайтесь условий гонки ... Возможно, вы обращаетесь к файлам с помощью FTP или другого инструмента, пока база данных читает таблицу. В .MYI обновлены «счетчики» таблицы даже для самых простых операций чтения таблиц.

Я обнаружил, что следующее обеспечит целостность таблиц MyISAM для любых манипуляций на уровне файлов:

LOCK TABLE x WRITE;
FLUSH TABLE x; -- closes all file handles into table by mysql.
   < perform file-level manipulations >
FLUSH TABLE x; -- A 'stat' of the table occurs and info-schema is updated appropriately.
UNLOCK TABLES;

Если вы НЕ блокируете и не пишете свою таблицу, mysql может получить к ней доступ (чтение или запись), пока вы выполняете копирование / манипулирование на уровне файлов.

Это также тот же механизм, который используется для разрешения «myisampack», «myisamchk» для таблиц в базе данных HOT, для которой даже отключена внешняя блокировка, без опасений повреждения.

- Дж. Йоргенсон -

2 голосов
/ 25 декабря 2009

а) Пока вы не выключаете mysql, перемещение файлов myisam между серверами одной и той же версии работает нормально (однако это НЕ верно для других движков). В общем, вы могли бы даже переключаться между разными второстепенными версиями (хотя это не так гарантировано).

б) Debian в CentOS должен работать нормально. В общем, единственные потенциальные проблемы, которые могут возникнуть при переходе через операционные системы, - это разные структуры папок (это не проблема для большинства дистрибутивов Linux) или операционные системы с различным порядком байтов (в наши дни это тоже очень редкая проблема).

1 голос
/ 27 декабря 2009

Может быть. Я уточню.

ДА, если они имеют одинаковую вспомогательную версию и имеют идентичные версии my.cnf.

ДА, если вы переходите с 5.0 или выше на другую 5.0 или выше, и у вас есть идентичный my.cnf

НЕТ, если вы используете полнотекстовое индексирование, и любой из его параметров настроен по-разному, включая стоп-слова (СОВЕТ: не используйте полнотекстовое индексирование).


Но в общем случае нет, и я бы сказал, что вы можете перейти на другую машину только в том случае, если она запускает тот же двоичный файл mysql, что и исходный. Если вы планируете делать что-то еще, тщательно протестируйте. Изменения в формате могут быть незначительными и могут работать (пример: тонкости сопоставления, вызывающие проблемы с i18n при сканировании диапазона индекса).

Содержимое вашего my.cnf влияет на поведение и может сделать существующую таблицу недопустимой, в частности полнотекстовую индексацию.

У меня возникли трудности даже при переходе на более новую версию, потому что, хотя она утверждает, что работает, старые версии MyISAM вызывают непредсказуемое поведение и в долгосрочной перспективе приводят к сбоям (мы говорим о нескольких днях постоянной имитации нагрузки на большие наборы данных Вот). Это означало, что для 4.1 - 5 мне пришлось перенести весь набор данных с помощью REPAIR TABLE.

Если какие-либо различия в формате myisam приведут к несовместимости, REPAIR TABLE всегда исправляет их (при условии, что mysql может читать таблицу ВСЕ - не с 5.0 до 4.1, например!)

Всегда проводите тест на выдержку / стресс при планировании обновления, это может выявить проблемы, о которых MySQL не знал.

0 голосов
/ 25 декабря 2009

Если версии разные, лучше всего просто завести таблицы mysqldump, а затем импортировать их с помощью mysql.

0 голосов
/ 25 декабря 2009

Вы можете перемещать файлы и проверять их с помощью инструментов mysql, если у вас такая же версия MySql Server. Я не думаю, что есть какие-либо проблемы с ОС. Но версия должна быть такой же для сервера MySQL.

...