Gendan MySQL-tabeller efter sletning af ibdata1, ib_logfile0 og ib_logfile1 - Trin-for-trin guide

Hvordan kan MySQL fås til at se og indlæse tabellerne igen efter sletning af filerne ibdata1, ib_logfile0 og ib_logfile1?

Hvis du har slettet filerne ibdata1, ib_logfile0 og ib_logfile1 i MySQL, kan du forsøge at løse problemet ved at stoppe MySQL-tjenesten, tage en sikkerhedskopi, fjerne de beskadigede filer, konfigurere MySQL til at bruge separate tablespaces, starte tjenesten igen, eksportere og importere databaserne, fjerne recovery mode og kontrollere tabellerne.

Hvordan kan MySQL fås til at se og indlæse tabellerne igen efter sletning af filerne ibdata1, ib_logfile0 og ib_logfile1?

Hvis du har slettet filerne ibdata1, ib_logfile0 og ib_logfile1 i MySQL, kan det føre til tab af data og problemer med at få MySQL til at genkende og indlæse tabellerne igen. Her er nogle trin, du kan følge for at forsøge at løse problemet:

1. Stop MySQL-tjenesten

Før du foretager nogen ændringer, skal du stoppe MySQL-tjenesten for at undgå yderligere skader:

sudo systemctl stop mysql

2. Sikkerhedskopier dine data

Det er vigtigt at tage en sikkerhedskopi af dine nuværende datafiler, hvis de stadig er tilgængelige:

sudo cp -r /var/lib/mysql /var/lib/mysql_backup

3. Fjern de beskadigede filer

Slet de beskadigede InnoDB-filer, hvis de stadig er til stede:

sudo rm /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1

4. Konfigurer MySQL til at bruge separate tablespaces

Rediger MySQL-konfigurationsfilen (my.cnf eller my.ini) for at bruge separate tablespaces for hver tabel:

[mysqld]
innodb_file_per_table=1
innodb_force_recovery=1

5. Start MySQL-tjenesten igen

Start MySQL-tjenesten igen:

sudo systemctl start mysql

6. Eksporter og importer databaserne

Hvis MySQL starter korrekt, skal du eksportere dine databaser og derefter importere dem igen:

mysqldump -u root -p --all-databases > all_databases.sql
mysql -u root -p < all_databases.sql

7. Fjern recovery mode

Efter at have eksporteret og importeret databaserne, skal du fjerne innodb_force_recovery fra MySQL-konfigurationsfilen og genstarte tjenesten:

[mysqld]
innodb_file_per_table=1
sudo systemctl restart mysql

8. Kontroller tabellerne

Kontroller, om dine tabeller nu er synlige og fungerer korrekt:

mysql -u root -p
SHOW TABLES;

Bemærk, at disse trin muligvis ikke altid gendanner dine data fuldstændigt, især hvis der er sket alvorlig korruption. Det er altid en god praksis at tage regelmæssige sikkerhedskopier for at undgå datatab.