Aller au contenu

Sujets conseillés

Posté

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 :)

Posté

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 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:

Posté

:blush: 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 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;

+-----------------------+----------+----------+----------+
| 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:

Posté

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)

Posté

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 :)

Posté

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

Posté

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:

Posté

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...

Posté (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é par Antoine Cailliau
Posté

et avec la commande : myisamchk *.MIY (ou qqc d'apprrochant), ca fait pas pareil ? c'est juste pour de la réparation de tables ?

Posté

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

Posté

Dans ce cas, c'est vachement facile de scripter en ligne de commande ;)

Posté

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

Posté

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 :)

Posté
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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...