Кажется, пора попросить помощь зала^W лора:
TL;DR: myisamchk -rq
не восстанавливает файл индексов после mysqlhotcopy --noindices
.
Есть узкоспециализированный софт, работающий на RHEL.
Он использует MySQL и выполняет резервное копирование своих баз данных с помощью mysqlhotcopy --noindices
.
Восстановление из резервной копии включает шаг myisamchk -rq
и на одной из таблиц завершается с ошибкой:
/usr/bin/myisamchk: Unknown error 126
myisamchk: error: '/var/lib/mysql/db/Foo.MYI' doesn't have a correct index definition. You need to recreate it before you can do a repair
# ls -l /var/lib/mysql/db/Foo.MYI
rw-r--r-- 1 mysql mysql 2048 Jul 21 01:02 /var/lib/mysql/db/Foo.MYI
# mysql db
mysql> check table Foo;
+--------+-------+----------+-----------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------+-------+----------+-----------------------------------------------------------------+
| db.Foo | check | Error | Incorrect key file for table './db/Foo'; try to repair it |
| db.Foo | check | Error | Incorrect key file for table 'Foo'; try to repair it |
| db.Foo | check | error | Corrupt |
+--------+-------+----------+-----------------------------------------------------------------+
После truncate
, размер файла индексов увеличивается (2048 -> 3072) и таблица проходит проверку:
mysql> set autocommit=1;
Query OK, 0 rows affected (0.00 sec)
mysql> truncate table Foo;
Query OK, 0 rows affected (0.01 sec)
mysql> check table Foo;
+--------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------+-------+----------+----------+
| db.Foo | check | status | OK |
+--------+-------+----------+----------+
1 row in set (0.01 sec)
mysql> select * from Foo;
Empty set (0.01 sec)
# ls -l /var/lib/mysql/db/Foo.*
-rw-rw---- 1 mysql mysql 30482 Mar 3 08:03 /var/lib/mysql/db/Foo.frm
-rw-rw---- 1 mysql mysql 0 Jul 21 01:02 /var/lib/mysql/db/Foo.MYD
-rw-r--r-- 1 mysql mysql 3072 Jul 21 01:02 /var/lib/mysql/db/Foo.MYI
Но при следующем резервном копировании (даже пустой таблицы) ситуация повторяется...