Base de données · 6 min read · Jan 31, 2026
Réplique MySQL sur la même machine
Ce guide explique la réplication dans MySQL sur la même machine.
Vous avez de gros succès, avec un site basé sur une base de données et la performance, la redondance, la sécurité viennent maintenant à l’esprit. Le DBA est maintenant impliqué par de nombreuses personnes pour chercher une bonne solution afin de rendre les visages heureux. Alors voici des mots comme Cluster, Réplication, Sauvegarde, Fail Over et d’autres. Alors, que sont-ils ? Nous discutons actuellement de la Réplication en termes de site basé sur une base de données pour de gros succès.
Ce qu’est la Réplication et pourquoi ?
La réplication permet au DBA de cloner la base de données du maître vers un autre serveur de base de données avec la même base de données. Cela inclut les identités maître et esclave. L’esclave se fait une copie exacte du serveur de base de données maître et/ou de ses bases de données. Il peut y avoir une relation un-à-un, un-à-plusieurs, plusieurs-à-un entre le(s) maître(s) et l(es) esclave(s). L’esclave lit continuellement le journal binaire au maître (le binlog stocke les requêtes écrites sur le serveur de base de données maître) et obtient des entrées pour son serveur de base de données esclave.
Ce que la Réplication n’est pas :
considérez la solution pour la sauvegarde, la performance, la sécurité et la redondance. Il existe d’autres techniques pour cela.
Nous voyons actuellement la Réplication du serveur MySQL sur la même machine, c’est-à-dire que le maître et l’esclave fonctionnent sur la même machine. Nous discuterons également de certains problèmes liés à la réplication.
Prérequis :
Serveur MySQL 4.1.12 ou supérieur au format source. Téléchargez-le depuis http://mysql.com au format source. Pour plus de facilité, téléchargez le client mysql depuis http://mysql.com ou mettez mysql dans la variable d’environnement. Sinon, mysql devra être appelé depuis les répertoires respectifs maître/esclave. Certaines distributions Linux. (J’ai utilisé Fedora Core 2). Supprimez les dépendances pour le serveur mysql.
Installation et Configuration de MySQL Master :
Téléchargez mysql-4.1.12 Source dans le dossier /misc
tar xzvf mysql-4.1.12.tar.gzcd /misc/mysql-4.1.12./configure --prefix=/usr/local/mysql-mastermakemake installcd /usr/local/mysql-master/bin./mysql_install_db(ce qui créera un dossier var)
cd ../varcp /misc/mysql-4.1.12/support-files/my-medium.cnf my.cnfcd ..groupadd mysqluseradd -g mysql mysqlchown -R root .chown -R mysql varchgrp -R mysql .[mysqld]
port = 3306
socket = /usr/local/mysql-master/mysql.sock
#skip-networking // nous avons sauté cela dans notre cas car nous faisons à la fois le maître et l'esclave sur la même machine.
# Serveur Maître de Réplication (par défaut)
# la journalisation binaire est requise pour la réplication
log-bin
# identifiant unique requis entre 1 et 2^32 - 1
# par défaut à 1 si master-host n'est pas défini
# mais ne fonctionnera pas en tant que maître si omis
server-id = 1
configurez d’autres paramètres selon vos besoins ou restez les mêmes, cela fonctionnera !! :)
Maintenant, démarrez le serveur mysql par :
cd /usr/local/mysql-master/bin./mysqld_safe --defaults-file=/usr/local/mysql-master/var/my.cnf &;MySQL Slave :
Maintenant, extrayez mysql-4.1.12.tar.gz dans un répertoire différent,
cd /opt/mysql-4.1.12./configure --prefix=/usr/local/mysql-slavemakemake installcd /usr/local/mysql-slavecd bin./mysql_install_db(ce qui créera un dossier var)
cd ../varcp /opt/mysql-4.1.12/support-files/my-medium.cnf my.cnfcd ..groupadd mysqluseradd -g mysql mysqlchown -R root .chown -R mysql varchgrp -R mysql .Éditez my.cnf dans le dossier var
[mysqld]
port = 3307
socket = /usr/local/mysql-slave/var/mysql.sock
#skip-networking
server-id = 2
# Le maître de réplication pour cet esclave - requis
master-host = localhost
master-user = slavedb
master-password = q1w2e3r4t5
master-port = 3306
Maintenant, démarrez le serveur mysql par :
cd /usr/local/mysql-slave/bin./mysqld_safe --defaults-file=/usr/local/mysql-slave/var/my.cnf &Configurer la Réplication :
connectez-vous au maître mysql par :
mysql --sock=/usr/local/mysql-master/mysql.sockCréer un compte au maître pour l’esclave :
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slavedb@"192.168.1.27/255.255.255.0" identified by 'q1w2e3r4t5'; Query OK, 0 rows affected (0.28 sec)connectez-vous à l’esclave mysql par :
mysql --sock=/usr/local/mysql-slave/mysql.sockmysql> slave start;Query OK, 0 rows affected, 1 warning (0.04 sec)
Test :
mysql connect au maître :
mysql> show master status\G;************************* 1. row ***********************
File: adam-bin.000001
Position: 227
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)
ERROR:
No query specified
connectez-vous à mysql à l’esclave
mysql> show slave status\G;*********************** 1. row ************************* Slave_IO_State: Connecting to master Master_Host: localhost Master_User: slavedb Master_Port: 3306 Connect_Retry: 60
Master_Log_File: adam-bin.000001
Read_Master_Log_Pos: 4
Relay_Log_File: adam-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: adam-bin.000001Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 4
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
ERROR:
No query specified
le fichier binlog au maître et sa position doivent être les mêmes dans l’esclave mysql par show slave status\G;
Si tout va bien, vous exécutez une copie fonctionnelle d’une relation maître-esclave un-à-un sur le même système.
Quelques Problèmes :
La réplication peut échouer en raison de plusieurs problèmes. Je partage certaines de mes expériences avec la réplication.
problème : la réplication échoue, le maître est tombé.
Le maître pourrait être tombé pour de nombreuses raisons. VÉRIFIEZ les LIMITES DE FICHIERS DANS LA BASE DE DONNÉES, LES REQUÊTES SQL ET L’UTILISATION DU DISQUE. Si l’une des raisons est affichée, corrigez cela, redémarrez mysqld et vérifiez l’état du maître :
mysql> show master status\G;* 1. row *
adam-bin.000003
Position: 227
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)
maintenant vérifiez l’esclave : par show slave status :
mysql> show slave status\G;* 1. row *
Slave_IO_State: Connecting to master
Master_Host: localhost
Master_User: slavedb
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: adam-bin.000001
Read_Master_Log_Pos: 4
Relay_Log_File: adam-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: adam-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 4
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
comme les valeurs ci-dessus montrent que le maître a incrémenté au 3ème binlog tandis que l’esclave est toujours pointé vers le binlog1. donc changez cette valeur en vous connectant à l’esclave mysql
mysql>; stop slave;mysql> change master to master_log_file='adam-bin.000003', master_log_pos=227;mysql> start slave;Maintenant vérifiez avec show slave status\G; cela fonctionne bien.
Problème 2 : Si une erreur de clé dupliquée apparaît chez les esclaves
c’est-à-dire
Chez l’esclave
Mysql> show slave status\G;* 1. row *
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.152
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: adam-bin.000048
Read_Master_Log_Pos: 317714810
Relay_Log_File: db4-relay-bin.000001
Relay_Log_Pos: 290512385
Relay_Master_Log_File: adam-bin.000048
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1062
Last_Error: Error ‘Duplicate entry ‘dekq5g820avnfdmar5qi9dkhv3’ for key 1’ on query. Default database:’session_sql’. Query: ‘INSERT INTO sessi ons5 VALUES (‘dekq5g820avnfdmar5qi9dkhv3’, UNIX_TIMESTAMP(NOW()) + 18000, ‘redir ect|i:1;’)’
Skip_Counter:0
Exec_Master_Log_Pos: 290512419
Relay_Log_Space: 317714776
Until_Condition: None
Until_Log_File:
Until_Log_Pos:0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
Cela signifie qu’en raison de l’indisponibilité du maître, l’esclave a été lu, ou en raison de l’indisponibilité de l’esclave, le maître a été mis à jour, donc une requête a trouvé deux clés primaires pour une entrée, ce qui est un désordre.
Donc, le corriger est :
Chez l’esclave :
Mysql> set global sql_slave_skip_counter=1;Mysql> start slave;Mysql> show slave status\G;Cela affichera la valeur synchronisée avec le maître. Corrigé.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.