Востановление базы данных 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

module (3) mysql (2) drush (2) pass (1) bootstrap (1) update (1) modal (1) theme (1) css (1) proxy (1) custom (1) sftp (1) php (1) twig (1) mail (1) backups (1) telegram (1) new year (1) Вёрстка (1) ssh (1) Интеграция вёрстки (1)