Ce billet aurait aussi pu se nommer « Vive la ligne de commandes ! ».%%% Je pense arriver au bout de mes peines avec ma grosse tables de 3 millions de tuples (qui n’en fait d’ailleurs toujours pas 3 millions, alors j’espère que ça tiendra le coup quand tous les tuples seront là), et j’ai notamment pas mal galéré pour la transférer d’une base de données à une autre. (local -> serveur de développement) Si on utilise PHP, ou PhpMyAdmin, pour transférer sa BDD, on se retrouve vite avec de très long temps d’attentes et avec une machine qui rame jusqu’à la mort. Quelques idées pour survivre entier à ce calvaire : * Préférer le transfert à l’aide de fichiers. Car le copier/coller de requêtes fonctionnent pour de petites tables, mais ça fait très vite ramer votre machine de course pour de grosses tables. Il suffit d’exporter les tables de son choix via PhpMyAdmin (à l’accueil d’une base > exporter : pour exporter les tables de son choix. A l’accueil d’une table > exporter : pour exporter directement la table en question), puis dans les importer via PhpMyAdmin, ou en ligne de commandes. Il vaut mieux éviter de cocher la case « Insertion Complète » qui créé une seule requête @@INSERT INTO table (val1, val2) VALUES (‘blabla’, ‘bloublou’), (‘blibli’, ‘bleble’), …, (‘blublu’, ‘bloblo’);@@ ce qui peut être un peu trop lourd. Mieux vaut créer autant de requêtes qu’il y a d’insertions dans ce cas. (le mieux serait de faire une requête pour une trentaine d’insertions, c’est vraiment plus rapide, mais cela oblige à coder tout ça soit même) * Préférer l’utilisation des lignes de commandes. Pour plusieurs raisons : plus de problèmes avec les timeout de MySQL ou de PHP puisqu’on effectue une commande à la fois. (sauf si on commande est trop lourde. Dans le cas d’une insertion complète par exemple), on contrôle réellement tout ce qui se passe en temps réel et on peut réellement tout arrêter en temps réel. (suffit de fermer le terminal quoi !), on ne passe par aucun intermédiaire et c’est donc vraiment plus rapide. !!!Quelques rappels sur les lignes de commandes MySQL Avant toute chose, il va falloir se mettre en condition pour utiliser les commandes MySQL. Pour cela, il nous faut un prompt @@mysql>@@. !!Sous Linux Il suffit d’ouvrir un terminal (de préférence son préféré) et de se connecter à son serveur distant via SSH si besoin. Puis il faut se positionner dans le dossier qui connait le commande @@mysql@@, pour mon cas c’était @@/usr/lib/mysql@@. !!Sous Windows Si vous souhaitez travailler en ligne, il suffit d’utiliser Putty et de se connecter au serveur distant (qui tourne en général sous Linux).%%% Si vous travaillez en local, Wamp et Xxamp possède une console MySQL, vous avez donc directement un prompt @@mysql>@@. Il y aussi moyen de le faire avec la console Windows (si vous travaillez avec EasyPHP par exemple), mais je vous redirige vers [ce billet|http://bluegyn.free.fr/spip/spip.php?article491]. !!Commandes MySQL Pour se connecter à une base de données ///[apache] connect -u username -p nombdd [-h localhost] /// Le mot de passe vous sera de toute façon demandé si vous ne le précisez pas directement. (et s’il n’y en a pas, il suffit d’appuyer sur Entrée) On aurait aussi pu faire, au moment d’avoir le prompt mysql : ///[apache] mysql -u username -p nombdd [-b motdepasse] /// On peut désormais taper toutes les commandes SQL que l’on voit en les terminant par un point virgule. ///[mysql] INSERT INTO table (val1, val2) VALUES (‘blabla’, ‘bloublou’); /// Ou alors importer un fichier : ///[apache] source cheminVersLeFichier.sql /// On aurait aussi pu faire, au moment d’avoir le prompt mysql : ///[apache] mysql -u username -p nombdd [-h localhost] < cheminVersLeFichier.sql /// Et voilà, il n’y a plus qu’à voir les lignes défilées et à attendre.
Catégories
- Apache (6)
- Avent (14)
- C / C++ (5)
- CMS (16)
- Geekeries (41)
- HTML et CSS (6)
- Informations (12)
- Java (26)
- Javascript (8)
- L'anecdote du week-end (4)
- PHP (30)
- PHP objet (20)
- Projets (4)
- Référencement (4)
- SQL (9)
- XML (3)
- XMPP (4)
Tags
30 minutes Android Anecdote Ant Apache attribut C class CMS constructeur CSS date design Dotclear Eclipse erreur Expression Google Java Javascript Joomla jQuery Ligne de commande Linux Maven MySQL méthode PgSQL PHP POO Projet public regex Référencement SEO Shell SQL ssh tutoriel Url Rewriting Wallpaper Windows Wordpress XHTML XML
Salut,
Intéressant ton blog !
D’autres pistes possibles :
- mysqlDump, mysqlhotcopy, …
Si ton moteur de stockage de ta big table est en innodb,
- passe le en MyISAM
- stop la machine
- copie les 3 fichiers de ta big table ( .frm, .MYD et .MYI) sur ton serveur cible – arrêté si possible – avec un truc sécurisé genre scp et le tour est joué !