SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.11.2016 12:47:36

Dimashu
Участник
Зарегистрирован: 04.07.2016
Сообщений: 24

Orphan Intermediate Tables cant delete

Добрый день , прошу помочь.
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
Как можно коректно удалить эти таблицы ? Они заняли очень много места а его кретически не хватает.

Неактивен

 

#2 02.11.2016 23:35:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Orphan Intermediate Tables cant delete

Можете написать полный текст ошибки?
И покажите, пожалуйста, список файлов внутри базы. Конкретно интересуют файлы, названия которых начинаются с символа #.

Неактивен

 

#3 03.11.2016 15:12:30

Dimashu
Участник
Зарегистрирован: 04.07.2016
Сообщений: 24

Re: Orphan Intermediate Tables cant delete

Добрый день.
Вот список файлов
#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)

Неактивен

 

#4 03.11.2016 18:54:29

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Orphan Intermediate Tables cant delete

А откуда Вы берете второе имя? ib87-856498050?

Тут, скорее, я бы делал

mv '#sql-58cb_5db16b.par' '#sql-58cb_5db16b.ibd'
mysql -e 'drop table `#mysql50##sql-58cb_5db16b`'



Ну и остальные таблички, видимо, временные, — их тоже стоит поубивать.

Неактивен

 

#5 07.11.2016 14:22:15

Dimashu
Участник
Зарегистрирован: 04.07.2016
Сообщений: 24

Re: Orphan Intermediate Tables cant delete

Не помагает. Дело в том что это одна таблица, как я понимаю ее временное имя #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)

Неактивен

 

#6 07.11.2016 17:30:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Orphan Intermediate Tables cant delete

В мануале написано не про любое другое имя, там имя делается такое, чтобы совпадали названия у файликов frm и ibd. В Вашем случае они сейчас совпадают?

Неактивен

 

#7 08.11.2016 13:33:55

Dimashu
Участник
Зарегистрирован: 04.07.2016
Сообщений: 24

Re: Orphan Intermediate Tables cant delete

Сори что туплю , но я не совсем понимаю.
Вот весь список который есть и его нужно удалить:
#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)

Неактивен

 

#8 08.11.2016 18:56:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Orphan Intermediate Tables cant delete

Не очень понял последней фразы. Что значит «удаляет таблицу, но она остается в системе»?

Смотрите, теория очень простая — есть MySQL как механизм, и есть InnoDB внутри него, который хранит сами данные. MySQL хранит информацию о том, какие есть таблицы и какая у них структура, в файликах frm. InnoDB хранит внутри себя независимый набор метаданных прямо внутри файлов ibdata*. Ваша задача сделать так, чтобы удалить файлики из обоих мест.

Насколько я понимаю, при удалении таблицы не так важно, какая структура реально написана в frm-файле. Поэтому Вы можете, например, сделать отдельную таблицу (CREATE TABLE foo (a INT) ENGINE=InnoDB), в потом скопировать этот frm-файл с названием, соответствующим названию внутри метаданных InnoDB. И удалить потом таблицу с получившимся именем (что удалит скопированный frm-файл и таблицу изнутри InnoDB).

Для конкретного примера (таблица 429) как-то так, видимо:

cd /var/lib/mysql/mydb
cp foo.frm '#sql-ib372-102994894.frm'
mysql -e 'drop table `#mysql50##sql-ib372-102994894`' mydb

Неактивен

 

#9 09.11.2016 11:40:40

Dimashu
Участник
Зарегистрирован: 04.07.2016
Сообщений: 24

Re: Orphan Intermediate Tables cant delete

В том то и дело. Что я так и делаю, но таблички остаются в системе. Вот пример что я делал:

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)

Неактивен

 

#10 09.11.2016 19:59:46

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Orphan Intermediate Tables cant delete

Беда какая-то sad

Окей, давайте по инструкции еще раз пройдемся. Увидел там, что структура таки важна. Структура должна быть та же, что у изначальной таблицы. К счастью, вы ее знаете. Давайте сделаем в другой базе данных таблицу с правильным названием, скопируем frm и попробуем удалить из обеих. Как-то так:


CREATE DATABASE foo;
use foo;
CREATE TABLE `#mysql50##sql-ib372-102994894` ( тут надо перечислить поля и индексы, как в show create table ) ENGINE=InnoDB;

cp 'foo/#sql-ib372-102994894.frm' 'mydb/#sql-ib372-102994894.frm'

DROP TABLE `#mysql50##sql-ib372-102994894`;

Неактивен

 

#11 14.11.2016 14:45:15

Dimashu
Участник
Зарегистрирован: 04.07.2016
Сообщений: 24

Re: Orphan Intermediate Tables cant delete

Огромное спасибо , именно так как вы и написали помогло. Еще раз спасибо )
P.S это надо делать на каждой ноде кластера. ((

Отредактированно Dimashu (14.11.2016 15:14:36)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson