Дамп таблиц. Операторы 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)
Восстановление длится дольше, т.к. необходимо построить индексы.
Всем удачи.
Статья просмотренна 125701 раз, зашло посетителей 19601