Le processus de compilation à partir du code source permet une personnalisation poussée de MySQL. Les dépendances essentielles doivent être installées avant le démarrage.
dnf install cmake3 gcc git bison openssl-devel ncurses-devel systemd-devel rpcgen.x86_64 libtirpc-devel-1.3.3-9.el9.x86_64.rpm \
gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc -y
Extraire l'archive et configurer la build :
tar zxf mysql-boost-8.3.0.tar.gz
cd mysql-8.3.0/
mkdir build && cd build
cmake3 .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_BOOST=bundled \
-DWITH_SSL=system \
-DWITH_DEBUG=OFF
Déploiement et configuraton initiale
Après compilation, installer le binaire et préparer l'environnement :
make install
useradd -r -s /sbin/nologin -M mysql
mkdir -p /data/mysql/
chown mysql:mysql /data/mysql/
Configurer les variables d’environnement :
export PATH=$PATH:/usr/local/mysql/bin
source ~/.bash_profile
Initialisation des données
Créer les fichiers système et les bases de données :
mysqld --initialize --user=mysql
L’outil affiche un mot de passe temporaire pour l’utilisateur root. Ce mot de passe doit être changé immédiatement.
Démarrage du service
Utiliser un script de gestion système pour contrôler le service :
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --level 35 mysqld on
/etc/init.d/mysqld start
Sécurisation post-installation
Exécuter l’outil sécurisé pour renforcer la configuration par défaut :
mysql_secure_installation
Choisir de désactiver les utilisateurs anonymes, bloquer l’accès distant pour root et supprimer la base test.
Clonage d’un nœud MySQL
Replication de la configuration entre plusieurs serveurs via SCP :
scp -rp /usr/local/mysql/ root@192.168.186.20:/usr/local
Chaque nœud doit avoir un identifiant unique dans /etc/my.cnf :
server-id = 20
Configuration maître-esclave avec GTID
Activer les journaux binaires et définir le mode GTID :
log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
Créer un utilisateur dédié au réplication :
CREATE USER 'replicator'@'%' IDENTIFIED BY 'securepass';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
Configuration de la réplication
Sur le nœud esclave, configurer la connexion vers le maître :
CHANGE MASTER TO
MASTER_HOST='192.168.186.10',
MASTER_USER='replicator',
MASTER_PASSWORD='securepass',
MASTER_AUTO_POSITION=1;
START SLAVE;
Optimisations avancées
- Réplication multithreadée : Activer sur le slave via
slave-parallel-workers=16. - Réplication semi-synchrone : Installer les plugins
semisync_master.soetsemisync_slave.so. - Retard de synchronisation : Utiliser
CHANGE REPLICATION SOURCE TO SOURCE_DELAY=60;pour créer un délai de 60 secondes. - Journaux de requêtes lentes : Activer via
slow_query_log=ONet ajusterlong_query_time.
Haute disponibilité avec MHA
Installer les composants MHA sur le manager et chaque nœud MySQL. Configurer le fichier principal :
[server default]
user=root
password=secret
ssh_user=root
repl_user=replicator
repl_password=securepass
master_binlog_dir=/data/mysql
manager_workdir=/etc/masterha
manager_log=/etc/masterha/mha.log
[server1]
hostname=192.168.186.10
candidate_master=1
check_repl_delay=0
[server2]
hostname=192.168.186.20
candidate_master=1
check_repl_delay=0
[server3]
hostname=192.168.186.30
no_master=1
Switch automatique et gestion du VIP
Activer le script de basculement IP via master_ip_failover_script. Définir un IP virtuel partagé (VIP) pour la haute disponibilité.
my $vip = '192.168.186.100/24';
Cluster de groupe (Group Replication)
Configurer le cluster sur trois nœuds avec un mode multi-primaire :
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_local_address="192.168.186.10:33061"
group_replication_group_seeds="192.168.186.10:33061,192.168.186.20:33061,192.168.186.30:33061"
group_replication_single_primary_mode=OFF
Initialiser le premier nœud avec SET GLOBAL group_replication_bootstrap_group=ON;, puis activer le groupe.
MySQL Router pour équilibrage de charge
Installer et configurer MySQL Router pour distribuer les requêtes :
[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 192.168.186.10:3306,192.168.186.20:3306,192.168.186.30:3306
routing_strategy = round-robin
[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 192.168.186.10:3306,192.168.186.20:3306,192.168.186.30:3306
routing_strategy = first-available
Les clients se connectent via les ports 7001 (lecture) ou 7002 (écriture).