4 242
modifications
(46 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:serveur]] | |||
[[Category:debian]] | |||
=Installation et configuration= | |||
Pour installer le serveur mariadb, tapez : | |||
<pre>aptitude install mariadb-server mariadb-client</pre> | |||
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> | |||
==Changement du datadir== | |||
Stoppez le serveur : | |||
<pre> | <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 11 : | 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> | ||
rsync -av /var/lib/mysql/ /srv/mysql/ | |||
</pre> | </pre> | ||
Ligne 21 : | Ligne 30 : | ||
</pre> | </pre> | ||
Si mysql refuse de démarrer, c'est probablement un problème de permission. | Si mysql refuse de démarrer, c'est probablement un problème de permission. | ||
=Servir des requêtes sur le réseau= | |||
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 = | <pre>bind-address = 192.168.50.5</pre> | ||
=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, | 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>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> | <pre> | ||
mysql -u root | |||
use mysql; | |||
update user set plugin='' where user='root'; | |||
flush privileges; | |||
</pre> | </pre> | ||
Désormais pour vous connecter à mysl vous devrez entrer un mot-de-passe : | |||
<pre>mysql -u root -p</pre> | |||
Je vous recommande également d'entrer le mot-de-passe root que vous avez défini dans <code>/etc/mysql/debian.cnf</code> sinon certains scripts risquent de ne plus fonctionner. Anciennement, debian créait un utilisateur debian-sys-maint à cet usage, ce n'est plus le cas depuis debian 9 qui configuré désormais l'utilisateur root à cet usage dans <code>/etc/mysql/debian.cnf</code> et parfois dans <code>/etc/dbconfig-common/*</code> | |||
<pre>/ | |||
É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> | |||
[client] | |||
user=root | |||
password= | |||
socket=/var/run/mysqld/mysqld.sock | |||
</pre> | |||
Si vous souhaitez revenir à la configuration "passwordless" pour l'utilisateur root, tapez dans la console mysql : | |||
<pre> | <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= | |||
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 <code>plouf</code> : | |||
<pre> | <pre> | ||
mysql -u root -p | |||
mysql> create database plouf; | |||
GRANT ALL PRIVILEGES ON plouf.* TO "plop"@"localhost" IDENTIFIED BY 'password'; | |||
</pre> | </pre> | ||
Vous pourrez désormais utiliser cette base avec l'utilisateur plop. | |||
=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 85 : | Ligne 106 : | ||
Commençons par installer phpmyadmin : | Commençons par installer phpmyadmin : | ||
<pre>aptitude install phpmyadmin</pre> | <pre>aptitude install phpmyadmin</pre> | ||
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 | |||
<pre>a2disconf phpmyadmin</pre> | |||
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 <code>/usr/share/phpmyadmin/</code> | Par défaut, phpmyadmin s'installe dans <code>/usr/share/phpmyadmin/</code> | ||
Ligne 90 : | Ligne 119 : | ||
<pre>Include /etc/phpmyadmin/apache.conf</pre> | <pre>Include /etc/phpmyadmin/apache.conf</pre> | ||
Si vous avez sécurisé votre installation php avec <code>open_basedir</code> il faut préciser les arguments suivants pour <code>php_admin_value open_basedir</code> dans la configuration de la vhost (<code>/etc/apache2/sites/admin. | Si vous avez sécurisé votre installation php avec <code>open_basedir</code> il faut préciser les arguments suivants pour <code>php_admin_value open_basedir</code> dans la configuration de la vhost (<code>/etc/apache2/sites/admin.domain.tld.conf</code> dans mon cas) : | ||
<pre>php_admin_value open_basedir /srv/http/ | <pre>php_admin_value open_basedir /srv/http/domain.tld/admin.domain.tld/:/usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/</pre> | ||
Et enfin, si vous utilisez à la fois les modules php et suphp de apache, activez php pour phpmyadmin en ajoutant les lignes suivantes dans <code>/etc/apache2/mods-enabled/php5.conf : | |||
<pre> | |||
<Directory /usr/share/phpmyadmin> | |||
php_flag engine on | |||
</Directory> | |||
</pre> | |||
Désormais, vous pouvez accéder à phpmyadmin par l'url correspondant au site pour lequel vous avez créé le lien. Dans mon cas : | Désormais, vous pouvez accéder à phpmyadmin par l'url correspondant au site pour lequel vous avez créé le lien. Dans mon cas : | ||
<pre>http://admin. | <pre>http://admin.domain.tld/phpmyadmin/</pre> | ||
Pour plus de sécurité, vous pouvez placer un fichier <code>.htaccess</code> dans <code>/usr/share/phpmyadmin/</code> afin de bloquer l'accès à phpmyadmin aux utilisateurs ne s'étant pas logué sur <code>http://admin.domain.tld/</code> : | |||
<pre> | |||
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 | |||
</pre> | |||
=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> | |||
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl | |||
chmod +x mysqltuner.pl | |||
./mysqltuner.pl | |||
</pre> | |||
Vous pouvez aussi essayer https://launchpad.net/mysql-tuning-primer | |||
=Optimiser les tables= | |||
<pre>mysqlcheck -o --all-databases</pre> | |||
=Quelques commandes MySQL= | =Quelques commandes MySQL= | ||
Ligne 114 : | Ligne 167 : | ||
Donner la liste des tables de la base de donnée active : | Donner la liste des tables de la base de donnée active : | ||
<pre>mysql> SHOW | <pre>mysql> SHOW TABLES;</pre> | ||
Renvoyer tous les champs de la table "table" : | Renvoyer tous les champs de la table "table" : |