Pense-bête : MySQL : Dumps, optimisation, import…

de | 10 octobre 2014

J’inaugure une nouvelle section de mon blog après quelques moments d’absence…

Il s’agit de réaliser un « pense bête » bien utile pour ne pas avoir à chercher l’information sur Google X fois, ce qui est bien utile quand l’on a une mémoire de poisson-rouge comme moi ;-)

On commence donc avec MySQL…

Copie de table sur MySQL

create table MaNouvelleTable like MaTableDeReference

Permet de créer une table avec les mêmes caractéristiques que la table originale, sans les données.

Copie de contenu sur MySQL

insert into MaNouvelleTable select * from MaTableDeReference;

Permet de copier les données entre des tables.

Import d’un fichier gzippé dans MySQL  sur Linux

zcat foo.sql.gz | mysql DATABASE_NAME

Permet d’importer un fichier compressé

Import d’un fichier CSV dans MySQL

Adaptez l’exemple suivant :

LOAD DATA INFILE ‘/root/mon-fichier.csv’ INTO TABLE ma_table FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’ IGNORE 3 ROWS (champ_table_1,champ_table_x,@START_TIMESTAMP,champ_table_y) SET START_TIMESTAMP = STR_TO_DATE(@START_TIMESTAMP, ‘%d-%b-%Y’) ;

Pour voir les paramètres à mettre à STR_TO_DATE (les formats de date en entrée), voir ici : doc Mysql

Si vous avez l’erreur : ERROR 13 (HY000): Can’t get stat of ‘/root/mon-fichier.csv’ (Errcode: 13)
Remplacez LOAD DATA INFILE par LOAD DATA LOCAL INFILE

Si à ce moment là vous avez l’erreur ERROR 1148 (42000): The used command is not allowed with this MySQL version
rajoutez l’option –enable-local-infile lorsque vous lancez le client MySQL. Vous pouvez aussi la rajouter au .my.cnf (configuration du client) mais attention, la commande mytop (requêtes en cours) plante après.

Faire un dump SQL avec une clause where

Un petit truc très utile lorsque l’on ne veut exporter que certaines lignes d’une table, on met donc une clause where

mysqldump -w "nom_de_colonne = 'valeur'" nom_de_base  nom_de_table > fichier.sql

Afficher la liste des process MySQL en cours, et ce qu’ils sont entrain de faire :

show full processlist;

Vous pouvez également utiliser la commande

mytop

Les users et leurs droits dans MySQL

CREATE USER 'michel'@'%' IDENTIFIED BY 'mypassword123';

Pour créer un utilisateur de nom michel qui n’est pas limité à une adresse IP.

il faut ensuite lui donner des droits :

GRANT INSERT , UPDATE , DELETE ON `nom_de_base`.`nom_de_table` TO `michel`@`%`;

Permet de donner les droits INSERT , UPDATE , DELETE sur la table nom_de_table à michel@%

Optimisation MySQL

Tuning

un script très utile s’appelle mysqltuner

on installe le script perl :

aptitude install mysqltuner

puis en le faisant tourner (on appelle mysqltuner) le script donne des préconisations pour l’ajustement des variables

Gestion de la mémoire

  • max_heap_table_size
  • tmp_table_size

Doivent avoir la même taille

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Time limit is exhausted. Please reload the CAPTCHA.