Ceci est une ancienne révision du document !



MySQL

MySQL est un système de gestion de bases de données relationnelles (SGBDR) libre et gratuit. Il est performant et très populaire. Il est multi-threadé et multi-utilisateurs.

Savoir si MySQL est lancé

Pour savoir si le serveur MySQL est lancé, tapez la commande suivante dans un terminal :

sudo service mysql status

Si MySQL est en fonctionnement, vous devriez obtenir une ligne semblable à :

mysql start/running

Démarrage

Pour démarrer le serveur MySQL, tapez la commande suivante dans un terminal :

sudo service mysql start

Redémarrage

Pour redémarrer le serveur MySQL, tapez la commande suivante dans un terminal :

sudo service mysql restart

Arrêt

Pour arrêter le serveur MySQL, tapez la commande suivante dans un terminal :

sudo service mysql stop

Rechargement de la configuration

Pour que MySQL prenne en compte les modifications de sa configuration, tapez la commande suivante dans un terminal :

sudo service mysql reload

Forcer la prise en compte de la nouvelle configuration

Pour forcer MySQL à recharger ses fichiers de configuration, tapez la commande suivante dans un terminal :

sudo service mysql force-reload

Lancer la console MySQL

Bug possible rencontré avec le client text de mysql, la touche suppr du clavier insère le tilde ~ (au lieu de supprimer). Pour palier ce bug, installez le programme rlwrap (pour en savoir plus : man rlwrap)
sudo apt-get install rlwrap

et ajoutez celui-ci avant la commande mysql, exemple :

rlwrap -a mysql -uroot -pvotremotdepasse votrebase
  • Si vous n'avez pas défini de mot de passe (déconseillé) :
    mysql -u root
  • Si vous avez défini un mot de passe :
    mysql -u root -p

    et tapez votre mot de passe.

Vous arriverez alors sur un prompt du type :

mysql>

Vous pouvez alors taper vos requêtes MySQL. N'oubliez pas le point-virgule à la fin de la requête. Si vous l'oubliez le prompt passe à la ligne.

mysql> select * from
    ->

Ce passage vous indique que la requête n'est pas terminée. Vous pouvez entrer vos requêtes de cette façon sur plusieurs lignes et enfin la clôturer avec le « ; ».

Sélectionner la base de données à utiliser

Soit directement lorsque vous lancez le client mysql en ligne de commande :

mysql -u root -p votre_base

Soit une fois connecté à mysql en tapant :

mysql> use votre_base;

Ajouter ou changer le mot de passe de root

Pour changer le mot de passe de l'utilisateur root (qui n'est pas le même que l'utilisateur root du système), tapez la commande suivante dans un terminal :

sudo mysqladmin -u root password nouveau_mot_de_passe -p

Redéfinir de force le mot de passe de root

Méthode 1

Si vous avez perdu votre mot de passe Root pour MySQL, suivez ces quelques étapes :

On stoppe le serveur MySQL :

sudo  service mysql stop

On se connecte au serveur sans tenir compte des privilèges utilisateurs :

sudo /usr/bin/mysqld_safe --skip-grant-tables &
mysql -h localhost

Nous allons utiliser la table contenant les paramètres de MySQL :

use mysql

On met en place le nouveau mot de passe :

update user set password = password('<votre_mot_de_passe>') where user = 'root' and host='localhost';

(remplacez <votre_mot_de_passe> par le mot de passe de votre choix)

On quitte le prompt de MySQL :

quit

On redémarre le serveur MySQL en utilisation normale :

sudo service mysql restart

Méthode 2

Une autre méthode beaucoup plus simple :

sudo service mysql reset-password

Méthode 3

Une autre méthode simple qui fonctionne sur les Ubuntu récentes (7.10, 8.x,…) :

sudo dpkg-reconfigure mysql-server-5.0

Utiliser un autre numéro de port

Pour activer la connexion à MySQL via le port 3306, commentez la ligne suivante dans le fichier /etc/mysql/my.cnf (en ajoutant # au début de la ligne) :

skip-networking

FIXME

Connexions entrantes

Par défaut, MySQL n'écoute que les connexions venant de localhost (127.0.0.1), c'est-à-dire du système sur lequel il est installé.

Pour pouvoir accéder à MySQL depuis un autre ordinateur, ajoutez la ligne suivante au fichier /etc/mysql/my.cnf dans la section « [mysqld] » :

bind-address = x.x.x.x

où x.x.x.x est l'adresse ip de l'interface sur laquelle MySQL doit écouter. Cela permet de n'écouter que sur une ip privée si vous avez plusieurs interfaces réseaux.

Vous pouvez mettre 0.0.0.0 si MySQL doit écouter les connexions venant de toutes les interfaces réseaux, et donc être totalement accessible. Cela peut être dangereux si votre serveur est connecté à Internet directement.

Configuration en UTF-8

Il suffit d'ajouter les deux lignes suivantes à la fin de la section « [mysqld] » du fichier /etc/mysql/my.cnf :

character-set-server=utf8
skip-character-set-client-handshake
Il semble que ce soit l'instruction default-character-set=utf8 qui produise le résultat escompté (à la place de character-set-server)

puis de relancer le serveur mysql :

sudo service mysql restart

Vous pouvez vérifier le résultat une fois loggé dans mysql grâce à la commande suivante :

SHOW VARIABLES LIKE 'char%';

Résultat :

mysqld> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysqld/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

FIXME

Toutes ces commandes sont à entrer dans le prompt de mysql une fois connecté au serveur

Base de donnée

Utiliser une base de données existante

USE nom_de_la_base;

Créer une base de données

CREATE DATABASE nom_de_la_base;

Liste des bases de données

SHOW DATABASES;

Supprimer une base de données

DROP DATABASE nom_de_la_base;

Tables

Liste des tables de la base de données active

SHOW TABLES;

Structure d'une table

DESCRIBE nom_table;

Renommer une table

ALTER TABLE nom_table RENAME AS nouveau_nom;

Pour la syntaxe des requêtes SQL, reportez-vous à la documentation MySQL.

Utilisateurs

Créer un utilisateur

CREATE USER "nom_utilisateur"@"localhost";

Définir un mot de passe

SET password FOR "nom_utilisateur"@"localhost" = password("mot_de_passe");

Supprimer un utilisateur

DROP USER "nom_utilisateur"@"localhost";

Lister les utilisateurs

SELECT USER FROM mysql.user;

Privilèges

Donner tous les droits sur une base de données à un utilisateur précis

GRANT ALL ON nom_base.* TO "nom_utilisateur"@"localhost";

Supprimer les droits sur une base de données à un utilisateur précis

REVOKE ALL privileges ON nom_base.* FROM "nom_utilisateur"@"localhost";

Sauvegarde et importation

Pour exporter la base de donnée « maBase », utilisez la commande :

mysqldump -u root -p maBase > maBase_backup.sql

Ceci fera l'export dans un fichier « maBase_backup.sql ».

Pour exporter une table (par exemple ma_table )appartenant à une base des données (par exemple maBase) :

mysqldump -u root -p maBase ma_table > ma_table.sql

Ainsi nous aurons une exportation seulement de la table ma_table sans toucher à d'autres tables de la base des données

Pour importer une base de données ou une sauvegarde sur « maBase », utilisez la commande :

mysql -u root -p maBase < maBase_backup.sql

Puis tapez votre mot de passe.

Si vous souhaitez mettre en place une solution de sauvegarde automatique de bases de données à intervalle régulier, rendez-vous sur le tutoriel traitant de la sauvegarde automatique de bases de données via cron.

D'autres commandes telles que la suppression des tables, de la base, l'ajout des données dans la base des données, etc. peuvent être trouvées sur le site de documentation de MySQL.

Restauration à partir du dump du datadir

Ne fonctionne que pour les tables au format MyISAM

Si vous n'avez pas pu faire un backup pour une raison quelquonque (par exemple, vous récupérez un disque dur dont le système est mort), on peut sauvegarder le répertoire « /var/lib/mysql/ » dans lequel chacune des bases est enregistrée dans un répertoire portant son nom.

Pour restaurer vos bases une par une, suivez la procédure ci dessous (après avoir d'abord installé une version de mysql-server).

Créer une base de donnée du même nom que celle que vous voulez restaurer :

echo "CREATE DATABASE MaBaseDeDonnee" | mysql -u root -h localhost -p

Copier les fichiers du dump de la base de donnée (les *.FRM, *.MYD, *.MYI, *.opt), dans le dossier que MySQL a créé pour votre base de donnée :

cd ~/MonDossierContenantLeDump/MaBaseDeDonnee
sudo cp * /var/lib/mysql/MaBaseDeDonnee

Changer les droits sur les fichiers copiés :

sudo chmod -R ug+rw /var/lib/mysql/MaBaseDeDonnee/
sudo chown -R mysql:mysql /var/lib/mysql/MaBaseDeDonnee/

Voilà, votre base doit correctement fonctionné à présent.

Compacter l'espace utilisé par ibdata1

Mysql stoque ses fichiers dans le dossier /var/lib/mysql. Il arrive avec le temps et l'utilisation que le fichier ibdata1 occupe un espace disque très important qui ne sera pas récupéré même en supprimant toutes les bases.

Pistes pour comprendre et corriger ce problème :

Déplacer ses bases de données MySql

Préambule

la plupart des utilisateurs créent de 2 à 3 partitions sur leur(s) installation(s)

  • / - une partition système
  • swap - une partition de de swap
  • /home - une partition réservée aux utilisateurs

L'intérêt de ce partitionnement est qu'en cas de réinstallation, les données utilisateurs (données, profils, compte courrier, favoris Internet, thème de bureau, etc.) sont sauvegardées et aussitôt exploitable. Ça n'est malheureusement pas le cas pour les bases de données MySql, et un utilisateur non averti, écrasera sans le savoir ses bases de données qui sont stockées sur /var/lib/mysql (donc dans la partition '/' système).

Il peut donc être intéressant pour cela de déplacer ses bases de données dans la partition /home.

Mise en place

Arrêter mysql :

sudo service mysql stop

Déplacer le répertoire des bases de données :

sudo mv /var/lib/mysql /home/mysql

Le déplacement par 'mv' permet de ne pas modifier les droits originaux.

Créer un lien symbolique afin de ne pas "casser" les fichiers de configuration originel de MySql :

sudo ln -s /home/mysql /var/lib/mysql

S'assurer que l'utilisateur 'mysql' est bien le propriétaire de ce lien symbolique:

sudo chown -h mysql:mysql /home/mysql

Pour les versions d'Ubuntu utilisant Apparmor (Notamment Ubuntu 10.04), il vous faut modifier le fichier de configuration mysql dans Apparmor.

Éditer /etc/apparmor.d/usr.sbin.mysqld

Il suffit de trouver les deux lignes suivantes :

  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,

et de les modifier en :

  /home/mysql/ r,
  /home/mysql/** rwk,

On relance la configuration d'Apparmor :

sudo service apparmor reload

On relance MySql :

sudo service mysql start

Et voilà.


Contributeurs : _Enchained, Hugo, Oscar Nsarhaza, Ner0lph, — david96 Le 06/12/2009, 23:02, Gounlaf., McPeter

  • mysql.1287033437.txt.gz
  • Dernière modification: Le 18/04/2011, 14:57
  • (modification externe)