Introduction
La synchronisation maître-esclave MySQL est une architecture de base de données largement utilisée à l'heure actuelle. La technologie est relativement mature et la configuration n'est pas compliquée. Surtout pour les sites Web avec de lourdes charges, maître. -synchronisation esclave Il peut effectivement alléger la pression de la lecture et de l'écriture de la base de données.
Mécanisme de synchronisation maître-esclave MySQL :
Le processus de synchronisation MySQL est à peu près le suivant :
1. Maître ) écrit les événements de modification (mises à jour, suppressions, modifications de la structure de la table, etc.) dans le journal binaire (journal principal).
2. Le thread IO du serveur esclave obtient le journal binaire du serveur principal (thread de dump binlog) et enregistre localement son propre journal binaire (journal de relais)
3. Lire le fichier local log (journal de relais) à partir du thread SQL du serveur et rejouez les événements de modification.
Le rôle de la synchronisation maître-esclave MySQL :
1. Peut être utilisé comme mécanisme de sauvegarde, équivalent à une sauvegarde à chaud (sur la sauvegarde esclave pour éviter d'affecter le service du serveur principal pendant la période de sauvegarde)
2. Il peut être utilisé pour séparer la lecture et l'écriture et équilibrer la charge de la base de données (écriture principale et lecture esclave)
3. En cas de problème avec le serveur principal, vous pouvez passer au serveur esclave.
Étapes de synchronisation maître-esclave MySQL :
Opérations préparatoires :
1. sont cohérents. Version 5.5 recommandée ou supérieure
2. Les données de la base de données maître-esclave sont cohérentes
2. Modifier la base de données maître :
1. Modifier la configuration MySQL :
# /etc/my.cnf log-bin = mysql-bin # 主数据库端ID号 server-id = 1 log-bin=/home/mysql/logs/binlog/bin-log max_binlog_size = 500M binlog_cache_size = 128K binlog-do-db = adb binlog-ignore-db = mysql log-slave-updates expire_logs_day=2 binlog_format="MIXED"
La signification et les précautions associées de chaque paramètre dans la configuration ci-dessus :
#服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。 server-id = 1 log-bin=/home/mysql/logs/binlog/bin-log #开启bin-log,并指定文件目录和文件名前缀。 #每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。 max_binlog_size = 500M binlog_cache_size = 128K #日志缓存大小 binlog-do-db = adb #需要同步的数据库名字,如果是多个,就以此格式在写一行即可。 binlog-ignore-db = mysql #不需要同步的数据库名字,如果是多个,就以此格式在写一行即可。 #当Slave从Master数据库读取日志时更新新写入日志中,如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。 log-slave-updates expire_logs_day=2 #设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持。 binlog_format="MIXED" #设置bin-log日志文件格式为:MIXED,可以防止主键重复。
2. Redémarrez MySQL et créez un compte pour la synchronisation :
# 创建slave帐号slave,密码111111 mysql>grant replication slave on *.* to 'slave'@'%' identified by '111111'; # 更新数据库权限 mysql>flush privileges;
3. master
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000009 | 196 | | | +------------------+----------+--------------+------------------+ 1 row in set
Remarque : n'utilisez pas la base de données principale après avoir effectué cette étape pour empêcher la valeur d'état de la base de données principale de changer
3. Modifiez la base de données esclave :
1. Modifiez la configuration MySQL :
# 从数据库端ID号 server-id =2
2.
3. Vérifiez l'état de la base de données esclave :
# 执行同步命令,设置主数据库ip,同步帐号密码,同步位置 mysql>change master to master_host='192.168.1.2',master_user='slave',master_password='111111',master_log_file='mysql-bin.000009',master_log_pos=196; # 开启同步功能 mysql>start slave;
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.2 Master_User: slave_account Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000009 Read_Master_Log_Pos: 196 Relay_Log_File: vicky-relay-bin.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000009 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: ... ...
À ce stade, le travail de configuration de la base de données maître-esclave est terminé. Vous pouvez créer une nouvelle base de données et une nouvelle table, insérer et modifier des données, et. tester si c'est réussi
4. Autres paramètres connexes pouvant être utilisés :
1.
2. Côté esclave :
# 不同步哪些数据库 binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema # 只同步哪些数据库,除此之外,其他不同步 binlog-do-db = game # 日志保留时间 expire_logs_days = 10 # 控制binlog的写入频率。每执行多少次事务写入一次 # 这个参数性能消耗很大,但可减小MySQL崩溃造成的损失 sync_binlog = 5 # 日志格式,建议mixed # statement 保存SQL语句 # row 保存影响记录数据 # mixed 前面两种的结合 binlog_format = mixed
# 停止主从同步 mysql> stop slave; # 连接断开时,重新连接超时时间 mysql> change master to master_connect_retry=50; # 开启主从同步 mysql> start slave;
Résumé
//在从服务器中执行以下语句 $sql = "show slave status"; $result = mysql_query($sql, $slave_link); $row = mysql_fetch_assoc($result); $Slave_IO_Running = $row['Slave_IO_Running']; $Slave_SQL_Running = $row['Slave_SQL_Running']; //下面两项为判断标准 if ('Yes' == $Slave_IO_Running && 'Yes' == $Slave_SQL_Running) { } else { $content .= "从数据库( $host )挂掉了!!! <br/>"; }
-->