Pour que cette méthode fonctionne, il faut au moins posséder un dump de la structure de la base, et il faut l'option innodb_file_per_table activée (c'est toujours une bonne habitude de l'activer)
- Copier les fichier IBD dans un endroit sûr, par exemple /home/bob
- Redémarrer la base, en ayant supprimé éventuellement les tablespaces systèmes ibdata1 et ib_logfile avant. attention aux tables InnoDB dans la base Mysql, les recréer au besoin
- Réimporter la structure de la base
- Réimporter les données, et la c'est la partie la plus dure ! il faut exporter les tablespaces que l'on vient de créer et réimporter à la place ceux qu'on a sauvegardé, le tout en redémarrant mysql à chaque action pour être sûr de flusher sur le disque. C'est ce que le script suivant fait:
#! /bin/bash
# superformance.blogspot.com
BKPDIR=/home/bob
USER=root
PASS=pass
DB=db
for table in $(mysql -u ${ROOT} -p${PASS} \
-NBe "select TABLE_NAME from information_schema.TABLES \
where ENGINE='InnoDB' and TABLE_SCHEMA='${DB}';" )
#supprimer le tablespace vide que l'on vient de creer
mysql -u ${ROOT} -p${PASS} \
-NBe "alter table ${table} discard tablespace;"
# arreter mysql
/etc/init.d/mysqld stop
#Copier l'ancien TBS
cp $BKPDIR/$table.ibd /var/lib/mysql/$DB
#demarrer mysql
/etc/init.d/mysqld start
#importer l'ancien tbs
mysql -u ${ROOT} -p${PASS} -NBe \
"alter table ${table} import tablespace;"
/etc/init.d/mysqld restart
done
Ensuite sauvegarder la base avec mysqldump !
Aucun commentaire:
Enregistrer un commentaire