MySQL error «Can’t create new tempfile» при восстановлении таблицы.
В логах mysql много ошибок подобного рода.
120920 9:25:28 [ERROR] /usr/sbin/mysqld: Table ’./old_sm/phones’ is marked as crashed and last (automatic?) repair failed
Поскольку автоматическое исправление не сработало, то будем исправлять вручную.
Перед любым таким действием настоятельно рекомендуется сделать резервное копирование данных.
Заходим в командную строку mysql.
Запускаем проверку таблицы.
mysql -u root -p stalker_db
mysql> check table phones;
+——————————-+—-+———+—————————————————————+
| Table | Op | Msg_type | Msg_text |
+——————————-+—-+———+—————————————————————+
| old_sm.phones | check | warning | Table is marked as crashed and last repair failed |
| old_sm.phones | check | error | Found 6833 keys of 3930951 |
| old_sm.phones | check | error | Corrupt |
+——————————-+—-+———+—————————————————————+
3 rows in set (0.37 sec)
Запускаю восстановление таблицы.
mysql> repair table phones;
+——————————-+——+———+————————————————————-+
| Table | Op | Msg_type | Msg_text |
+——————————-+——+———+————————————————————-+
| old_sm.phones | repair | error | Can’t create new tempfile: ’./old_sm/phones.TMD’ |
| old_sm.phones | repair | status | Operation failed |
+——————————-+——+———+————————————————————-+
2 rows in set (0.01 sec)
Т. е. при запущенном mysql-сервере восстановлению не подлежит. Останавливаю mysql
service mysql stop
Запускаю восстановление с помощью myisamchk. Данный метод будем работать с таблицами на движке MyISAM. Если у вас таблицы на движке InnoDB может помочь пересоздание таблицы с заливкой старых данных.
root@112-1:/var/lib/mysql/old_sm# myisamchk -r -f phones.MYI
— recovering (with sort) MyISAM-table ’phones.MYI’
Data records: 3930951
— Fixing index 1
— Fixing index 2
— Fixing index 3
— Fixing index 4
— Fixing index 5
Запускаю mysql сервер
service mysql start
Ошибка пропала, что и требовалось.