Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день , прошу помочь.
mysql Ver 15.1 Distrib 10.1.14-MariaDB galera cluster
Ситуация такая:
Раз в месяц делается партицырование большой таблицы. Так вот последнее партицирование завершилось не удачно из-за нехватки места на диске. И в папке mysql соотвецтвенно остались временные таблицы которые я не могу удалить. Как можно победить такую проблему ??
Вот делал по этому мануалу https://dev.mysql.com/doc/refman/5.6/en … adict.html но получил ошибку ERROR 1030 (HY000): Got error 1 "Operation not permitted" from storage engine partition
Как можно коректно удалить эти таблицы ? Они заняли очень много места а его кретически не хватает.
Неактивен
Можете написать полный текст ошибки?
И покажите, пожалуйста, список файлов внутри базы. Конкретно интересуют файлы, названия которых начинаются с символа #.
Неактивен
Добрый день.
Вот список файлов
#sql-58cb_5db16b.frm
#sql-58cb_5db16b.par
#sql-ib372-102994894.ibd
#sql-ib373-102994895.ibd
#sql-ib374-102994896.ibd
#sql-ib375-102994897.ibd
#sql-ib376-102994898.ibd
#sql-ib377-102994899.ibd
#sql-ib378-102994900.ibd
#sql-ib379-102994901.ibd
#sql-ib380-102994902.ibd
#sql-ib381-102994903.ibd
#sql-ib382-102994904.ibd
#sql-ib388-102994905.ibd
#sql-ib416-102994906.ibd
#sql-ib426-102994907.ibd
#sql-ib428-102994908.ibd
Делаю mv #sql-58cb_5db16b.frm #sql-ib87-856498050
Захожу в mysql и
DROP TABLE `#mysql50##sql-ib87-856498050`;
ERROR 1030 (HY000): Got error 1 "Operation not permitted" from storage engine partition
Больше ошибок не выдает.
Отредактированно Dimashu (03.11.2016 15:13:02)
Неактивен
А откуда Вы берете второе имя? ib87-856498050?
Тут, скорее, я бы делал
Неактивен
Не помагает. Дело в том что это одна таблица, как я понимаю ее временное имя #sql-58cb_5db16b.frm. Остальное это ее партиции.
Делаю как вы написали mv '#sql-58cb_5db16b.par' '#sql-58cb_5db16b.ibd' и получаю:
drop table `#mysql50##sql-58cb_5db16b`;
ERROR 1051 (42S02): Unknown table 'mydb.#mysql50##sql-58cb_5db16b'
Если я все верно понял из мануала mysql, нужно просто ее пепреименовать в любое другое имя. Но в результате ошибка:
ERROR 1030 (HY000): Got error 1 "Operation not permitted" from storage engine partition
Отредактированно Dimashu (11.11.2016 12:01:04)
Неактивен
В мануале написано не про любое другое имя, там имя делается такое, чтобы совпадали названия у файликов frm и ibd. В Вашем случае они сейчас совпадают?
Неактивен
Сори что туплю , но я не совсем понимаю.
Вот весь список который есть и его нужно удалить:
#sql-58cb_5db16b.frm
#sql-58cb_5db16b.par
#sql-ib372-102994894.ibd
#sql-ib373-102994895.ibd
#sql-ib374-102994896.ibd
#sql-ib375-102994897.ibd
#sql-ib376-102994898.ibd
#sql-ib377-102994899.ibd
#sql-ib378-102994900.ibd
#sql-ib379-102994901.ibd
#sql-ib380-102994902.ibd
#sql-ib381-102994903.ibd
#sql-ib382-102994904.ibd
#sql-ib388-102994905.ibd
#sql-ib416-102994906.ibd
#sql-ib426-102994907.ibd
#sql-ib428-102994908.ibd
Тут есть один fpm и куча ibd файлов.
Вот что мускул показывает:
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE '%#sql%';
+----------+--------------------------------+------+--------+-------+-------------+------------+---------------+
| TABLE_ID | NAME | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE |
+----------+--------------------------------+------+--------+-------+-------------+------------+---------------+
| 429 | mydb/#sql-ib372-102994894 | 1 | 12 | 415 | Antelope | Compact | 0 |
| 430 | mydb/#sql-ib373-102994895 | 1 | 12 | 416 | Antelope | Compact | 0 |
| 431 | mydb/#sql-ib374-102994896 | 1 | 12 | 417 | Antelope | Compact | 0 |
| 432 | mydb/#sql-ib375-102994897 | 1 | 12 | 418 | Antelope | Compact | 0 |
| 433 | mydb/#sql-ib376-102994898 | 1 | 12 | 419 | Antelope | Compact | 0 |
| 434 | mydb/#sql-ib377-102994899 | 1 | 12 | 420 | Antelope | Compact | 0 |
| 435 | mydb/#sql-ib378-102994900 | 1 | 12 | 421 | Antelope | Compact | 0 |
| 436 | mydb/#sql-ib379-102994901 | 1 | 12 | 422 | Antelope | Compact | 0 |
| 437 | mydb/#sql-ib380-102994902 | 1 | 12 | 423 | Antelope | Compact | 0 |
| 438 | mydb/#sql-ib381-102994903 | 1 | 12 | 424 | Antelope | Compact | 0 |
| 439 | mydb/#sql-ib382-102994904 | 1 | 12 | 425 | Antelope | Compact | 0 |
| 440 | mydb/#sql-ib388-102994905 | 1 | 12 | 426 | Antelope | Compact | 0 |
| 441 | mydb/#sql-ib416-102994906 | 1 | 12 | 427 | Antelope | Compact | 0 |
| 442 | mydb/#sql-ib426-102994907 | 1 | 12 | 428 | Antelope | Compact | 0 |
| 443 | mydb/#sql-ib428-102994908 | 1 | 12 | 429 | Antelope | Compact | 0 |
Не совсем пойму что куда переименовывать.
Брать файл .frm и по очереди переименовывать все файлы с значение .ibd ?
Делал cp \#sql-58cb_5db16b.frm \#sql-ib372-102994894.frm , потом DROP TABLE `#mysql50##sql-ib372-102994894`;
Удаляет таблицу , но она так же остается в системе ((
Отредактированно Dimashu (08.11.2016 13:35:58)
Неактивен
Не очень понял последней фразы. Что значит «удаляет таблицу, но она остается в системе»?
Смотрите, теория очень простая — есть MySQL как механизм, и есть InnoDB внутри него, который хранит сами данные. MySQL хранит информацию о том, какие есть таблицы и какая у них структура, в файликах frm. InnoDB хранит внутри себя независимый набор метаданных прямо внутри файлов ibdata*. Ваша задача сделать так, чтобы удалить файлики из обоих мест.
Насколько я понимаю, при удалении таблицы не так важно, какая структура реально написана в frm-файле. Поэтому Вы можете, например, сделать отдельную таблицу (CREATE TABLE foo (a INT) ENGINE=InnoDB), в потом скопировать этот frm-файл с названием, соответствующим названию внутри метаданных InnoDB. И удалить потом таблицу с получившимся именем (что удалит скопированный frm-файл и таблицу изнутри InnoDB).
Для конкретного примера (таблица 429) как-то так, видимо:
Неактивен
В том то и дело. Что я так и делаю, но таблички остаются в системе. Вот пример что я делал:
CREATE TABLE foo (a INT) ENGINE=InnoDB;
root@ cp foo.frm '#sql-ib372-102994894.frm'
drop table `#mysql50##sql-ib372-102994894`;
Query OK, 0 rows affected (0.03 sec)
Смотрю
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE '%#sql%';
429 | mydb/#sql-ib372-102994894 | 1 | 12 | 415 | Antelope | Compact | 0
Табличка как была так и осталась.
Сделал
drop table `#mysql50##sql-58cb_5db16b.frm`;
Теперь у меня только файлы
#sql-ib372-102994894.ibd
#sql-ib373-102994895.ibd
#sql-ib374-102994896.ibd
и т.д
Что-то мне кажется , что я зря так сделал ((
Отредактированно Dimashu (09.11.2016 11:42:10)
Неактивен
Беда какая-то
Окей, давайте по инструкции еще раз пройдемся. Увидел там, что структура таки важна. Структура должна быть та же, что у изначальной таблицы. К счастью, вы ее знаете. Давайте сделаем в другой базе данных таблицу с правильным названием, скопируем frm и попробуем удалить из обеих. Как-то так:
Неактивен
Огромное спасибо , именно так как вы и написали помогло. Еще раз спасибо )
P.S это надо делать на каждой ноде кластера. ((
Отредактированно Dimashu (14.11.2016 15:14:36)
Неактивен