Ein MySQL-Host in der Produktionsumgebung hat einen einzigen Fehlerpunkt, daher müssen wir die hohe Verfügbarkeit von MySQL sicherstellen, das heißt, wenn einer der beiden MySQL-Server aufhängt, kann der andere sofort übernehmen seine Arbeit.
Der Master zeichnet das Binärprotokoll auf. Bevor jede Transaktion die Daten aktualisiert, zeichnet der Master diese Änderungen im zweiten Protokoll auf. Die Speicher-Engine erhält vom Master-Server eine Benachrichtigung, nachdem das Binärprotokoll abgeschlossen ist, um die MySQL-Transaktion festzuschreiben. Als nächstes muss der Slave das Binärprotokoll des Masters in sein eigenes Relay-Protokoll kopieren. Zuerst startet der Slave einen Arbeitsthread – den I/O-Thread. Der I/O-Thread öffnet eine normale Verbindung auf dem Master und startet dann den Binlog-Dump-Prozess. Der Binlog-Dump-Prozess liest Ereignisse aus dem Binärprotokoll des Masters. Wenn der Master synchronisiert wurde, wartet er darauf, dass der Master neue Ereignisse generiert. Der letzte Schritt dieses Prozesses wird vom SQL-Slave-Thread ausgeführt. Der SQL-Thread liest die Ereignisse im Relay-Protokoll und reproduziert diese Ereignisse, um die Daten in der Slave-Datenbank zu aktualisieren und die Konsistenz mit den Daten in der Master-Datenbank aufrechtzuerhalten. Da Relay-Protokolle normalerweise im Cache des Betriebssystems gespeichert werden, entsteht nur wenig Overhead, solange der Thread mit dem E/A-Thread konsistent ist.
Umgebungsvorbereitung: Öffnen Sie zwei MySQL-Server und stellen Sie die Netzwerkumgebung bereit.
[root@master ~]# cd /usr/local/mysql/bin/ [root@master bin]# mysql_ssl_rsa_setup --user=mysql --basedir=/usr/llocal/mysql --datadir=/usr/local/mysql/data
[root@master bin]# chmod +r /usr/local/mysql/data/server-key.pem [root@master bin]# service mysqld restart Shutting down MySQL.. [ 确定 ] Starting MySQL. [ 确定 ]
Hinweis: Aktivieren Sie MySQL, um eine sichere SSL-Verbindung zu unterstützen, die hauptsächlich für die MySQL-Master-Slave-Replikation verwendet wird (das lokale Netzwerk kann eine Nicht-SSH-Verbindung oder eine Nur-Text-Replikation verwenden, es wird jedoch empfohlen, eine SSL-Verbindung für das Internet zu verwenden Replikation)
mysql> grant replication slave on *.* to rep@'192.168.8.3' identified by '123'; Query OK, 0 rows affected, 1 warning (0.07 sec)
Es ist zu beachten, dass server_id eindeutig sein muss.
[root@master ~]# vim /etc/my.cnf #添加下面内容 log-bin=mysql-bin service_id=1 [root@master ~]# service mysqld restart Shutting down MySQL.. [ 确定 ] Starting MySQL. [ 确定 ] [root@master ~]# mysql -uroot -p123 -e "show master status" mysql: [Warning] Using a password on the command line interface can be insecure. +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+
[root@master ~]# firewall-cmd --permanent --add-port=3306/tcp success [root@master ~]# firewall-cmd --reload success
[root@master data]# scp ca.pem client-cert.pem client-key.pem root@192.168.8.3:/usr/local/mysql/data The authenticity of host '192.168.8.3 (192.168.8.3)' can't be established. ECDSA key fingerprint is SHA256:LFby9KMDz/kkPfOESbeJ7Qh+3hmQaX2W5gkDDMwSGHA. ECDSA key fingerprint is MD5:03:32:64:b4:c2:5b:6c:a4:e2:f0:7f:df:7a:35:19:80. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.8.3' (ECDSA) to the list of known hosts. root@192.168.8.3's password: ca.pem 100% 1112 232.5KB/s 00:00 client-cert.pem 100% 1112 240.4KB/s 00:00 client-key.pem 100% 1676 205.0KB/s 00:00
[root@slave ~]# vim /etc/my.cnf #添加下面内容 server_id=2 relay-log=relay-log ssl_ca=ca.pem ssl_cert=client-cert.pem ssl_key=client-key.pem [root@slave ~]# cd /usr/local/mysql/data [root@slave data]# ll ca.pem client-cert.pem client-key.pem -rw-r--r--. 1 mysql mysql 1112 3月 31 14:31 ca.pem -rw-r--r--. 1 mysql mysql 1112 3月 31 14:31 client-cert.pem -rw-------. 1 mysql mysql 1676 3月 31 14:31 client-key.pem [root@slave data]# chmod +r client-key.pem [root@slave ~]# service mysqld restart Shutting down MySQL.. [ 确定 ] Starting MySQL. [ 确定 ]
2. Bestätigen Sie, dass SSL erfolgreich aktiviert ist
[root@slave ~]# mysql -uroot -p123 -e "show variables like '%ssl%'" mysql: [Warning] Using a password on the command line interface can be insecure. +-------------------------------------+-----------------+ | Variable_name | Value | +-------------------------------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | performance_schema_show_processlist | OFF | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | client-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | client-key.pem | +-------------------------------------+-----------------+
3 Bevor Sie die Master-Slave-Replikation konfigurieren, können Sie versuchen, SSL zu verwenden, um eine Verbindung zum Master-Server auf dem Slave-MySQL herzustellen.
AES128-GCM-SHA256. Melden Sie sich beim MySQL-Dienst des Slaves an.
[root@slave ~]# cd /usr/local/mysql/data [root@slave data]# mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u rep -p123 -h 192.168.8.2 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.40-log MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql> \s -------------- mysql Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using EditLine wrapper Connection id: 3 Current database: Current user: rep@192.168.8.3 SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256 Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.40-log MySQL Community Server (GPL) Protocol version: 10 Connection: 192.168.8.2 via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 22 min 19 sec Threads: 1 Questions: 8 Slow queries: 0 Opens: 109 Flush tables: 1 Open tables: 102 Queries per second avg: 0.005 --------------
Bestätigen Sie, dass die Aktivierung erfolgreich war.
SSL-Master-Slave-Replikation testen1. Melden Sie sich beim Master an und schreiben Sie einige Datenmysql> exit Bye [root@slave data]# mysql -uroot -p123 #省略部分登录信息 mysql> change master to -> master_host='192.168.8.2', #masterIP -> master_user='rep', #master用户 -> master_password='123', #master密码 -> master_log_file='mysql-bin.000001', #master二进制日志文件 -> master_log_pos=154, #master位置 -> master_ssl=1, #masterssl -> master_ssl_cert='client-cert.pem', -> master_ssl_key='client-key.pem', -> master_ssl_ca='ca.pem'; Query OK, 0 rows affected, 2 warnings (0.07 sec) mysql> start slave; #启用从 Query OK, 0 rows affected (0.02 sec)
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die MySQL-Master-Slave-Replikation basierend auf einer sicheren SSL-Verbindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!