Prérequis
- Un serveur Ubuntu/Debian ou AlmaLinux 9/Rocky Linux 9
- Accès root ou sudo
MySQL et MariaDB sont les systèmes de bases de données relationnelles les plus populaires. MariaDB est un fork open source de MySQL, totalement compatible. Ce guide couvre les deux.
Option 1 : Installer MariaDB (recommandé)
apt update
apt install -y mariadb-server mariadb-client
# Vérifier
systemctl status mariadb
mariadb --versiondnf install -y mariadb-server mariadb
# Activer et démarrer
systemctl enable mariadb
systemctl start mariadb
# Vérifier
systemctl status mariadb
mariadb --versionOption 2 : Installer MySQL
apt update
apt install -y mysql-server mysql-client
# Vérifier
systemctl status mysql
mysql --versiondnf install -y mysql-server
# Activer et démarrer
systemctl enable mysqld
systemctl start mysqld
# Vérifier
systemctl status mysqld
mysql --version1. Sécuriser l'installation
# Lancer le script de sécurisation
mysql_secure_installation
# Répondez aux questions :
# - Set root password: Y (définir un mot de passe fort)
# - Remove anonymous users: Y
# - Disallow root login remotely: Y
# - Remove test database: Y
# - Reload privilege tables: Y2. Se connecter à MySQL/MariaDB
# En tant que root (avec sudo)
sudo mysql
# Ou avec mot de passe
mysql -u root -p3. Créer une base de données et un utilisateur
-- Créer une base de données
CREATE DATABASE ma_base CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Créer un utilisateur
CREATE USER 'mon_user'@'localhost' IDENTIFIED BY 'mot_de_passe_securise';
-- Donner les droits sur la base
GRANT ALL PRIVILEGES ON ma_base.* TO 'mon_user'@'localhost';
-- Appliquer les changements
FLUSH PRIVILEGES;
-- Vérifier
SHOW DATABASES;
SELECT user, host FROM mysql.user;4. Autoriser les connexions distantes (optionnel)
# Éditer la configuration
nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Ou pour MySQL :
# nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Changer bind-address de 127.0.0.1 à 0.0.0.0
bind-address = 0.0.0.0
# Redémarrer
systemctl restart mariadb # ou mysqlFichier de configuration sur AlmaLinux/Rocky Linux
Sur AlmaLinux/Rocky Linux, le fichier de configuration MariaDB se trouve dans /etc/my.cnf.d/mariadb-server.cnf. Pour MySQL, utilisez /etc/my.cnf.
-- Créer un utilisateur accessible depuis n'importe où
CREATE USER 'mon_user'@'%' IDENTIFIED BY 'mot_de_passe_securise';
GRANT ALL PRIVILEGES ON ma_base.* TO 'mon_user'@'%';
FLUSH PRIVILEGES;
-- Ou depuis une IP spécifique
CREATE USER 'mon_user'@'192.168.1.100' IDENTIFIED BY 'mot_de_passe';
GRANT ALL PRIVILEGES ON ma_base.* TO 'mon_user'@'192.168.1.100';
FLUSH PRIVILEGES;Sécurité
N'autorisez les connexions distantes que si nécessaire. Utilisez un pare-feu pour limiter les IP autorisées sur le port 3306.
5. Ouvrir le port dans le pare-feu
# Autoriser depuis une IP spécifique (recommandé)
ufw allow from 192.168.1.100 to any port 3306
# Ou autoriser tout le monde (dangereux)
# ufw allow 3306/tcp# Autoriser depuis une IP spécifique (recommandé)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'
firewall-cmd --reload
# Ou autoriser tout le monde (dangereux)
# firewall-cmd --permanent --add-port=3306/tcp
# firewall-cmd --reload6. Importer/Exporter des bases
# Exporter une base de données
mysqldump -u root -p ma_base > ma_base_backup.sql
# Exporter toutes les bases
mysqldump -u root -p --all-databases > all_databases.sql
# Exporter avec compression
mysqldump -u root -p ma_base | gzip > ma_base_backup.sql.gz
# Importer une base
mysql -u root -p ma_base < ma_base_backup.sql
# Importer depuis un fichier compressé
gunzip < ma_base_backup.sql.gz | mysql -u root -p ma_base7. Commandes SQL utiles
-- Lister les bases
SHOW DATABASES;
-- Utiliser une base
USE ma_base;
-- Lister les tables
SHOW TABLES;
-- Structure d'une table
DESCRIBE ma_table;
-- Supprimer une base
DROP DATABASE ma_base;
-- Supprimer un utilisateur
DROP USER 'mon_user'@'localhost';
-- Voir les processus en cours
SHOW PROCESSLIST;
-- Taille des bases
SELECT table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
GROUP BY table_schema;8. Configuration de performance
# Éditer la configuration
nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Ajouter dans [mysqld] :
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 150
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M
# Redémarrer
systemctl restart mariadbConfiguration sur AlmaLinux/Rocky Linux
Sur AlmaLinux/Rocky Linux, éditez /etc/my.cnf.d/mariadb-server.cnf (MariaDB) ou /etc/my.cnf (MySQL) pour les mêmes paramètres de performance.
9. Script de sauvegarde automatique
cat > /opt/mysql_backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y-%m-%d)
KEEP_DAYS=7
mkdir -p $BACKUP_DIR
# Backup de toutes les bases
mysqldump -u root --all-databases | gzip > $BACKUP_DIR/all-databases-$DATE.sql.gz
# Supprimer les vieux backups
find $BACKUP_DIR -type f -mtime +$KEEP_DAYS -delete
echo "Backup completed: $BACKUP_DIR/all-databases-$DATE.sql.gz"
EOF
chmod +x /opt/mysql_backup.sh
# Ajouter au cron (tous les jours à 3h)
(crontab -l 2>/dev/null; echo "0 3 * * * /opt/mysql_backup.sh") | crontab -MySQL/MariaDB installé !
Votre serveur de base de données est prêt. Vous pouvez maintenant l'utiliser avec vos applications PHP, Node.js, Python, etc.