За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Дамп таблиц. Операторы BACKUP TABLE и RESTORE TABLE в MySQL

Февраль11
Сольвентный принтер для печати широкого формата.

Ковыряясь в документации по 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)

Восстановление длится дольше, т.к. необходимо построить индексы.

Всем удачи.

Статья просмотренна 124239 раз, зашло посетителей 18718

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Ноябрь 2024
Пн Вт Ср Чт Пт Сб Вс
« Июл    
 123
45678910
11121314151617
18192021222324
252627282930  

Сейчас на сайте