Heim >Datenbank >MySQL-Tutorial >Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?

Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?

青灯夜游
青灯夜游nach vorne
2021-09-06 18:58:382317Durchsuche

Wie richte ich die Master-Slave-Replikation in Mysql5.7 ein? Der folgende Artikel führt Sie durch die Schritte zum Erstellen der Master-Slave-Replikation in Mysql5.7. Ich hoffe, er wird Ihnen hilfreich sein!

Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?

1. Überblick

Durch die Master-Slave-Replikation können Datenbanksicherung und Lese-/Schreibtrennung realisiert werden:

Um die Nichtverfügbarkeit von Diensten zu vermeiden und die Sicherheit und Zuverlässigkeit der Daten zu gewährleisten, müssen wir sie bereitstellen Mindestens zwei Oder zwei oder mehr Server zum Speichern von Datenbankdaten. Das heißt, wir müssen die Daten kopieren und auf mehreren verschiedenen Servern bereitstellen. Selbst wenn ein Server ausfällt, können andere Server weiterhin Dienste bereitstellen. Slave-Replikationsfunktion zur Verbesserung der Dienstverfügbarkeit sowie der Datensicherheit und -zuverlässigkeit.

Master-Slave-Replikation bedeutet, dass der Server in einen Master-Server und einen Slave-Server unterteilt ist. Der Master-Server ist nur für das Lesen und Schreiben verantwortlich Die für das Lesen verantwortliche Master-Slave-Replikation wird auch als Master/Slave bezeichnet. Der Master ist der Master und der Slave ist der Slave. Dies ist jedoch nicht zwingend erforderlich, dh der Slave kann auch schreiben und der Master kann auch lesen, aber im Allgemeinen machen wir das nicht. [Verwandte Empfehlungen:

MySQL-Video-Tutorial]

2. Master-Slave-Replikationsarchitektur

Eine Master- und mehrere Slave-Architektur:
Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?
Mehrfache Master- und mehrere Slave-Architektur:
Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?
Meister -Slave-Replikationsprinzip:

    Wenn sich die Daten auf dem Master-Server ändern, werden die Änderungen in die binäre Ereignisprotokolldatei geschrieben
  1. salve Der Slave-Server erkennt das Binärprotokoll auf dem Master-Server innerhalb eines bestimmten Zeitintervalls. Erkennung, ob sich das binäre Ereignisprotokoll des Master-Servers geändert hat, wird ein E/A-Thread gestartet, um das Master-Binär-Ereignisprotokoll anzufordern
  2. Gleichzeitig startet der Master-Server einen Dump-Thread für jeden E/A-Thread. Wird verwendet, um binäre Ereignisprotokolle an ihn zu senden.
  3. Slave Der Slave-Server speichert das empfangene binäre Ereignisprotokoll in seiner eigenen lokalen Relay-Protokolldatei.
  4. salve Der Slave-Server startet den SQL-Thread, um das Binärprotokoll zu lesen aus dem Relay-Protokoll lokal abspielen, um die Daten mit dem Hauptserver in Einklang zu bringen.
  5. Schließlich wechseln der E/A-Thread und der SQL-Thread in den Ruhezustand und warten darauf, beim nächsten Mal aktiviert zu werden
3. Ein Master und mehrere Slaves-Setup

Build-Umgebung: 1. Linux-Version CentOS Release 6.9 (Final)
2 Adresse herunterladen1. Linux 版本 CentOS release 6.9 (Final)
2. mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz下载地址

1.解压 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

#/usr/local下解压
tar xzvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
#重命名文件
mv mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mysql

2.创建多实例数据目录

cd /usr/local/mysql
mkdir data
cd data
#主
mkdir 3306
#从
mkdir 3307

Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?
3.数据库初始化

#mysql 安装bin目录下执行
#initialize-insecure 表示不生成MySQL数据库root用户的随机密码,即root密码为空

#初始化3306
./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3306 --user=mysql
#初始化3307
./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3307 --user=mysql

若出现错误执行
yum install libaio-devel.x86_64
yum -y install numactlEine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?
4.创建各个数据库的配置文件my.cnf

注意:
1.建议在linux下创建文件防止windows 与 linux 编码不一致
2.不同的实例下配置要修改端口号
3.将修改好的my.cnf分别放至3306、3307文件夹内

[client]
port        = 3306
socket      = /usr/local/mysql/data/3306/mysql.sock
default-character-set=utf8

[mysqld]
port    = 3306
socket  = /usr/local/mysql/data/3306/mysql.sock
datadir = /usr/local/mysql/data/3306
log-error = /usr/local/mysql/data/3306/error.log
pid-file = /usr/local/mysql/data/3306/mysql.pid

character-set-server=utf8
lower_case_table_names=1
autocommit = 1

log-bin=mysql-bin
server-id=3306

5.多实例启动
切换到/usr/local/mysql-5.7.24/bin目录下,使用 msyqld_safe 命令指定配置文件并启动MySQL服务:

#其中 --defaults-file 是指定配置文件,& 符合表示后台启动
./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &

6.数据库初始化配置
分别在各个实例内进行配置 如3306:

#客户端连接
./mysql -uroot -p -P3306 -h127.0.0.1
#修改Mysql密码
alter user 'root'@'localhost' identified by 'root';
#授权远程访问(这样远程客户端才能访问)
grant all privileges on *.* to root@'%' identified by 'root';
#刷新配置
flush privileges;

客户端连接测试
Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?
7.数据库唯一id配置

1.确定各个实例正常启动无误后进行主从配置
2.关闭实例分别在各个实例的my.cnf文件加入以下配置

#/usr/local/mysql/bin 关闭实例
./mysqladmin -uroot -p -P3307 -h127.0.0.1 shutdown
./mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown

#新加的配置
log-bin=mysql-bin   	#表示启用二进制日志
server-id=3307 		#表示server编号,编号要唯一 建议和端口保持一致

加入完毕后启动各个实例

./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf &

./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &

7.主机设置
1.在主服务器上创建复制数据的账号并授权

#在/usr/local/mysql/bin目录下执行 
 ./mysql -uroot -p -P3306 -h127.0.0.1
 grant replication slave on *.* to 'copy'@'%' identified by 'root';

2.查看主服务器状态

# mysql主服务器默认初始值:
#			File:mysql-bin.000001
#			Position:154

show master status;

3.如果主服务状态不是初始状态,需要重置状态

reset master;

7.从机设置
1.需要登录到 3306|3307|3308的从机客户端

#在/usr/local/mysql/bin目录下执行  多台从机‘|’分隔
./mysql -uroot -p -P3308|3309|3310 -h127.0.0.1

2.查看从机状态

#初始状态:Empty set 
show slave status;

3.若不是初始状态,重置一下

stop slave; 	#停止复制,相当于终止从服务器上的IO和SQL线程
reset slave;

4.设置从机设置主机配置

🎜1 .Mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz🎜🎜
change master to 
master_host='主机ip',master_user='copy',
master_port=主机端口,master_password='连接主机密码',
master_log_file='mysql-bin.000001',master_log_pos=154;
🎜🎜2. Erstellen Sie ein Multi-Instanz-Datenverzeichnis🎜🎜
start slave;
🎜Bildbeschreibung hier einfügen🎜🎜3. Datenbankinitialisierung🎜🎜
show slave status \G;
🎜Wenn eine Fehler auftritt, führen Sie 🎜yum install libaio-devel .x86_64🎜yum -y install numactlBildbeschreibung hier einfügen🎜🎜4. Erstellen Sie die Konfigurationsdatei my.cnf für jede Datenbank🎜🎜🎜Hinweis:🎜 1. Es wird empfohlen, Dateien unter Linux zu erstellen, um zu verhindern, dass Windows mit der Linux-Kodierung inkonsistent ist🎜2 Ändern Sie die Portnummer in verschiedenen Instanzkonfigurationen🎜3 my.cnf in die Ordner 3306 bzw. 3307 geändert🎜<pre class="brush:js;toolbar:false;">stop slave; set global sql_slave_skip_counter =1; start slave; show slave status\G;</pre>🎜🎜5. Multi-Instanz-Startup🎜🎜<code>Wechseln Sie in das Verzeichnis /usr/local/mysql-5.7.24/bin und verwenden Sie msyqld_safe Befehl zum Angeben der Konfigurationsdatei und zum Starten des MySQL-Dienstes:🎜
 slave-parallel-type=LOGICAL_CLOCK
 slave-parallel-workers=16
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 relay_log_recovery=ON
🎜🎜6. Datenbankinitialisierungskonfiguration🎜🎜Konfigurieren Sie jeweils die Instanz, z. B. 3306:🎜rrreee🎜 Client-Verbindungstest🎜Bildbeschreibung hier einfügen🎜 🎜7. Konfiguration der eindeutigen Datenbank-ID🎜🎜🎜1 Stellen Sie sicher, dass jede Instanz normal startet und führen Sie die Master-Slave-Konfiguration durch🎜2. cnf-Datei jeder Instanz🎜rrreee🎜Starten Sie jede Instanz, nachdem das Hinzufügen abgeschlossen ist. Beispiel🎜rrreee🎜🎜7. Host-Einstellungen🎜🎜1. Erstellen Sie ein Konto zum Kopieren von Daten den Hauptserver und autorisieren Sie ihn🎜rrreee🎜2 Überprüfen Sie den Status des Hauptservers🎜rrreee🎜3 zurückgesetzt werden🎜rrreee🎜🎜7. Slave-Maschineneinstellungen🎜🎜 1.Anmeldung beim 3306|3307|3308 Slave-Client erforderlich🎜rrreee🎜2 🎜rrreee🎜3. Wenn es nicht der Ausgangszustand ist, setzen Sie ihn zurück🎜rrreee🎜 4. Stellen Sie die Slave-Maschine ein und legen Sie die Host-Konfiguration fest🎜
change master to 
master_host=&#39;主机ip&#39;,master_user=&#39;copy&#39;,
master_port=主机端口,master_password=&#39;连接主机密码&#39;,
master_log_file=&#39;mysql-bin.000001&#39;,master_log_pos=154;

5.执行 开始复制命令

start slave;

6.查看从机状态

show slave status \G;

Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?
7.测试主从复制

在主数据库中进行创建表,从库同步就算搭建成功了!
Eine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?
若你在从库进行写操作,则从服务器不再同步主库数据,在从库中执行此命令即可解决!

stop slave;
set global sql_slave_skip_counter =1;
start slave;
show slave status\G;

若主从复制速度较慢的话,执行此命令

 slave-parallel-type=LOGICAL_CLOCK
 slave-parallel-workers=16
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 relay_log_recovery=ON

更多编程相关知识,请访问:编程入门!!

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion darüber, wie man die Master-Slave-Replikation in Mysql5.7 einrichtet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen