# Réparer des tables :

[MySQL Server logs](https://dev.mysql.com/doc/refman/5.7/en/server-logs.html)

La 1ere chose à faire en cas de problèmes est de consulter les fichiers logs. Ceux-çi sont généralement avec les tables:

```bash
#osx (Homebrew):

$ cd /usr/local/var/mysql
total 388560
drwxr-xr-x  32 bruno  admin      1024 28 nov 16:53 .
drwxrwxr-x  13 bruno  admin       416 16 fév  2018 ..
-rw-rw----   1 bruno  admin     16384 28 nov 08:08 aria_log.00000001
-rw-rw----   1 bruno  admin        52 28 nov 08:08 aria_log_control
drwx------  48 bruno  admin      1536  1 déc 17:05 funnymac
drwx------  53 bruno  admin      1696  1 déc 17:05 ghost_prod
-rw-r-----   1 bruno  admin     15114 28 nov 08:08 ib_buffer_pool
-rw-rw----   1 bruno  admin  50331648  3 déc 07:19 ib_logfile0
-rw-rw----   1 bruno  admin  50331648 24 oct 12:51 ib_logfile1
-rw-rw----   1 bruno  admin  79691776  3 déc 07:19 ibdata1
-rw-rw----   1 bruno  admin  12582912 28 nov 16:53 ibtmp1
drwx------   9 bruno  admin       288  1 déc 17:05 mgpt
-rw-rw----   1 bruno  admin         0 24 jul  2017 multi-master.info
drwx------  89 bruno  admin      2848  1 déc 17:05 mysql
drwx------   3 bruno  admin        96 24 jul  2017 performance_schema
drwx------  41 bruno  admin      1312  1 déc 17:05 phpmyadmi
-rw-rw----   1 bruno  admin   1271878  3 déc 07:19 silverbook.home.err
-rw-rw----   1 bruno  admin         5 28 nov 16:53 silverbook.home.pid
```



<u>Pour réparer, 2 solutions:</u>

 **1) REPAIR TABLE:** 

- ne nécessite pas l’arrêt de MySQL
- uniquement base MyISAM



```bash
MariaDB [zenphoto]> REPAIR TABLE _tags;
+----------------+--------+----------+---------------------------------------------------------+
| Table          | Op     | Msg_type | Msg_text                                                |
+----------------+--------+----------+---------------------------------------------------------+
| zenphoto._tags | repair | note     | The storage engine for the table doesn't support repair |
+----------------+--------+----------+---------------------------------------------------------+

1 row in set (0.006 sec)
```

Si l’erreur persiste, **vider le cache** (Flush all cache)



  **2) mysqlcheck -r:** 

- nécessite un arrêt du service MySQL 

- uniquement base MyISAM



[MyISAM](https://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html): 

```bash
$ mysqlcheck -u root -ppassword -r zenphoto .comments

zenphoto..comments                                 OK
```



[InnoDB](https://dev.mysql.com/doc/refman/5.5/en/innodb-storage-engine.html): 

```bash
$ mysqlcheck -u root -ppassword -r zenphoto _tags

zenphoto._tags

note     : The storage engine for the table doesn't support repair
```

Pour les tables InnoDB, il faut [forcer la récupération](https://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html):

    1) Arrêter **mysqld**:
    
    2) Sauvegarder **mysql**:

```bash
#Linux
/var/lib/mysql/

#osx (Homebrew)
/usr/local/var/mysql/
```

    3) Ajouter au fichier de configuration MySQL my.cnf:

```ini
#osx (Homebrew): /usr/local/etc/my.cnf

[mysqld]
innodb_force_recovery = 4
```

    4) Redémarrer **mysqld**:

  5a) Faire un dump des tables de la base avec **SELECT ... INTO OUTFILE**:

```mysql
MariaDB [zenphoto]> SELECT * FROM _tags INTO OUTFILE '/tmp/corrupted.txt';
Query OK, 170 rows affected (0.011 sec)

# Pour exporter au format csv:
MariaDB [zenphoto]> SELECT * FROM _tags INTO OUTFILE '/tmp/corrupted.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
Query OK, 170 rows affected (0.006 sec)

```

  5b) Faire. un dump de toutes les tables:

```bash
$ mysqldump -A -u root -ppassword > '/tmp/dump.sql';
```

    6) Parfois cela peut suffire. Sinon, 
    
    7) Supprimer les tables / bases corrompues (DROP ...)
    
    8) Arrêter **mysqld**:
    
    9) Supprimer les ib*:

```bash
#Linux
/var/lib/mysql/ib*

#osx (Homebrew)
/usr/local/var/mysql/ib*
```

    10) Quitter le mode force recovery:

```
[mysqld]
#innodb_force_recovery = 0
```

    11) Redémarrer **mysqld**:
    
    12) Restaurer les bases:

```bash
$ mysql -u root -ppassword < dump.sql
```

 

  https://www.nixpal.com/mysql-innodb-corruption-repair-guide/



### Vérifier et réparer:

Vérifier toutes les bases et réparer les tables corrompues:

```bash
$ mysqlcheck -u root -p -A --auto-repair

Enter password:

funnymac.download                                  OK
funnymac.downloads                                 OK
…/…
```

