Jeszcze jeden blog o programowaniu

Radosne twórczości leniwego programisty

Odtwarzanie tabeli InnoDB

leave a comment »

MySQL logoW kilku projektach zdarzyło mi się z bliżej nieokreślonych powodów podczas próby czyszczenia cache w Drupalu wystąpienie błędu MySQL w postaci:

mysql> show tables;
+--------------------------------------+
| Tables_in_drupal7demo                |
+--------------------------------------+
| ...                                  |
| cache_apachesolr                     |
| ...                                  |
+--------------------------------------+
108 rows in set (0.00 sec)
mysql> TRUNCATE `cache_apachesolr`;
ERROR 1146 (42S02): Table 'drupal7demo.cache_solr' doesn't exist

Mogło to być spowodowane wykonaniem polecenia TRUNCATE `cache_apachesolr` i sposobem w jaki w rzeczywistości wykonywane jest polecenie TRUNCATE.

Jednym z najprostszych rozwiązań jakie udało mi się znaleźć jest odtworzenie struktury tabeli, a ponieważ praktycznie każda próba odczytu/zapisu z/do tabeli zwróci komunikat błędu (np.: ERROR 1030 (HY000): Got error -1 from storage engine) musimy dodać jeszcze jedno polecenie w ostateczności wykonując poniższe polecenia:

ALTER TABLE `cache_apachesolr` DISCARD TABLESPACE;
DROP TABLE IF EXISTS `cache_apachesolr`;
CREATE TABLE `cache_apachesolr` (
`cid` varchar(255) NOT NULL DEFAULT '' COMMENT 'Primary Key: Unique cache ID.',
`data` longblob COMMENT 'A collection of data to cache.',
`expire` int(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry should expire, or 0 for never.',
`created` int(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry was created.',
`serialized` smallint(6) NOT NULL DEFAULT '0' COMMENT 'A flag to indicate whether content is serialized (1) or not (0).',
PRIMARY KEY (`cid`),
KEY `expire` (`expire`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Cache table for apachesolr to store Luke data and...';

Potencjalne przyczyny problemu: http://dba.stackexchange.com/a/6269

Źródło rozwiązania: http://www.palominodb.com/blog/2011/11/02/how-recreate-innodb-table-after-tablespace-has-been-removed

Kilka innych pomysłów, które można wypróbować by odzyskać tabele: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file

Reklamy

Written by filipgorczynski

2014.01.11 @ 06:04:13

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

%d blogerów lubi to: