« Installation et configuration de MySQL » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Ligne 81 : Ligne 81 :
=Sauvegarder et restaurer une base de donnée MySQL=
=Sauvegarder et restaurer une base de donnée MySQL=
==Sauvegarde==
==Sauvegarde==
L'option <code>--opt</code> active les flags <code>--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset</code>


Pour sauvegarder une base entière afin de la restaurer sur le même serveur mysql :
Pour sauvegarder une base entière afin de la restaurer sur le même serveur mysql :
Ligne 92 : Ligne 90 :
Pour sauvegarder uniquement une table d'une base :
Pour sauvegarder uniquement une table d'une base :
<pre>mysqldump -u root -p --opt nom__de_la_base nom__de_la_table > sauvegarde.sql</pre>
<pre>mysqldump -u root -p --opt nom__de_la_base nom__de_la_table > sauvegarde.sql</pre>
<br>
L'option <code>--opt</code> active les flags <code>--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset</code>


==Restauration==
==Restauration==

Version du 26 octobre 2018 à 17:53

Installation et configuration

Pour installer mysql, tapez :

aptitude install mysql-server mysql-client

L'installeur vous demandera de spécifier le mot-de-passe root pour mysql. Si vous choisissez de ne pas en entrer un, vous pourrez toujours le faire plus tard.

Nous allons modifier la configuration de mysql afin de stocker les bases de données à un endroit plus propre. Pour cela, éditez le fichier /etc/mysql/my.cnf, recherchez la ligne datadir et remplacez la par :

datadir /srv/mysql

Copiez l'ancien répertoire de la base de donnée au nouvel emplacement et attribuez lui les bons privilèges :

cp -R /var/lib/mysql/ /srv/
chown -R  mysql /srv/mysql
chgrp -R  mysql /srv/mysql

Essayez de lancer mysql :

/etc/init.d/mysql start

Si mysql refuse de démarrer, c'est probablement un problème de permission. Le dossier mysql et tous les sous dossiers présent dans /srv/mysql doivent appartenir à mysql:mysql et avoir les permissions rwxr-x---

chmod 750 /srv/mysql/

Essayez de relancer mysql.

/etc/init.d/mysql start

Par défaut sous debian jessie, mysql le bind qu'en local. Si vous souhaitez écouter sur une ip autre (attention aux problèmes de sécurité que celà peut poser !), editez la ligne suivante dans le fichier /etc/mysql/my.cnf :

bind-address            = 192.168.50.5

Le mot de passe root de MySQL

Si vous n'avez pas spécifié de mot-de-passe root pour mysql lors de son installation, vous pouvez le faire maintenant. Loguez vous en root sans mot-de-passe :

mysql -u root -p

Faites simplement enter lorsque le mot de passe vous sera demandé. Une fois au prompt mysql>, vous pouvez définir le mot-de-passe root en tapant :

UPDATE mysql.user SET Password = PASSWORD('motdepasse') WHERE User = 'root';
FLUSH PRIVILEGES;

Créer un utilisateur et lui attribuer les droits sur une base de donnée

Nous allons voir comment créer une base de donnée nommée plouf, puis un utilisateur plop ayant tous les droits sur cette base.

Pour commencer, créer la base de donnée plouf :

mysql -u root -p
mysql> create database plouf;
GRANT ALL PRIVILEGES ON plouf.* TO "plop"@"localhost" IDENTIFIED BY 'password';

Vous pourrez désormais utiliser cette base avec l'utilisateur plop.

Récupérer le mot-de-passe root perdu

Arrêtez votre serveur mysql :

/etc/init.d/mysql stop

Démarrez mysql de cette manière :

mysqld --skip-grant-tables --skip-networking & 

Cela permet de démarrer le serveur mysql sans qu'il prenne en compte les droits (pour modifier le mot de passe) et sans qu'il n'écoute sur le réseau (histoire d'être certain que personne ne s'y connecte en root pendant que vous changez le mot de passe).

Loguez vous sous mysql :

mysql

Et tapez la requête sql suivante pour changer votre mot de passe root :

UPDATE mysql.user SET Password = PASSWORD('motdepasse') WHERE User = 'root';
FLUSH PRIVILEGES;

Délogez vous de la console mysql en tapant quit;. Vous pouvez maintenant relancer mysql normalement :

/etc/init.d/mysql restart

Sauvegarder et restaurer une base de donnée MySQL

Sauvegarde

Pour sauvegarder une base entière afin de la restaurer sur le même serveur mysql :

mysqldump -u root -p --opt nom_de_la_base > sauvegarde.sql

Pour sauvegarder une base entière afin de la restaurer sur un autre serveur mysql (ajout d'un champ créant la base de donnée):

mysqldump -u root -p --databases --opt nom_de_la_base > sauvegarde.sql

Pour sauvegarder uniquement une table d'une base :

mysqldump -u root -p --opt nom__de_la_base nom__de_la_table > sauvegarde.sql


L'option --opt active les flags --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset

Restauration

Pour restaurer une table d'une base ou une base complète :

mysql -u root -p ma_base < sauvegarde.sql

Gérer facilement ses bases de données avec PhpMyAdmin

Phpmyadmin permet de gérer ses bases de données MySQL très facilement grâce à une interface web. Commençons par installer phpmyadmin :

aptitude install phpmyadmin

Lorsque l'installeur vous demandera s'il faut configurer automatiquement phpmyadmin sur un serveur web, ne cochez aucune case et validez.

Si par erreur vous avez validé l'autoconfiguration pour apache, vous pouvez toujours désactiver la configuration ajoutée avec

a2disconf phpmyadmin

L'installeur vous demandera ensuite s'il doit configurer la base de donnée de phpmyadmin avec dbconfig-common. Choisissez oui. A l'écran suivant, vous devrez entrer le mot-de-passe de votre utilisateur mysql root. Enfin, un invite vous demandera de choisir un mot-de-passe pour l'utilisateur phpmyadmin puis de le confirmer.

Par défaut, phpmyadmin s'installe dans /usr/share/phpmyadmin/ Bien-sur, vous voudrez probablement que phpmyadmin soit accessible grâce à l'un de vos site internet. Il suffit d'ajouter la ligne suivante dans le fichier de configuration de la vhost apache correspondante :

Include /etc/phpmyadmin/apache.conf

Si vous avez sécurisé votre installation php avec open_basedir il faut préciser les arguments suivants pour php_admin_value open_basedir dans la configuration de la vhost (/etc/apache2/sites/admin.domain.tld.conf dans mon cas) :

php_admin_value open_basedir /srv/http/domain.tld/admin.domain.tld/:/usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/

Et enfin, si vous utilisez à la fois les modules php et suphp de apache, activez php pour phpmyadmin en ajoutant les lignes suivantes dans /etc/apache2/mods-enabled/php5.conf :

  <Directory /usr/share/phpmyadmin>
    php_flag engine on
  </Directory>

Désormais, vous pouvez accéder à phpmyadmin par l'url correspondant au site pour lequel vous avez créé le lien. Dans mon cas :

http://admin.domain.tld/phpmyadmin/

Pour plus de sécurité, vous pouvez placer un fichier .htaccess dans /usr/share/phpmyadmin/ afin de bloquer l'accès à phpmyadmin aux utilisateurs ne s'étant pas logué sur http://admin.domain.tld/ :

AuthType Digest
AuthName "administration interface"
AuthDigestProvider file
AuthDigestDomain /
AuthUserFile /srv/http/admin.domain.tld/.htpasswd
AuthGroupFile /srv/http/admin.domain.tld.htgroup
require group root user

Optimiser les réglages de MySQL

MySQLTuner est un petit script perl qui vous proposera des optimisations pour votre configuration MySQL en fonction des statistiques de votre utilisation.

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

Vous pouvez automatiser le login en créant un fichier .my.cnf dans votre home et contenant les informations de connexion :

[client]
user=username
pass=password

Vous pouvez aussi essayer https://launchpad.net/mysql-tuning-primer

Optimiser les tables

mysqlcheck -o --all-databases

Quelques commandes MySQL

Je vais ici vous donner quelques requêtes mysql utiles ainsi qu'une courte description de leurs actions.

Donner la liste des bases de données :

mysql> SHOW DATABASES;

se placer dans la base blah. Il est nécessaire de se placer de cette manière dans une base avant de pouvoir en modifier les tables, champs, ...

mysql> use blah;

Donner la liste des tables de la base de donnée active :

mysql> SHOW TABLES;

Renvoyer tous les champs de la table "table" :

mysql> select * from table;

Renvoyer toute la colonne "column" de la table "table" :

mysql> select column from table;

Renvoyer la colonne "column" de la table "table" où le champ "pom" vaut "blah" :

mysql> select column from table where pom='blah'

Changer la valeur de la colonne "column" dans la table "table" à la ligne où "column2" vaut "blah" :

mysql> UPDATE table SET column='gnu' WHERE column2='blah';

Vider la table "table"

mysql> DELETE FROM table;

Supprimer la ligne où la colonne "column" vaut "blah" dans la table "table"

mysql> DELETE FROM table WHERE column='blah'; 

Supprimer la table "table" :

mysql> drop table table; 

Supprimer la base blah :

mysql> drop database blah;