alphega Posté 13 Janvier 2006 Posté 13 Janvier 2006 Bonjour, Je débute dans la gestion de ma base de données via SSH sur un serveur infogéré par le hub. Avant j'utilisais phpmyadmin mais il est vrai que les sauvegardes et restaurations sont tellement plus rapide via ssh... Lorsque je souhaite optimiser les 80 tables de ma base de données via phpmyadmin, c'est extremement long et cela fait ramer le serveur, le faire en ligne de commande sera certainement un plus ... ? Quelle est la syntaxe à utiliser pour optimiser l'ensemble des tables d'une base ? Merci
kazhar Posté 13 Janvier 2006 Posté 13 Janvier 2006 en ligne de commande, tu tape "mysql" puis, tu t'identifie, et tu envoie la commande d'optimize. tu a une aide sur la commande d'optimize ici : http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html
alphega Posté 13 Janvier 2006 Auteur Posté 13 Janvier 2006 Merci pour ta réponse et pour ton lien, j'avais vu ce manuel mais je dois néammoins rater quelque chose. Voici les manipulations que j'effectue une fois connecté à mon serveur en root (le repertoire dans lequel je me place est-il important ?) mysql -umonlogin -pmotdepasse mysql> Welcome to the MySQL monitor. Commands end with; or \g.ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Welcome to the MySQL monitor. Commands end with' at line 1mysql> Your MySQL connection id is 786622 to server version: 4.0.25-standard-log -> -> Type 'help;' or '\h' for help. Type '\c' to clear the buffer. -> -> mysql> mysql> optimize table ibf_sessions Je suis alors renvoyé à la ligne inferieure et ma table n'est pas optimisée
alphega Posté 14 Janvier 2006 Auteur Posté 14 Janvier 2006 Merci, ça fonctionne ... J'explique en détail pour ceux qui seraient aussi nuls que moi. Pour se connecter et désigner la base de données sur laquelle travailler: mysql -ulogin -pmotdepasse nomdelabase; Si tout de passe bien ceci s'affiche: Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -AWelcome to the MySQL monitor. Commands end with; or \g.Your MySQL connection id is 808310 to server version: 4.0.25-standard-logType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> Pour optimiser une table: optimize table nom_table; +-----------------------+----------+----------+----------+| Table | Op | Msg_type | Msg_text |+-----------------------+----------+----------+----------+| dejapris.ibf_sessions | optimize | status | OK |+-----------------------+----------+----------+----------+1 row in set (0.06 sec) Je vais abuser un peu: Comment selectionner toutes les tables d'une base de données sans avoir à taper le nom de chaque table ? Merci encore
Antoine Cailliau Posté 14 Janvier 2006 Posté 14 Janvier 2006 Je ne pense pas que cela soit possible via une requete SQL. Puisque la seule façon d'afficher les tables est un show tables; et qu'il ne veut pas l'imbriquer dans une autres requete. Je pense que tu es contraint de les faires à la mains (ou bien d'écrire un script)
alphega Posté 14 Janvier 2006 Auteur Posté 14 Janvier 2006 Ce n'est pas dramatique.. comme je ne sais pas (encore ?) creer un script je vais optimiser la(les) très grosse(s) table(s) de cette façon et faire le reste via phpmyadmin, ce sera parfait. Merci
Dan Posté 14 Janvier 2006 Posté 14 Janvier 2006 Je vois que tu as des tables nommées ibf_* Tu peux lancer l'optimisation par le tableau de bord admin d'Invision dans ce cas... Dan
alphega Posté 14 Janvier 2006 Auteur Posté 14 Janvier 2006 Bien sur, mais je voulais tester par SSH car pour la table ibf_posts car c'est assez long et ça fait ramer le serveur par l'interface IPB ou phpmyadmin.. je n'ai pas encore essayé mais je me suis dit que ce serait aussi plus rapide.
Dan Posté 14 Janvier 2006 Posté 14 Janvier 2006 Je ne pense pas... il est plus rapide de lancer un import par mysql (sous ssh) mais l'optimization d'une table ne devrait pas faire de différence. Cela durera aussi en ssh...
Antoine Cailliau Posté 14 Janvier 2006 Posté 14 Janvier 2006 (modifié) En effet. Ce qu'il y a c'est que avec PHPMyAdmin, une surcouche PHP est ajoutée à l'exécution. Mais le temps d'exécution PHP est quand même relativement faible, on peut donc, je pense, le négliger. La différence c'est que après, PhpMyAdmin affiche les résultat et exécute un tas de traitement que l'on a pas besoin et qui ne sont pas présent en ssh. peut-être que la différence est à ce niveau. Modifié 14 Janvier 2006 par Antoine Cailliau
NiCoS Posté 14 Janvier 2006 Posté 14 Janvier 2006 et avec la commande : myisamchk *.MIY (ou qqc d'apprrochant), ca fait pas pareil ? c'est juste pour de la réparation de tables ?
alphega Posté 15 Janvier 2006 Auteur Posté 15 Janvier 2006 Si je comprends bien, c'est effectivement la meme chose en recovery mode: To coalesce fragmented records and eliminate wasted space resulting from deleting or updating records, run myisamchk in recovery mode: shell> myisamchk -r tbl_name You can optimize a table in the same way by using the SQL OPTIMIZE TABLE statement. OPTIMIZE TABLE does a repair of the table and a key analysis, and also sorts the index tree to give faster key lookups. There is also no possibility of unwanted interaction between a utility and the server, because the server does all the work when you use OPTIMIZE TABLE. See Section 13.5.2.5, OPTIMIZE TABLE Syntax. http://dev.mysql.com/doc/refman/4.1/en/tab...timization.html
NiCoS Posté 15 Janvier 2006 Posté 15 Janvier 2006 Dans ce cas, c'est vachement facile de scripter en ligne de commande
Dan Posté 15 Janvier 2006 Posté 15 Janvier 2006 Attention à ne pas lancer myisamchk lorsque le serveur mysqld tourne. Tu risques d'avoir des problèmes dans ce cas. Il faut arrêter le serveur mysql avant de lancer myisamchk. Pour forcer le nettoyage de toutes les tables, il suffit de donner tous les fichiers Index en argument, ou encore *.MYI Dan
alphega Posté 15 Janvier 2006 Auteur Posté 15 Janvier 2006 Merci, je vais en rester à la méthode "optimize table" pour pas faire de betises...
Antoine Cailliau Posté 15 Janvier 2006 Posté 15 Janvier 2006 C'est un fort de devoir arrêter un serveur pour faire un optimize... Je pense que le myisamchk est à favoriser pour des erreurs plus important et une récupération plutot qu'un optimize
Dan Posté 15 Janvier 2006 Posté 15 Janvier 2006 C'est un fort de devoir arrêter un serveur pour faire un optimize... Je pense que le myisamchk est à favoriser pour des erreurs plus important et une récupération plutot qu'un optimize Tout à fait... c'est principalement pour corriger les erreurs, même si cela fait AUSSI un OPTIMIZE. Donc il est logique d'arrêter le serveur mysql avant. Et bien d'accord avec toi, le OPTIMIZE TABLE est le moyen le plus simple à mettre en oeuvre.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant