Grosse requête MySQL, comment faire

Publié le

Il arrive parfois qu'on est besoin de transférer énormément de données d'une base de donnée MySQL vers une autre (passage en production, changement de serveur...)

Or, ce qui arrive quelques fois dans ces cas-là, c'est que le fichier sql soit tellement gros qu'on ne peut pas l'envoyer via phpMyAdmin ou bien que le php mette trop de temps et arrive au timeout de la page... Bref, on n'y arrive pas. La solution utilisé quelques fois et le tranchage en parties du fichier sql et l'envoi par petits morceux : très laborieux.

La solution que je vous propose marche du tonnerre, mais uniquement si vous avez un accès SSH au serveur. Le principe est simple : vous allez envoyer votre fichier sql sur le serveur par FTP, puis l'exécuter directement avec la commande mysql. Et donc, voici ce que vous attendez tous, la commande à utiliser :

# mysql -h HOTE -u LOGIN --password=PASSE BASE < fichier.sql

Bien sûr, à vous de modifier HOTE, LOGIN, PASSE, BASE et fichier.sql selon ce que vous faites, mais ça, vous saurez le faire. J'ai déjà utiliser ce système sur Client Roi dans un script bash qui fait la mise à jour des données journalières. Et puis hier soir, c'était pour transférer la base de données des régions, départements, cantons et villes de France de mon EasyPhp vers le serveur de production.

Et si vous n'avez pas d'accès SSH, vous pouvez toujours créer un script PHP qui vous lira votre fichier.sql et vous exécutera N requêtes pas appel, mais c'est déjà plus contraignant...