Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / MySQL / Installer et configurer MySQL sur Debian

Installer et configurer MySQL sur Debian

Par Pierre-Yves Landuré Dernière modification 11/11/2017 09:37

MySQL est un système de gestion de bases de données léger. Il est particulièrement adapté à la gestion de bases de données simples stockant un nombre important d'enregistrements. C'est le système de gestion de bases de données privilégié des sites Internet.

Ce guide est testé sur:

  • Debian 6.0 Squeeze
  • Debian 7.0 Wheezy
  • Ubuntu 10.04 Lucid Lynx
  • Ubuntu 10.10 Natty Narwal
  • Ubuntu 16.04 Xenial Xerus

Installation

Détectez le proxy de commande (command ou sudo):

cmdProxy='command'
command type -f 'sudo' &>'/dev/null' && cmdProxy='sudo'

Préparation de l'environnement

Installez les logiciels:

serverDeb='mysql-server'
[ -n "$(command apt-cache pkgnames 'mariadb-server')" ] && serverDeb='mariadb-server'
DEBIAN_FRONTEND='noninteractive' ${cmdProxy} apt-get install "${serverDeb}" 'apg'

Configuration

Générez le mot de passe du compte "root" de MySQL:

mysqlPassword="$(command apg -q -a 0 -n 1 -M NCL)"

Affichez le mot de passe obtenu, et conservez le précieusement:

command echo "The password for MySQL root account is: '${mysqlPassword}'."

Sécurisez l'installation de MySQL (mettez en place le mot de passe root):

${cmdProxy} mysql_secure_installation

Assurez-vous que l'utilisateur root soit accessible via PHPMyAdmin:

${cmdProxy} mysql <<< "
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '${mysqlPassword}';
GRANT ALL PRIVILEGES on *.* to 'root'@'127.0.0.1' IDENTIFIED BY '${mysqlPassword}';
FLUSH PRIVILEGES;"

Stockez les paramètres d'accès au compte root dans le fichier .my.cnf de votre compte (facilite l'administration):

if [ ! -e "${HOME}/.my.cnf" ]; then
  echo "[client]
user=root
password=${mysqlPassword}" \
| ${cmdProxy} tee '/root/.my.cnf' \
    > "${HOME}/.my.cnf"
${cmdProxy} chmod 400 '/root/.my.cnf' "${HOME}/.my.cnf"
fi

Activez la restauration point-in-time et le journal des requêtes lentes (et autre améliorations):

${cmdProxy} wget 'https://raw.github.com/biapy/howto.biapy.com/master/mysql/base-optimisations.cnf' \
--quiet --no-check-certificate --output-document='/etc/mysql/conf.d/base-optimisations.cnf'

Redémarrez le serveur MySQL:

${cmdProxy} service mysql restart

Le serveur MySQL est prêt.

Séparation des tables InnoDB par fichier

Par défaut, les tables InnoDB sont créées dans un seul et même ficher / espace de table ( /var/lib/mysql/ibdata1 ). Ce fichier peut avec le temps prendre d'importantes proportions. Si vous comptez effectuer beaucoup de manipulations de tables , création ou suppressions de ligne / tables / bases de données, il est préférable de séparer les tables InnoDB dans des fichiers dédié pour limiter la consommation d'espace disque:

${cmdProxy} tee '/etc/mysql/conf.d/innodb-file-per-table.cnf' \
<<< "# Use one file by InnoDB table.
# Use Barracuda as InnoDB engine.
# Allow InnoDB large indexs.
# Use Dynamic row format.
# Reduce disk usage, ease disk space reclaiming.
[mysqld]
innodb_file_per_table = 1
innodb_file_format=Barracuda
innodb_large_prefix=1
; Option below only for MariaDB 10.2
;innodb_default_row_format=
DYNAMIC"

Rechargez la configuration:

${cmdProxy} service mysql restart

Rendre MySQL accessible depuis le réseau

ATTENTION: Cette manipulation peut générer une faille de sécurité. Ne la mettez en place que si vous devez disposer d'un accès à une base MySQL présente sur votre serveur depuis un autre ordinateur du réseau.

Pour rendre votre serveur MySQL accessible depuis d'autre ordinateurs que le hôte local, modifiez l'adresse IP d'écoute du serveur MySQL:

${cmdProxy} sed -i -e 's/^bind-address.*/#\0/' '/etc/mysql/my.cnf'
[ -e '/etc/mysql/mariadb.conf.d/50-server.cnf' ] && ${cmdProxy} sed -i -e 's/^bind-address.*/#\0/' '/etc/mysql/mariadb.conf.d/50-server.cnf'

Dans le cas où les clients du serveur MySQL ne sont pas sur l'hôte local, activer la compression de la connexion peut améliorer les performances et réduire la charge réseau:

echo "# Enable connection compression for clients.
# Reduce network load and enhance response time for remote clients.
[client]
compress" \
| ${cmdProxy} tee '/etc/mysql/conf.d/client-compression.cnf'

Rechargez la configuration:

${cmdProxy} service mysql restart

Finalisation

Ce  guide recommande:

Sauvegardes

Sauvegardez l'installation avec Backup Manager (voir Installer et configurer Backup Manager sur Debian).

Créez un utilisateur "backup" avec droits nécessaires pour utiliser la commande mysqldump:

mysqlBackupPwd=$(command apg -q -a  0 -n 1 -M NCL)
echo "GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.*
        TO backup@localhost
        IDENTIFIED BY '${mysqlBackupPwd}';" \
    | command mysql --user=root

Configurez Backup Manager pour sauvegarder nos bases de données MySQL en utilisant l'utilisateur "backup":

${cmdProxy} sed -i -e "s|[#]*\(.*BM_MYSQL_ADMINLOGIN=\).*$|\1\"backup\"|" \
            -e "s|[#]*\(.*BM_MYSQL_ADMINPASS=\).*$|\1\"${mysqlBackupPwd}\"|" \
         "/etc/backup-manager.conf"

Créez un fichier de configuration du client MySQL pour Backup Manager:

echo "[client]
user=backup
password=${mysqlBackupPwd}" | ${cmdProxy} tee '/root/.backup-manager_my.cnf'
${cmdProxy} chmod go-rw '/root/.backup-manager_my.cnf'

Activez la sauvegarde des bases de données MySQL dans Backup Manager:

${cmdProxy} sed -i -e 's/[#]*\(.*BM_ARCHIVE_METHOD=.*".*\)"$/\1 mysql"/' \
         "/etc/backup-manager.conf"

Backup Manager génère des sauvegardes vides si le fichier /root/.my.cnf contient un mot de passe. Ce qui suit corrige ce bug:

${cmdProxy} dpkg-divert --divert '/usr/share/backup-manager/backup-methods.sh.orig' \
 --rename '/usr/share/backup-manager/backup-methods.sh'
${cmdProxy} cp -a '/usr/share/backup-manager/backup-methods.sh.orig' '/usr/share/backup-manager/backup-methods.sh'
${cmdProxy} sed -i -e 's/--defaults-extra-file/--defaults-file/g' '/usr/share/backup-manager/backup-methods.sh'

Remarque: Si les sauvegardes de Backup Manager sont vides, effacez le fichier de configuration MySQL généré par l'outil:

# ${cmdProxy} rm '/root/.backup-manager_my.cnf'

Références

Ces livres peuvent vous aider:

Remerciements

Enregistrer

Enregistrer