[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.
Comments
Leave a Comment