Extension configurations MySql

De EjnTricks

Dans le cadre de cette installation sur un serveur Ubuntu, des paramétrages spécifiques doivent être mis en place. Cet article présente les fichiers pouvant être modifiés mais également une mise en place à l'aide d'extension, permettant de ne pas toujours les fichiers des paquets. Le fait de ne pas y toucher permet de simplifier les mises à jour des paquets et est donc recommandée.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

La configuration MySql est mise en place dans le fichier /etc/mysql/my.cnf. Les modification peuvent être apportées directement dedans, mais comme indiqué dans l'introduction, lors de la mise à jour du paquet Ubuntu, il faudra analyser les différences et éventuelles les reproduire.

Or, le contenu du fichier est le suivant.

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

!includedir /etc/mysql/conf.d/

Ainsi, tous les fichiers ayant l'extension cnf du répertoire /etc/mysql/conf.d/ sont pris en compte. Le contenu du répertoire est le suivant.

#sudo ll /etc/mysql/conf.d
total 12
drwxr-xr-x 2 root root 4096 Dec 30 23:49 ./
drwxr-xr-x 3 root root 4096 Dec 30 23:47 ../
-rw-r--r-- 1 root root   21 Nov 10  2010 mysqld_safe_syslog.cnf

Attention, cette configuration est assez ancienne et a évolué. Pour une instance Ubuntu 16.04, et au moins la 15.10, l'organisation des fichiers a été modifiée et explicité dans le paragraphe mise à jour paquet MySql.


Icon-Configuration-Settings.png Configuration

Icon Personnalisation.png Par fichier

Il est donc possible de créer un fichier /etc/mysql/conf.d/mysqld_custom.cnf avec les paramètres spécifiques. Ce fichier est créé par un simple touch et les permissions mise en place reproduisent celles déjà existante.

#sudo touch /etc/mysql/conf.d/mysqld_custom.cnf
#sudo chmod 644 /etc/mysql/conf.d/mysqld_custom.cnf

Dans le cas de la connexion depuis une machine distante, le contenu du fichier pourrait être le suivant.

[mysqld]
bind-address = 0.0.0.0

Multiples-icon.png Par lien

Cependant, la mise en place du fichier nécessite de le stocker dans l'emplacement de la distribution. Il peut être plus lisible, et c'est ce qui est mis en place, de le mettre dans un répertoire spécifique et de créer le lien /etc/mysql/conf.d/mysqld_custom.cnf sur ce dernier.

Dans le cadre de cet article, le fichier est donc créé sous /var/opt/mysql/mysqld_custom.cnf.

#sudo mkdir /var/opt/mysql
#sudo chmod 755 /var/opt/mysql
#sudo touch /var/opt/mysql/mysqld_custom.cnf
#sudo chmod 644 /var/opt/mysql/mysqld_custom.cnf

Enfin, le lien est créé.

#sudo ln -s /var/opt/mysql/mysqld_custom.cnf /etc/mysql/conf.d/mysqld_custom.cnf
#sudo chmod 644 /etc/mysql/conf.d/mysqld_custom.cnf


Lock-off-icon.png Sécurité

Il se trouve que la distribution Ubuntu installe l'application AppArmor, permettant de restreindre les accès aux fichiers pour les services / applications sur la machine. Dans le cadre de MySql, la configuration de AppArmor se trouve dans le fichier /etc/apparmor.d/usr.sbin.mysqld dont le contenu est le suivant.

# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/user-tmp>
  #include <abstractions/mysql>
  #include <abstractions/winbind>

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,

  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.sbin.mysqld>
}

Donc les restrictions mises en place ne permettent pas à l'application /usr/sbin/mysqld d'accéder au fichier /var/opt/mysql/mysqld_custom.cnf. Par conséquent, les personnalisations mises en place ne seront pas prises en compte.

Mais comme souvent, un point d'entrée a été mise en place afin d'étendre la configuration, à travers l'instruction #include <local/usr.sbin.mysqld>. Attention, le caractère # devant l'instruction include n'est pas utilisé pour démarrer un commentaire. Il ne faut pas le supprimer.

Le fichier /etc/apparmor.d/local/usr.sbin.mysqld est donc modifié pour rajouter un droit d'accès en lecture, ce qui est suffisant pour le charger, au nouveau fichier.

# Site-specific additions and overrides for usr.sbin.mysqld.
# For more details, please see /etc/apparmor.d/local/README.

  /var/opt/mysql/mysqld_custom.cnf r,

Afin que cela soit pris en compte, il faut recharger le service AppArmor.

#sudo service apparmor restart
 * Reloading AppArmor profiles      Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd      [ OK ]


Update icon.png Mise à jour paquet MySql

Suite à des mises à jour des paquets Ubuntu, certaines configurations n'étaient plus prises en compte. C'était le cas pour la configuration permettant l'accès à distance. En effet, le fichier personnalisé étend la propriété bind-address qui est également définie dans les fichiers fournis par le paquet. Les informations dans la log de MySql, à l'emplacement /var/log/mysql/error.log dans le cadre de cet article informent que le paramétrage n'était plus pris en compte.

131230 14:57:51 InnoDB: 5.5.34 started; log sequence number 13384852002
131230 14:57:51 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
131230 14:57:51 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
131230 14:57:51 [Note] Server socket created on IP: '127.0.0.1'.

L'étude des fichiers de configurations, sur une machine Ubuntu 16.04 avec un version 5.7 de MySql, permet de comprendre la modification qui a entraîné ce disfonctionnement.

Les configurations se trouvent toujours dans le répertoire /etc/mysql dont le contenu est le suivant.

#sudo ll /etc/mysql
total 36
drwxr-xr-x   4 root root  4096 avril 27 23:32 ./
drwxr-xr-x 148 root root 12288 avril 26 23:40 ../
drwxr-xr-x   2 root root  4096 avril 27 23:21 conf.d/
-rw-------   1 root root   317 avril 26 22:22 debian.cnf
-rwxr-xr-x   1 root root  1193 avril 20  2015 debian-start*
lrwxrwxrwx   1 root root    24 mai    5  2015 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r--   1 root root   682 févr. 11  2015 mysql.cnf
drwxr-xr-x   2 root root  4096 avril 27 23:23 mysql.conf.d/

On peut déjà constaté que le nouveau répertoire mysql.conf.d a été introduit.

Le fichier my.cnf est donc un lien pointant un autre fichier géré à l'aide de l'outil Alternatives, utilise pour mettre en place facilement une gestion de version des produits.

Pour comprendre le lien, l'outil update-alternatives peut être utilisé afin de consulter la configuration du lien.

#sudo update-alternatives --display my.cnf
my.cnf - mode automatique
  le meilleur lien est /etc/mysql/mysql.cnf
 le lien pointe actuellement sur /etc/mysql/mysql.cnf
  le lien my.cnf est /etc/mysql/my.cnf
/etc/mysql/my.cnf.fallback - priorité 100
/etc/mysql/mysql.cnf - priorité 200

L'option --display avec le nom du lien, soit my.cnf, liste l'ensemble des informations. Le résultat indique donc que le lien Alternatives pointe sur le fichier /etc/mysql/mysql.cnf.

Ce lien aurait également pu être constaté en listant le contenu du répertoire /etc/alternatives.

#ll /etc/alternatives/ | grep my.cnf
lrwxrwxrwx   1 root root    20 avril 24 12:59 my.cnf -> /etc/mysql/mysql.cnf


Il faut donc regarder le contenu du fichier /etc/mysql/mysql.cnf

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/


Donc les configurations dans les deux répertoires /etc/mysql/conf.d/ et /etc/mysql/mysql.conf.d/ sont incluses.

#sudo ll /etc/mysql/conf.d/
total 16
drwxr-xr-x 2 root root 4096 avril 26 22:21 ./
drwxr-xr-x 4 root root 4096 avril 26 23:59 ../
-rw-r--r-- 1 root root    8 févr. 11  2015 mysql.cnf
lrwxrwxrwx 1 root root   32 déc.  31  2013 mysqld_custom.cnf -> /var/opt/mysql/mysqld_custom.cnf
-rw-r--r-- 1 root root   55 févr. 11  2015 mysqldump.cnf

#sudo ll /etc/mysql/mysql.conf.d/
total 16
drwxr-xr-x 2 root root 4096 avril 26 22:22 ./
drwxr-xr-x 4 root root 4096 avril 26 23:59 ../
-rw-r--r-- 1 root root 3028 avril 13 18:42 mysqld.cnf
-rw-r--r-- 1 root root   21 févr. 11  2015 mysqld_safe_syslog.cnf

Le lien /etc/mysql/conf.d/mysqld_custom.cnf est le résultat de la première mise en place des personnalisations, décrit dans le premier paragraphe.

Or, il se trouve que la grande partie des configurations standard sont mises en place dans le fichier /etc/mysql/mysql.conf.d/mysqld.cnf. Or, celui-ci est chargé après celui contenant les paramètres spécifiques.

Il suffit donc de déplacer le lien pour le placer dans le répertoire /etc/mysql/mysql.conf.d.

#sudo ln -s /var/opt/mysql/mysqld_custom.cnf /etc/mysql/mysql.conf.d/mysqld_custom.cnf
#sudo chmod 644 /etc/mysql/mysql.conf.d/mysqld_custom.cnf
#sudo rm /etc/mysql/conf.d/mysqld_custom.cnf