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

Это значит, что сначала придется открыть сеанс MySQL. Затем можно ввести команду LOCK TABLES, чтобы блокировать все таблицы, которые планируется резервировать:

lock tables employee read, department read, client read, assignment read, employeeSkills read;

Оператор LOCK TABLES в качестве параметров получает список имен таб­лиц и тип блокировки, который необходимо применить: READ или WRITE. Для резервирования блокировки для чтения обычно бывает достаточно. Это означает, что другие потоки (связывающиеся объекты) могут продолжать читать данные таблиц, но не смогут записывать в них данные, пока резервирование не будет завершено.

Блокировка в таких ситуациях очень важна, поскольку копирование может занять достаточно много времени. В нашем случае будет катастрофой, если, на­пример, после копирования таблицы employee, но еще перед копированием таб­лицы department, кто-то удалит информацию о всех служащих какого-то отдела и информацию о самом отделе. Полученная в результате квпия будет несогласо­ванной, поскольку будет содержать информацию о служащих несуществующего отдела.

Затем следует применить команду FLUSH TABLES: flush tables;

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

flush tables with read lock;

Теперь можно копировать файлы данных. Очень важно, чтобы сеанс связи (в ходе которого вы обновили и блокировали таблицы) оставался открытым, пока выполняется копирование. Это обеспечит сохранение блокировок. В результате завершения сеанса таблицы будут разблокированы.

По завершении копирования файлов следует, конечно, разблокировать таблицы:

unlock tables;

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

Комментарии запрещены.

Фото
two 3d humans give their hand for handshake