PHP скрипты

MySQL

Apache

phpMyADmin

4.1: Резервирование баз данных MySQL

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Резервирование баз данных MySQL

Несмотря на то, что данная книга ориентирована на пользователей пакета, иногда им требуется выполнять простые административные задачи, например резервирование и восстановление баз данных. Сложными делами, понятно, должен заниматься администратор, но иногда он может доверить выполнение простых задач достаточно квалифицированному пользователю.

Поскольку таблицы MySQL сохранены как файлы, просто сделайте копию. Чтобы получить однозначную копию, скомандуйте LOCK TABLES на релевантных таблицах, а затем FLUSH TABLES для них же, дабы гарантировать запись всех данных на диск. Подробности по этим командам есть в разделах 9.7.2 «Синтаксис LOCK TABLES/UNLOCK TABLES» и 4.8 «Синтаксис FLUSH».

Вам нужна только блокировка записи. Это позволяет другим потокам продолжать делать запросы к таблицам, в то время как вы делаете копию файлов в каталоге баз данных. Команда FLUSH TABLE необходима, чтобы гарантировать, что все активные индексные данные записаны на диск прежде, чем вы запустите процесс копирования.

Если вы хотите делать копию уровня SQL из таблицы, вы можете использовать SELECT INTO OUTFILE или BACKUP TABLE. Подробности в разделах 8.1. «Синтаксис SELECT» и 4.2 «Синтаксис BACKUP TABLE».

Другой способ поддержать базу данных состоит в том, чтобы использовать программу mysqldump или скрипт mysqlhotcopy. Подробности в разделах 12.5. «mysqldump, дамп структур таблиц и данных» и 12.6 «mysqlhotcopy, копирование баз данных и таблиц MySQL».

Для полного резервирования баз данных надо скомандовать:

shell> mysqldump -tab=/path/to/some/dir -opt -full

или

shell> mysqlhotcopy database /path/to/some/dir

Вы можете также просто скопировать все файлы таблицы (*.frm, *.MYD и *.MYI), пока сервер что-нибудь не модифицирует. Скрипт mysqlhotcopy использует этот метод.

Если вам нужно что-либо восстановить, попробуйте восстанавливать таблицы, используя REPAIR TABLE или myisamchk -r. Это эффективно в 99.9% случаев. Если myisamchk ничего хорошего не сделал, попробуйте провести следующую процедуру (это будет работать только, если вы запустили MySQL с опцией —log-update):

  • восстановите оригинальную копию mysqldump;
  • выполните следующую команду, чтобы заново выполнить модификации в двоичном файле регистрации:
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
  • если вы используете файл регистрации модификации, вы можете использовать:
shell> ls -1 -t -r hostname. [0-9] * | xargs cat | mysql

Команда Is используется для получения всех журналов модификации в правильном порядке.

Вы можете также создавать выборочные копии: SELECT * INTO OUTFILE file_name FROM tbl_name и восстанавливать их: LOAD DATA INFILE file_name REPLACE ... Чтобы избежать двойных записей, нужен PRIMARY KEY или UNIQUE в таблице. Ключевое слово REPLACE заменяет старые записи на новые, когда новая запись дублирует старую запись с уникальным значением ключа.

Если у вас возникают проблемы при создании копий на вашей системе, можно решить их установкой репликации и созданием копий на подчиненной системе вместо главной. Это задачи администратора.

Поделиться с друзьями