Дамп таблиц. Операторы BACKUP TABLE и RESTORE TABLE в MySQL
Ковыряясь в документации по MySQL я наткнулся на два оператора RESTORE TABLE(S) и BACKUP TABLE(S). Буква S на конце говорит, что можно писать и TABLE, и TABLES — это синонимы. Эти операторы позволяют делать копирование файлов данных таблиц. Применяются ТОЛЬКО к таблицам типа MyISAM.
Как же оно работает?
Оператор BACKUP TABLE(S) делает копирование файлов .MYD (данные таблицы) и файл описание структуры таблицы .FRM, файл индексов .MYI не копируется, т.к. может быть построен на основании двух вышеперечисленных файлов.
Синтаксис оператора BACKUP TABLE(S):
BACKUP TABLE tbl_name [, tbl_name] ... TO '/путь/к/резервному/каталогу';
Через запятую перечисляем копируемые таблицы. Путь, куда будет копироваться дамп таблиц, должен существовать, иначе БД вернет ошибку:
LOCK TABLE users READ; BACKUP TABLE users TO 'd:\\1\\'\G;
конструкция \G — говорит о том, чтобы данные в консоли выводились не по горизонтали, а по вертикали, удобно, если итоговые данные содержат много полей или в поле длинное значение.
*************************** 1. row *************************** Table: test.users Op: backup Msg_type: error Msg_text: Failed copying .frm file (errno: 2) *************************** 2. row *************************** Table: test.users Op: backup Msg_type: Warning Msg_text: The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 6.0. Please use MySQL Administrator (mysqldump, mysql) instead *************************** 3. row *************************** Table: test.users Op: backup Msg_type: Error Msg_text: Can't create/write to file 'd:\1\users.frm' (Errcode: 2) *************************** 4. row *************************** Table: test.users Op: backup Msg_type: status Msg_text: Operation failed 4 rows in set (0.00 sec)
Как видно, БД предупреждает, что данные оператор будет опущен в 6-й версии (пока доживем, многие еще юзают 5.0).
Как еще было указано перед создание копии была сделана блокировка таблицы на чтение, оператором:
LOCK TABLE users READ;
делается это для того, чтобы не было возможности менять данные во время копии.
Если все сделано верно, то получаем такое сообщение:
mysql> LOCK TABLE users READ; BACKUP TABLE users TO 'd:\\'\G; *************************** 1. row *************************** Table: test.users Op: backup Msg_type: Warning Msg_text: The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 6.0. Please use MySQL Administrator (mysqldump, mysql) instead *************************** 2. row *************************** Table: test.users Op: backup Msg_type: status Msg_text: OK 2 rows in set (0.16 sec)
Копия сделана, теперь её можно восстановить, на помощь придет оператор RESTORE TABLE(S), он имеет следующий синтаксис:
RESTORE TABLE tbl_name [, tbl_name] ... FROM '/путь/к/резервному/каталогу';
При восстановлении, также необходимо, чтобы путь существовал и указание пути задаётся абсолютным. Еще одной особенностью восстановления является то, что восстанавливаемая таблица должна отсутствовать в БД. Иначе будет ошибка:
mysql> RESTORE TABLE users FROM 'd:\\'; +-------+---------+----------+---------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-------+---------+----------+---------------------------------------------+ | users | restore | error | table exists, will not overwrite on restore | +-------+---------+----------+---------------------------------------------+ 1 row in set, 1 warning (0.00 sec)
При успешном восстановлении на экране будет такая надпись:
mysql> RESTORE TABLE users FROM 'd:\\'\G; *************************** 1. row *************************** Table: test.users Op: restore Msg_type: Warning Msg_text: The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 6.0. Please use MySQL Administrator (mysqldump, mysql) instead *************************** 2. row *************************** Table: test.users Op: restore Msg_type: status Msg_text: OK 2 rows in set (0.14 sec)
Восстановление длится дольше, т.к. необходимо построить индексы.
Всем удачи.
Статья просмотренна 124159 раз, зашло посетителей 18677