Heim  >  Artikel  >  Datenbank  >  Ausführliche Erklärung zum Einrichten der Master-Slave-Synchronisierung in der MySQL-Datenbank

Ausführliche Erklärung zum Einrichten der Master-Slave-Synchronisierung in der MySQL-Datenbank

黄舟
黄舟Original
2017-02-28 14:02:531500Durchsuche

Einführung

MySQL-Master-Slave-Synchronisation ist derzeit eine weit verbreitete Datenbankarchitektur. Die Technologie ist relativ ausgereift und die Konfiguration ist nicht kompliziert -Slave-Synchronisation Es kann den Druck beim Lesen und Schreiben von Datenbanken wirksam entlasten.

MySQL-Master-Slave-Synchronisationsmechanismus:

Der Prozess der MySQL-Synchronisation ist ungefähr wie folgt:

1. Master ) schreibt Änderungsereignisse (Aktualisierungen, Löschungen, Änderungen der Tabellenstruktur usw.) in das Binärprotokoll (Masterprotokoll).

2. Der IO-Thread des Slave-Servers erhält das Binärprotokoll vom Hauptserver (Binlog-Dump-Thread) und speichert sein eigenes Binärprotokoll (Relay-Protokoll) lokal

3. Lesen Sie das lokale log (Relay-Log) aus dem SQL-Thread des Servers und spielt die Änderungsereignisse ab.

Ausführliche Erklärung zum Einrichten der Master-Slave-Synchronisierung in der MySQL-Datenbank

Die Rolle der MySQL-Master-Slave-Synchronisation:

1. Kann als Backup-Mechanismus verwendet werden, äquivalent zu Hot Backup (auf dem Slave-Backup, um eine Beeinträchtigung des Hauptserverdienstes während des Backup-Zeitraums zu vermeiden)

2. Es kann verwendet werden, um Lesen und Schreiben zu trennen und die Datenbanklast auszugleichen (primäres Schreiben und Slave-Lesen)

3. Wenn es ein Problem mit dem Hauptserver gibt, können Sie zum Slave-Server wechseln.

MySQL-Master-Slave-Synchronisierungsschritte:

1. Die Master-Slave-Datenbankversionen sind konsistent. Empfohlene Version 5.5 oder höher
2. Die Master-Slave-Datenbankdaten sind konsistent


2. Ändern Sie den Master-Datenbank-Master:

1. Ändern Sie die MySQL-Konfiguration:



# /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"
Die Bedeutung und die zugehörigen Vorsichtsmaßnahmen jedes Parameters in der obigen Konfiguration:





#服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话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. Starten Sie MySQL neu und erstellen Sie ein Konto für die Synchronisierung:





# 创建slave帐号slave,密码111111 
mysql>grant replication slave on *.* to 'slave'@'%' identified by '111111'; 

# 更新数据库权限 
mysql>flush privileges;
3 master





Hinweis: Betreiben Sie die Hauptdatenbank nicht, nachdem Sie diesen Schritt ausgeführt haben, um zu verhindern, dass sich der Statuswert der Hauptdatenbank ändert
mysql> show master status; 
+------------------+----------+--------------+------------------+ 
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| mysql-bin.000009 |  196 |    |     | 
+------------------+----------+--------------+------------------+ 
1 row in set


3. Ändern Sie den Slave-Datenbank-Slave:

1. Ändern Sie die MySQL-Konfiguration:


2

3. Überprüfen Sie den Status der Slave-Datenbank:
# 从数据库端ID号 
server-id =2


# 执行同步命令,设置主数据库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;

Hinweis: Die Prozesse Slave_IO_Running und Slave_SQL_Running müssen normal ausgeführt werden, d. h. im Status JA, andernfalls Die Synchronisierung schlägt fehl. Mithilfe dieser beiden Elemente können Sie feststellen, ob der Slave-Server ausgefallen ist.

An diesem Punkt ist die Einrichtung der Master-Slave-Datenbank abgeschlossen. Sie können eine neue Datenbank und Tabelle erstellen, Daten einfügen und ändern Testen Sie, ob es erfolgreich ist

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: 
   ... 
   ...

4. Weitere verwandte Parameter, die verwendet werden können:


1
2. Slave-Seite:


Die oben genannten Verbindungs-Timeout-Einstellungen und ähnliche Methoden können zum Festlegen der Hauptdatenbank-IP, zum Synchronisieren des Kontokennworts und zum Synchronisierungsort verwendet werden

# 不同步哪些数据库 
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


Beurteilen Sie die Master- und Slave-Server. Ob der Code normal ausgeführt wird:

# 停止主从同步 
mysql> stop slave; 

# 连接断开时,重新连接超时时间 
mysql> change master to master_connect_retry=50; 

# 开启主从同步 
mysql> start slave;



Zusammenfassung
Ausführliche Erklärung zum Einrichten der Master-Slave-Synchronisierung in der MySQL-Datenbank


Das Obige ist eine detaillierte Erklärung zum Einrichten der Master-Slave-Synchronisation in der MySQL-Datenbank. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

//在从服务器中执行以下语句
 $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/>";
 }

-->

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn