Востановление базы данных MySQL mariadb из файлов *.frm и *.ibd

Tags: 
Drupal version: 

Намучался изрядно, прежде чем нашёл решение проблемы. 

Были файлы таблицы *.frm и *.ibd , а вот схемы действий небыло. 

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

1. создаем структуру таблиц

2. заменяем фалы *.ibd на наши, которые востанавливаем

но не всё так просто

а теперь подробнее.

создание структуры таблиц

1. Ставим утилиту

 curl -s http://get.dbsake.net > dbsake 
 chmod u+x dbsake 

2. Востанавливаем структуру таблиц

./dbsake frmdump /path/to/*.frm > recover.sql

где /path/to/ путь до папки с файлами вашей бд

3. Создаем базу данных из файла recover.sql

4. Начинаем востанавливать таблички БД например через phpmyadmin... Для начала чистим. 

ALTER TABLE example_table DISCARD TABLESPACE;

5. Заливаем в папку с БД наш файл example_table.ibd из папки /path/to/

6. Меняем права на залитый файл 

chown mysql:mysql example_table.ibd

7.Имопртируем данные

ALTER TABLE example_table IMPORT TABLESPACE;

Вот и всё.

Для ускореня я написал скрипт php, который парсит файл recover.sql и создает список комманд, для упрощения. Я проделал это в три этапа и востановление заняло 5 минут.


 

<?php
$table = file_get_contents ("recover.sql" );
$table = explode("\r\n", $table);

foreach ($table as $row) {
    preg_match_all('{CREATE TABLE `(.*?)`}is', $row, $matches);
}
print '<b>Список Таблиц</b>'."\r\n";
print implode("\r\n", $matches[1]);

print "\r\n";
print "\r\n";
print '####### 1 Список запросов DISCARD TABLESPACE #######'."\r\n";
print "\r\n";
foreach ($matches[1] as $str) {
    print 'ALTER TABLE '.$str.' DISCARD TABLESPACE;'."\r\n";
}
print "\r\n";
print "\r\n";
print '####### 2 Меняем права #######'."\r\n";
print "\r\n";
print 'chown mysql:mysql ';
foreach ($matches[1] as $str) {
    print $str.'.ibd ';
}


print "\r\n";
print "\r\n";
print '####### 3 Список запросов IMPORT TABLESPACE #######'."\r\n";
print "\r\n";
foreach ($matches[1] as $str) {
    print 'ALTER TABLE '.$str.' IMPORT TABLESPACE;'."\r\n";
}

 





 

Tags

mysql (2) ssh (1) custom (1) module (1) proxy (1) css (1) theme (1) modal (1) update (1) drush (1) bootstrap (1) pass (1)