Възтановяване на InnoDB таблици в MySQL
Привет,
Наскоро един наш MySQL сървър крашна (заради спиране на тока) и след като запали, наблюдавахме много проблеми с InnoDB таблици от типа:
11:43:59 mentos mysqld: 160607 11:43:59 [Warning] InnoDB: Cannot open table finance/users from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
Стигне ли се до тук, най-лесното възтановяване става от dump на базата и restore. Обаче ако нямаме такъв става весело!
В този пост ще споделя как оправих подобен проблем с бази които нямаха бекъп, чрез mysql-utilities.
- Инсталирах mysql-apt-config от сайта на MySQL (задължително трябва да е най-новата версия, че старите правиха проблеми) – нужен е заради mysqlfrm
- Направих копие на /var/lib/mysql/ в /root/mysql/
- Следвах следните стъпки:
В моят случай базата finance беше счупена – нито една нейна таблица не работеше. За възтановяването беше нужно да изкарам структурата на всяка една от тези таблици. Това става по следния начин:
root@mysql-niki-test:/var/lib/mysql/finance# mysqlfrm --basedir /usr --port 3316 --user=root --verbose /root/mysql/finance/users.frm # Spawning server with --user=root. # Starting the spawned server on port 3316 ... done. # Reading .frm files # # Reading the users.frm file. # # CREATE statement for /root/mysql/finance/users.frm: # CREATE TABLE `finance`.`users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `names` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL, `is_admin` tinyint(4) NOT NULL DEFAULT '0', `department_id` int(11) NOT NULL, `active` tinyint(4) NOT NULL, `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_email_unique` (`email`), KEY `department_id` (`department_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci