{{tag>mysql prompt export csv innodb}}
====== Mysql ======
===== Personnaliser le prompt mysql =====
Pour éviter de se tromper de serveur MySQL quand on fait des manips, il peut etre intéressant de differencier les serveurs MySQL sur lesquels on est connecté.
Le plus simple est de modifier le prompt pour afficher par exemple : utilisateur, serveur, base de donnée.
Pour ce faire, ajouter dans la section [mysql] du fichier /etc/mysql/my.cnf la directive suivante :prompt = "\u@\h \d > "
Si vous n'etes pas admin du serveur, vous pouvez placer cette option dans le fichier .my.cnf de votre répertoire personnel, comme par exemple avec la commande suivante :
cat << EOF >> ~/.my.cnf
[mysql]
prompt = "\u@\h \d > "
EOF
Dans le cas ou cela ne marcherait pas (hostname a localhost par exemple), il existe une autre possibilité : exporter la variable suivant en bash
export MYSQL_PS1="\u@`hostname` (\d) > "
Vous pouvez par exemple rajouter cette commande dasn votre ~/.bashrc ou ~/.bash_variables
===== Avoir rapidement le nombre d'entrées dans une GROSSE table (valable en innodb uniquement) =====
Cela donne uniquement une valeur approximative, le nombre d'enregistrements n'etant pas mis a jour pour des raisons de perf :
show table status like 'MaGrosseTable';
===== Exporter des données dans un fichier csv =====
Pour exporter des données dnas un fichier CSV, utiliser un "SELECT ... INTO OUTFILE" comme par exemple dans l'exemple ci dessous :
SELECT order_id,product_name,qty FROM orders INTO OUTFILE '/tmp/orders.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
Il vous faudra un acces au serveur mysql pour récupérer le fichier csv obtenu
Il faudra aussi que l'utilisateur MySQL que vous utilisez ait le droit "FILE" sous pein d'obtenir une erreur "ERROR 1045 (28000): Access denied for user 'monUser'@'%' (using password: YES)"
Pour lui affecter si vous le pouvez, utiliser une syntaxe similaire a: "GRANT FILE ON maBase.* TO 'monUser'@'%';"
====== Savoir quelles tables sont fragmentées =====
Pour savoir quelles tables sont fragmentées, on peut utiliser la commande suivante :SELECT engine, table_schema, table_name, data_free*100/data_length AS percent_frag FROM information_schema.tables where data_free IS NOT NULL and data_free <> 0 order by percent_frag ;
Il suffit ensuite de lancer un "OPTIMIZE table MaTable" sur ces tables pour réduire la fragmentation
Il doit y avoir mieux cette commande donne des faux positifs et/ou quelques valeurs bizarres, mais ca marche (tm)