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

Aller à la navigation Aller à la recherche
(25 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:serveur]]
[[Category:serveur]]
[[Category:debian]]
[[Category:debian]]
=Installation et configuration=


[[Category:serveur]]
Pour installer le serveur mariadb, tapez :
[[Category:debian]]
<pre>aptitude install mariadb-server mariadb-client</pre>
=Installation et configuration=
 
Puis lancez
<pre>mysql_secure_installation</pre>
 
Mariadb recommande d'éviter au maximum l'[https://mariadb.com/kb/en/configuring-swappiness/ utilisation du swap]. Définissez la ligne suivante par exemple dans <code>/etc/sysctl.d/local.conf</code> :
<pre>vm.swappiness = 1</pre>


Pour installer mysql, tapez :
==Changement du datadir==
<pre>aptitude install mysql-server mysql-client</pre>


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.
Stoppez le serveur :
<pre>/etc/init.d/mysql stop</pre>


Nous allons modifier la configuration de mysql afin de stocker les bases de données à un endroit plus propre. Pour cela, éditez le fichier <code>/etc/mysql/my.cnf</code>, recherchez la ligne <code>datadir</code> et remplacez la par :
Nous allons modifier la configuration de mysql afin de stocker les bases de données à un endroit plus propre. Pour cela, éditez le fichier <code>/etc/mysql/my.cnf</code>, recherchez la ligne <code>datadir</code> et remplacez la par :
Ligne 16 : Ligne 22 :
Copiez l'ancien répertoire de la base de donnée au nouvel emplacement et attribuez lui les bons privilèges :
Copiez l'ancien répertoire de la base de donnée au nouvel emplacement et attribuez lui les bons privilèges :
<pre>
<pre>
cp -R /var/lib/mysql/ /srv/
rsync -av /var/lib/mysql/ /srv/mysql/
chown -R  mysql /srv/mysql
chgrp -R  mysql /srv/mysql
</pre>
</pre>


Ligne 26 : Ligne 30 :
</pre>
</pre>


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 <code>/srv/mysql</code> doivent appartenir à <code>mysql:mysql</code> et avoir les permissions <code>rwxr-x---</code>
Si mysql refuse de démarrer, c'est probablement un problème de permission.
<pre>chmod 750 /srv/mysql/</pre>


Essayez de relancer mysql.
=Servir des requêtes sur le réseau=
<pre>/etc/init.d/mysql start</pre>


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 <code>/etc/mysql/my.cnf</code> :
Par défaut sous debian, mysql/mariadb n'écoute que sur localhost. Si vous souhaitez écouter sur une ip autre (attention aux problèmes de sécurité que cela peut poser !), éditez la ligne suivante dans le fichier <code>/etc/mysql/mariadb.conf.d/50-server.cnf</code> :
<pre>bind-address            = 192.168.50.5</pre>
<pre>bind-address            = 192.168.50.5</pre>


=Le mot de passe root de MySQL=
=Le login root de MySQL=
 
Après avoir lancé <code>mysql_secure_installation</code> vous avez probablement du définir un mot-de-passe root et désactivé le login extérieur avec l'utilisateur mysql root.
 
Par défaut sous Debian Buster, mariadb log l'utilisateur root avec le socket unix, sans mot-de-passe nécessaire :
<pre>mysql -u root</pre>
 
Le défaut de cette mécanique est qu'il va empêcher, par exemple, le login root avec phpmyadmin. Pour ré-activer le login root par mot-de-passe :
<pre>
mysql -u root
use mysql;
update user set plugin='' where user='root';
flush privileges;
</pre>


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 :
Désormais pour vous connecter à mysl vous devrez entrer un mot-de-passe :
<pre>mysql -u root -p</pre>
<pre>mysql -u root -p</pre>


Faites simplement enter lorsque le mot de passe vous sera demandé. Une fois au prompt <code>mysql></code>, vous pouvez définir le mot-de-passe root en tapant :
Je vous recommande d'entrer le mot-de-passe root que vous avez défini dans <code>/etc/mysql/debian.cnf</code> ou certains scripts risquent de ne plus fonctionner (anciennement, debian créait un utilisateur debian-sys-maint à cet usage, ce n'est désormais plus le cas)
 
Éventuellement, vous pouvez stocker le mot-de-passe root comme ceci dans <code>/root/.my.cnf</code> (veillez bien à ce que ce fichier ne soit lisible que par l'utilisateur unix root) :
<pre>
<pre>
UPDATE mysql.user SET Password = PASSWORD('motdepasse') WHERE User = 'root';
[client]
FLUSH PRIVILEGES;
user=root
password=
socket=/var/run/mysqld/mysqld.sock
</pre>
</pre>
Si vous souhaitez revenir à la configuration "passwordless" pour l'utilisateur root, tapez dans la console mysql :
<pre>use mysql; update user set plugin='unix_socket' where user='root'; flush privileges;</pre>


=Créer un utilisateur et lui attribuer les droits sur une base de donnée=
=Créer un utilisateur et lui attribuer les droits sur une base de donnée=
Ligne 58 : Ligne 80 :


Vous pourrez désormais utiliser cette base avec l'utilisateur plop.
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 :
<pre>/etc/init.d/mysql stop</pre>
Démarrez mysql de cette manière :
<pre>mysqld --skip-grant-tables --skip-networking & </pre>
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 :
<pre>mysql</pre>
Et tapez la requête sql suivante pour changer votre mot de passe root :
<pre>
UPDATE mysql.user SET Password = PASSWORD('motdepasse') WHERE User = 'root';
FLUSH PRIVILEGES;
</pre>
Délogez vous de la console mysql en tapant <code>quit;</code>. Vous pouvez maintenant relancer mysql normalement :
<pre>/etc/init.d/mysql restart</pre>


=Sauvegarder et restaurer une base de donnée MySQL=
=Sauvegarder et restaurer une base de donnée MySQL=
==Sauvegarde==
==Sauvegarde==


Pour sauvegarder une base entière :
Pour sauvegarder une base entière afin de la restaurer sur le même serveur mysql :
<pre>mysqldump -u root -p --opt nom_de_la_base > sauvegarde.sql</pre>
<pre>mysqldump -u root -p --opt nom_de_la_base > sauvegarde.sql</pre>
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):
<pre>mysqldump -u root -p --databases --opt nom_de_la_base > sauvegarde.sql</pre>


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==
Ligne 139 : Ligne 144 :


=Optimiser les réglages de MySQL=
=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.<pre>
MySQLTuner est un petit script perl qui vous proposera des optimisations pour votre configuration MySQL en fonction des statistiques de votre utilisation.
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
 
<pre>
wget http://mysqltuner.com/mysqltuner.pl  
chmod +x mysqltuner.pl  
chmod +x mysqltuner.pl  
./mysqltuner.pl  
./mysqltuner.pl  
</pre>
</pre>


Vous pouvez automatiser le login en créant un fichier <code>.my.cnf</code> dans votre home et contenant les informations de connexion :
Vous pouvez aussi essayer  https://launchpad.net/mysql-tuning-primer
<pre>
 
[client]
=Optimiser les tables=
user=username
pass=password
</pre>


Vous pouvez aussi essayer  https://launchpad.net/mysql-tuning-primer
<pre>mysqlcheck -o --all-databases</pre>


=Quelques commandes MySQL=
=Quelques commandes MySQL=
4 203

modifications

Menu de navigation