χάμστερ :: :: ::
Feci, quod potui, faciant meliora potentes
Ошибка в mysql Could not find a valid tablespace file for 'database/#sql-*' Tablespace open failed for '"database"."#sql-*"', ignored. Как я понял - есть много вариантов возникновения похожих ошибок, и не всегда это можно решить. Опишу свой вариант. Изначальные условия следующие: 1. у нас mysql (5.5.5-10.1.48-MariaDB), таблицы в формате innidb, отдельный файл для каждой таблицы ( innodb_file_per_table ) 2. начали оптимизацию или какое-то другое изменение таблицы, и сервер по какой-то причине упал, при этом остались временные файлы в папке с базой. 3. удалили вручную эти файлы 4. перезагрузили сервер 5. в логах получили эту ошибку Если грубо описать то, что произошло (это мое представление, возможно не точное, но смысл сохранен): При оптимизации, изменении структуры таблицы или индексов - mysql создает временную таблицу и пишет в нее данные. В папке с базой создаются 2 файла: #sql-[...].ibd (непосредственно данные) и #sql-[...].frm (структура таблицы) Название ibd файла может отличаться от frm, например, #sql-5407_6f9.frm и #sql-ib4176-39791858.ibd При этом записи об этих таблицах есть в служебной таблице mysql (information_schema) После окончания - временные таблицы должны стать основными. Но тк произошла ошибка - у нас остались записи в служебной таблице и мы удалили эти файлы вручную. Как вариант - файлы остались и занимают место. Как исправить (мой вариант решения, возможно не подойдет в каком-то случае, и если повторять - только на свой страх и риск, с предварительным бэкапом!): Вариант 1: файлы остались. 1. переименовываем файл *.frm в соответствии с названием файла ibd. (должно получится что-то вроде #sql-ib4176-39791858.ibd #sql-ib4176-39791858.frm - название смотри в логе с ошибкой) 2. в консоли или через интерфейс выполнения запросов переходим в свою базу (use database;) и выполняем запрос: drop table `#mysql50##sql-ib4176-39791858`; 3. перезагружаем сервер mysqlб ошибка должна уйти Вариант 2: файлы удалили 1. копируем .frm файл из исходной таблицы с названием #sql-ib4176-39791858.frm (точное название смотри в логах). 2. выполняем пункты 2-3 из первого варианта
Дополнительные материалы:
https://mariadb.com/resources/blog/get-rid-of-orphaned-innodb-temporary-tables-the-right-way/
https://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html
Новое на сайте:
- Node.js
- PHP
- Python
- Apache и другие
- Git
- Postgres и локаль
- mysqldump с удаленного сервера
- unity ios build
- Включение и просмотр логов запросов mysql
- Could not find a valid tablespace file for 'database/#sql-*'
- JavaScript, CustomEvent, dispatchevent и jquery.on()
- rabbitmq побился индекс, когда закончилось место