Niveau : Confirmé

Installation et configuration de MySQL sous Linux

Mise en place d'un serveur MySQL, optimisation et recommandations

Tutoriel par (Alsacréations, Strasbourg)
Créé le , mis à jour le (117526 lectures)
Tags : développement, mysql, linux

Parce que les bases de données ça sert... des fois

MySQL et son installation

Flipper

MySQL est le serveur de bases de données le plus répandu pour les serveurs web. Il allie une grande souplesse d'utilisation et de nombreuses fonctionnalités, tandis que sa mise en œuvre reste simple.

Installation

Grâce à APT nous installons les paquets correspondants :

apt-get install mysql-server mysql-client libmysqlclient15-dev mysql-common

Configuration

La configuration de base est stockée dans /etc/mysql/my.cnf

vi /etc/mysql/my.cnf

Voici quelques options intéressantes à modifier par défaut

language = /usr/share/mysql/french
Choisir la langue par défaut pour les messages du serveur (français)
key_buffer = 32M
Taille du cache des index
query_cache_limit = 2M
Taille limite du cache par requête
query_cache_size = 32M
Taille totale du cache des requêtes
#log_bin = /var/log/mysql/mysql-bin.log
#expire_logs_days = 10
Désactiver le log binaire en commentant ces deux lignes grâce à # (le log binaire n'est utile que dans le cas de réplications avec serveurs maître-esclave)
log_slow_queries = /var/log/mysql/mysql-slow.log
Mettre en log les requêtes lentes (utile pour les repérer et les optimiser)
long_query_time = 2
Durée (en secondes) à partir de laquelle une requête est considérée comme lente

[mysqld]

default-character-set = utf8
Jeu de caractères par défaut pour le serveur
default-collation = utf8_general_ci
Collation du jeu de caractères

[client]

default-character-set = utf8
Jeu de caractères par défaut pour le client

N'oubliez pas de recharger le serveur suite à ces modifications :

/etc/init.d/mysql reload

Optimisation

MySQLTuner

Si vous désirez optimiser cette configuration (après l'avoir exploitée, les statistiques n'étant pas représentatives au départ), faites appel à MySQLTuner. Il s'agit d'un script écrit en Perl qui ne modifiera pas votre configuration mais vous proposera des améliorations.

wget http://mysqltuner.com/mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl

Sécurisation

Il est facile de mettre en place quelques règles simples pour sécuriser le serveur, grâce au script :

mysql_secure_installation

Et en répondant à quelques questions :

Set root password ? Y
Permet de modifier le mot de passe root (de mysql)
Remove anonymous users ? Y
Retire les accès anonymes
Disallow root login remotely ? Y
Retire l'accès root distant (recommandé)
Remove test database and access to it ? Y
Retire la base test et ses accès
Reload privilege tables now ? Y
Recharge les privilèges suite aux modifications

Connexion

MySQL

Vous pourrez vous connecter en ligne de commande grâce au client :

mysql -ulogin -pmotdepasse

Ou bien en utilisant un client graphique, voire aussi phpMyAdmin (installation par défaut : apt-get install phpmyadmin puis éditez config.inc.php ou recopiez-le à partir de config.sample.inc.php)

Commandes shell utiles

mysqldump -ulogin -pmotdepasse nom_base --opt >fichier.sql
Exporte la base nom_base vers fichier.sql
mysqldump -ulogin -pmotdepasse --all-databases --opt >fichier.sql
Exporte toutes les bases vers fichier.sql
mysql -ulogin -pmotdepasse <fichier.sql
Importe les instructions du fichier SQL
mysqladmin
Toute une collection d'outils pour administrer le serveur.

L'option --opt combine --add-drop-table --add-locks --all --extended-insert --quick --lock-tables. Référez-vous à la documentation (man mysqldump) pour plus de renseignements.

Commandes de base en ligne de commande MySQL (client)

Terminez toutes vos commandes avec le caractère point-virgule ;

SHOW DATABASES
Liste les bases de données
SHOW STATUS
Affiche le statut du serveur
USE nom_base
Sélectionne la base par défaut
SHOW TABLES
Affiche les tables de la base courante
DESCRIBLE table
Affiche la structure de la table
SELECT * FROM table
Affiche le contenu de la table
CREATE DATABASE base
Crée une nouvelle base de données

Pour avoir toutes les commandes à portée de la main, n'oubliez pas le Memento MySQL aux éditions Eyrolles ;)

Memento MySQL

Au sommaire :

  • Création d'une base de tables
  • Connexion à une base de données
  • Renommer/supprimer bases, tables et clés
  • Type de champs
  • Type d'index (clés)
  • Gestion des utilisateurs
  • Modifier la structure d'une table
  • Requêtes
  • Requêtes conditionnelles avec WHERE
  • Déclencheurs (TRIGGER)
  • Groupage et tri
  • Fonctions mathématiques
  • Unions et jointures
  • Fonctions diverses
  • Manipulation de chaînes de caractères
  • Fonctions de dates
  • Procédures stockées et fonctions
  • Transactions
  • Vues
  • Administration et performances
  • Variables serveur