Version complète: sur le forum Webmaster Hub : Optimize table via SSH
Webmaster Hub > Création et exploitation de Sites Internet > Les fondations d'un site > Hébergement de Sites
alphega
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 smile.gif
kazhar
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
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

CODE
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 1
mysql> 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 wacko.gif
NiCoS
il te manque le ; à la fin de ta commande smile.gif
alphega
blush.gif 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:
CODE
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with; or \g.
Your MySQL connection id is 808310 to server version: 4.0.25-standard-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


Pour optimiser une table:

optimize table nom_table;

CODE
+-----------------------+----------+----------+----------+
| 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 wub.gif
Antoine Cailliau
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
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 smile.gif
Dan
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
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. unsure.gif
Dan
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
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.
NiCoS
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
Si je comprends bien, c'est effectivement la meme chose en recovery mode:

CITATION
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
Dans ce cas, c'est vachement facile de scripter en ligne de commande wink.gif
Dan
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
Merci, je vais en rester à la méthode "optimize table" pour pas faire de betises... ^_^
Antoine Cailliau
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 smile.gif
Dan
CITATION(Antoine Cailliau @ dimanche 15 janvier 2006, 11h42)
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 smile.gif
*

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.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.