Voici un **guide complet pour installer MySQL sur un serveur Red Hat (RHEL, CentOS, AlmaLinux ou Rocky Linux)** et créer **deux instances MySQL distinctes** sur le même serveur.
---
## 🛠️ Objectif
- Installer **MySQL Server**
- Créer **deux instances MySQL indépendantes**
Instance 1 : port `3306`
Instance 2 : port `3307`
- Chaque instance aura :
Son propre répertoire de données
Sa propre configuration
Son propre service systemd
---
## 🔧 Étape 1 : Installer MySQL Server
### 1. Ajouter le dépôt MySQL officiel
```bash
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-7.noarch.rpm
```
\> Remplacer `el9` par votre version RHEL (`el7`, `el8`, etc.)
### 2. Installer MySQL Server
```bash
sudo dnf install mysql-server
```
---
## ⚙️ Étape 2 : Démarrer et activer l'instance par défaut
```bash
sudo systemctl enable mysqld
sudo systemctl start mysqld
```
### Récupérer le mot de passe temporaire root
```bash
sudo grep 'temporary password' /var/log/mysqld.log
```
Sécuriser l’installation :
```bash
sudo mysql_secure_installation
```
---
## 📁 Étape 3 : Préparer la deuxième instance
### 1. Créer un nouveau répertoire de données
```bash
sudo mkdir /var/lib/mysql2
sudo chown -R mysql:mysql /var/lib/mysql2
```
### 2. Initialiser la base de données pour la seconde instance
```bash
sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql2
```
\> ✅ Sauvegarder le mot de passe généré affiché dans les logs :
```bash
sudo cat /var/log/mysqld.log | grep "A temporary password"
```
---
## 📄 Étape 4 : Créer un fichier de configuration personnalisé pour la seconde instance
```bash
sudo nano /etc/my-2.cnf
```
Collez-y cette configuration :
```ini
[client]
port = 3307
socket = /var/lib/mysql2/mysql.sock
[mysqld]
port = 3307
socket = /var/lib/mysql2/mysql.sock
datadir = /var/lib/mysql2
pid-file = /var/lib/mysql2/mysqld.pid
server-id = 2
log-error = /var/log/mysqld2.log
```
Enregistrer et fermer.
### Créer le fichier log
```bash
sudo touch /var/log/mysqld2.log
sudo chown mysql:mysql /var/log/mysqld2.log
```
---
## 🔄 Étape 5 : Créer un service systemd pour la seconde instance
```bash
sudo nano /etc/systemd/system/mysqld2.service
```
Collez ce contenu :
```ini
[Unit]
Description=MySQL Second Instance
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/bin/mysqld --defaults-file=/etc/my-2.cnf --basedir=/usr --plugin-dir=/usr/lib64/mysql/plugin
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=always
PrivateTmp=false
[Install]
WantedBy=multi-user.target
```
Recharger systemd :
```bash
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
```
Activer et démarrer le service :
```bash
sudo systemctl enable mysqld2
sudo systemctl start mysqld2
```
Vérifier le statut :
```bash
sudo systemctl status mysqld2
```
---
## 🔐 Étape 6 : Sécuriser la seconde instance
Connectez-vous à la seconde instance avec le mot de passe temporaire :
```bash
mysql -u root -p -h 127.0.0.1 -P 3307
```
Exécutez ces commandes SQL pour changer le mot de passe :
```sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NouveauMotDePasse';
FLUSH PRIVILEGES;
exit
```
---
## 🧪 Étape 7 : Tester les deux instances
### Vérifier les ports utilisés :
```bash
ss -tuln | grep -E '3306|3307'
```
### Se connecter à chaque instance :
Instance 1 :
```bash
mysql -u root -p
```
Instance 2 :
```bash
mysql -u root -p -h 127.0.0.1 -P 3307
```
---
## 📌 Résumé des deux instances
| Instance | Port | Fichier Config | Données | Service Systemd | PID File | Log File |
|---------|------|--------------------|----------------|------------------|------------------------|--------------------|
| Default | 3306 | `/etc/my.cnf` | `/var/lib/mysql` | `mysqld` | `/var/run/mysqld/mysqld.pid` | `/var/log/mysqld.log` |
| Second | 3307 | `/etc/my-2.cnf` | `/var/lib/mysql2`| `mysqld2` | `/var/lib/mysql2/mysqld.pid` | `/var/log/mysqld2.log` |
---
## ✅ Vous avez terminé !
Vous avez maintenant **deux instances MySQL indépendantes** fonctionnant sur le même serveur Red Hat.
Chaque instance peut être gérée séparément via ses propres commandes :
```bash
sudo systemctl start/stop/restart mysqld
sudo systemctl start/stop/restart mysqld2
```
---
## ❓ Besoin d’un script Bash pour automatiser cette installation ?
Je peux vous fournir un **script Bash** qui fait tout cela automatiquement.
Souhaitez-vous que je vous le fournisse ?