Denne artikel beskriver, hvordan du reparerer MySQL-tabeller og -databaser. Efterhånden som en databases tabeller vokser, kan der opstå fejl fra tid til anden. Når de gør det, indeholder MySQL flere værktøjer, som du kan bruge til at kontrollere og reparere databasetabeller. For at gøre dette skal du følge procedurerne nedenfor i den rækkefølge, de vises.
Denne artikel gælder kun for produkter, der er angivet i Artikeldetaljer sidebjælke. Du skal have root-adgang til serveren for at følge disse procedurer.Trin 1:Sikkerhedskopiering af databaserne
Før du forsøger at reparere en database, bør du først sikkerhedskopiere den. Følg disse trin for at sikkerhedskopiere alle filerne fra alle dine databaser:
- Log ind på din server ved hjælp af SSH.
- Stop MySQL-serveren ved at bruge den passende kommando til din Linux-distribution:
- For CentOS og Fedora, skriv:
service mysqld stop
-
For Debian og Ubuntu skal du skrive:
service mysql stop
- For CentOS og Fedora, skriv:
-
Skriv følgende kommando:
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
Denne kommando kopierer alle filerne fra alle dine databaser til et mappenavn baseret på det aktuelle klokkeslæt (mere præcist antallet af sekunder, der er gået siden 1. januar 1970). Dette sikrer, at hver database backup er gemt i en mappe, der har et unikt navn. For yderligere beskyttelse kan (og bør) du sikkerhedskopiere databasefilerne til en fjernplacering, der ikke er på serveren. -
Genstart MySQL-serveren ved at bruge den passende kommando til din Linux-distribution:
- For CentOS og Fedora, skriv:
service mysqld start
-
For Debian og Ubuntu skal du skrive:
service mysql start
- For CentOS og Fedora, skriv:
Trin 2:Kørsel af mysqlcheck
Når du har sikkerhedskopieret dine databaser, er du klar til at begynde fejlfinding. mysqlcheck programmet giver dig mulighed for at kontrollere og reparere databaser, mens MySQL kører. Denne funktion er nyttig, når du vil arbejde på en database uden at stoppe hele MySQL-tjenesten.
Derudover mysqlcheck virker på tabeller, der bruger MyISAM- eller InnoDB-databasemotorerne.
Se denne artikel for at få oplysninger om, hvordan du bestemmer, hvilken lagermotor en databasetabel bruger.For at bruge mysqlcheck , følg disse trin:
- Som root-bruger skal du skrive følgende kommando:
cd /var/lib/mysql
-
Skriv følgende kommando, og erstat databasen med navnet på den database, du vil kontrollere:
mysqlcheck database
Den forrige kommando kontrollerer alle tabellerne i den angivne database. Alternativt, for at kontrollere en specifik tabel i en database, skriv følgende kommando. Erstat databasen med navnet på databasen, og erstat tabellen med navnet på den tabel, du vil kontrollere:
mysqlcheck database table
-
Mysqlcheck kontrollerer den angivne database og tabeller. Hvis en tabel består kontrollen, mysqlcheck viser OK til bordet. Men hvis mysqlcheck rapporterer en fejl for en tabel, skal du skrive følgende kommando for at prøve at reparere den. Erstat databasen med databasenavnet og tabel med tabelnavnet:
mysqlcheck -r database table
- Hvis mysqlcheck ikke kan reparere bordet eller tabellerne, skal du gå til følgende procedure.
Trin 3:Kørsel af motorspecifik diagnostik
Hvis du kører mysqlcheck ikke løser problemet, er næste trin at køre diagnostik, der er specifik for den motor, der bruges af databasetabellen eller -tabellerne. Følg den relevante procedure nedenfor for din tabels databaselagermaskine.
Se denne artikel for at få oplysninger om, hvordan du bestemmer, hvilken lagermaskine dine databasetabeller bruger.Reparation af MyISAM-tabeller med myisamchk
Hvis du bruger MyISAM-lagringsmaskinen til en tabel, kan du køre myisamchk program til at reparere det. For at gøre dette skal du følge disse trin:
myisamchk programmet virker kun for tabeller, der bruger MyISAM-lagringsmotoren. Det virker ikke for InnoDB-motoren.- Stop MySQL-serveren ved at bruge den passende kommando til din Linux-distribution:
- For CentOS og Fedora, skriv:
service mysqld stop
-
For Debian og Ubuntu skal du skrive:
service mysql stop
- For CentOS og Fedora, skriv:
-
Skriv følgende kommando:
cd /var/lib/mysql
- Skift til den mappe, hvor databasen er placeret. For eksempel hvis databasen hedder kunder , skriv cd-kunder.
-
Skriv følgende kommando, og erstat tabellen med navnet på den tabel, du vil kontrollere:
myisamchk table
For at kontrollere alle tabellerne i en database skal du skrive følgende kommando:
myisamchk *.MYI
Hvis den forrige kommando ikke virker, kan du prøve at slette midlertidige filer, der muligvis forhindrer myisamchk fra at køre korrekt. For at gøre dette, skift tilbage til /var/lib/mysql mappe, og skriv derefter følgende kommando:
ls */*.TMD
Hvis der er nogle .TMD-filer på listen, skal du skrive følgende kommando for at slette dem:
rm */*.TMD
Prøv derefter at køre myisamchk igen.
-
For at prøve at reparere en tabel skal du skrive følgende kommando og erstatte tabel med navnet på den tabel, du vil reparere:
myisamchk --recover table
-
Genstart MySQL-serveren ved at bruge den passende kommando til din Linux-distribution:
- For CentOS og Fedora, skriv:
service mysqld start
-
For Debian og Ubuntu skal du skrive:
service mysql start
- For CentOS og Fedora, skriv:
- Test den eller de reparerede tabeller.
Kørsel af InnoDB-gendannelsesprocessen
Hvis du bruger InnoDB-lagringsmotoren til en databasetabel, kan du køre InnoDB-gendannelsesprocessen. For at gøre dette skal du følge disse trin:
- Brug din foretrukne teksteditor til at åbne my.cnf fil på din server. Placeringen af my.cnf fil afhænger af din Linux-distribution:
- På CentOS og Fedora er my.cnf filen er placeret i /etc bibliotek.
- På Debian og Ubuntu er my.cnf filen er placeret i /etc/mysql bibliotek.
- I my.cnf fil, skal du finde [mysqld] sektion.
-
Tilføj følgende linje til [mysqld] afsnit:
innodb_force_recovery=4
-
Gem ændringerne i my.cnf fil, og genstart derefter MySQL-serveren ved at bruge den passende kommando til din Linux-distribution:
- For CentOS og Fedora, skriv:
service mysqld restart
-
For Debian og Ubuntu skal du skrive:
service mysql restart
- For CentOS og Fedora, skriv:
-
Indtast følgende kommando for at eksportere alle databaserne til databases.sql fil:
mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
-
Start mysql program, og prøv derefter at droppe den eller de berørte databaser ved hjælp af DROP DATABASE kommando.
Hvis MySQL ikke er i stand til at slette en database, kan du slette den manuelt i trin 8 nedenfor, efter du har stoppet MySQL-serveren.
-
Stop MySQL-serveren ved at bruge den passende kommando til din Linux-distribution:
- For CentOS og Fedora, skriv:
service mysqld stop
-
For Debian og Ubuntu skal du skrive:
service mysql stop
- For CentOS og Fedora, skriv:
-
Hvis du ikke var i stand til at slette en database i trin 6, skal du indtaste følgende kommandoer for at slette den manuelt. Erstat databasen med navnet på den database, du vil slette:
cd /var/lib/mysql rm -rf database
Sørg for, at du ikke sletter mysql eller performance_schema mapper! -
Brug din foretrukne teksteditor til at åbne my.cnf fil på din server, og kommenter derefter følgende linje i [mysqld] afsnit som vist:
#innodb_force_recovery=4
Dette deaktiverer InnoDB-gendannelsestilstand. -
Gem ændringerne i my.cnf fil, og start derefter MySQL-serveren ved at bruge den passende kommando til din Linux-distribution:
- For CentOS og Fedora, skriv:
service mysqld start
-
For Debian og Ubuntu skal du skrive:
service mysql start
- For CentOS og Fedora, skriv:
-
Indtast følgende kommando for at gendanne databaserne fra den sikkerhedskopifil, du oprettede i trin 5:
mysql < databases.sql
- Test den gendannede database.
Flere oplysninger
- For mere information om mysqlcheck , besøg venligst https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
- For mere information om myisamchk , besøg venligst https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.