Press enter to see results or esc to cancel.

[mariadb][mysql]InnoDB: Failed to find tablespace for table

[ERROR] InnoDB: Failed to find tablespace for table + in the cache. Attempting to load the tablespace with space id
[ERROR] InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files.

Internet uzerinden cok fazla bilgi olmasina ragmen kendi sorun cozme seklimi de 
blog sayfama ilistireyim dedim.

NOT: YAPILAN ISLEMLERDEN VE KAYIPLARDAN SORUMLU DEGILIMDIR.

Ilk olarak mysql veya mariadb start olamayacagi icin recovery modda baslatmamiz gerekiyor. vim /etc/mysql/my.cnf dosyasi [mysqld] taginin altina

innodb_force_recovery = 4 satirini ekliyoruz.

ve mysql start ediyoruz.

service mysql start

mysql, performance_schema ve information_schema haric diger veritabanlarinin listesini aliyoruz.

mysql -u root -h localhost -p’sifre’ -e ‘show databases;’ | egrep -v ‘mysql|performance_schema|information_schema’ > /root/db.txt

Listedeki tum veritabanlarinin yedeklerini aliyoruz.

for i in `cat /root/db.txt`; do mysqldump -uroot -p’sifre’ $i > $i.sql; done

cd /var/lib/mysql/ dizini icinde asagidaki scripti calistirip mysql altindaki tum veritabanlarini siliyoruz.

for i in `cat /root/db.txt`; do rm -rf $i; done

ardindan mysql dizini icinde rm -rf ib_logfile0 ib_logfile1 ibdata1 ib_buffer_pool dosyalarini da siliyoruz.

Tekrar vim /etc/mysql/my.cnf dosyasi icine girip eklemis oldugumuzinnodb_force_recovery = 4 satirini kalirip mysql servisini restart ediyoruz. (service mysql restart)

Son olarak da yedekledigimiz veritabanlarini tekrar geri yukleyelim.

# veritabani olusturma
for i in `cat /root/db.txt`; do mysqladmin -uroot -p’sifre’ create $i; done
#yedekledigimiz veritabanlarini geri yukleme
for i in `cat /root/db.txt`; do mysql -uroot -p’sifre’ $i < $i.sql; done

Tekrar mysql servisini restart edip sorun olup olmadigini kontrol edelim.

service mysql restart

tail -100 /var/log/daemon.log

Sevgiyle.