Rumah > Artikel > pangkalan data > Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL
Hos mysql dalam persekitaran pengeluaran mempunyai satu titik kegagalan, jadi kita perlu memastikan ketersediaan mysql yang tinggi, iaitu, jika salah satu daripada dua pelayan MySQL menutup telefon, , yang satu lagi boleh mengambil alih tugasnya dengan segera.
Tuan merekodkan log binari Sebelum setiap transaksi mengemas kini data, tuan merekodkan perubahan ini dalam log kedua. Enjin storan menerima pemberitahuan daripada pelayan induk selepas log binari selesai untuk melakukan transaksi MySQL. Seterusnya, hamba perlu menyalin log binari tuan ke log gegantinya sendiri. Mula-mula, hamba memulakan benang berfungsi - benang I/O membuka sambungan biasa pada induk, dan kemudian memulakan proses pembuangan binlog. Proses pembuangan Binlog membaca peristiwa daripada log perduaan induk Jika induk telah disegerakkan, ia tidur dan menunggu induk menjana peristiwa baharu. Langkah terakhir proses ini dikendalikan oleh benang hamba SQL.. Benang SQL membaca peristiwa dalam log geganti dan mengeluarkan semula peristiwa ini untuk mengemas kini data dalam pangkalan data hamba untuk mengekalkan konsistensi dengan data dalam pangkalan data induk. Oleh kerana log geganti biasanya disimpan dalam cache sistem pengendalian, log geganti mempunyai sedikit overhed selagi benang itu konsisten dengan utas I/O.
Persediaan persekitaran: Buka dua pelayan MySQL dan gunakan persekitaran rangkaian.
[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. [ 确定 ]
Nota: Dayakan mysql untuk menyokong sambungan selamat ssl, yang digunakan terutamanya untuk replikasi master-slave mysql (LAN boleh menggunakan sambungan bukan ssh atau replikasi teks yang jelas, tetapi ia disyorkan untuk menggunakan sambungan ssl untuk replikasi internet)
mysql> grant replication slave on *.* to rep@'192.168.8.3' identified by '123'; Query OK, 0 rows affected, 1 warning (0.07 sec)
Perlu diingatkan bahawa server_id mestilah unik.
[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
1 Dayakan log ssl dan relay, berikan kebenaran membaca kepada fail ssl dan mulakan semula mysql.
[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. Sahkan bahawa SSL berjaya dihidupkan
[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 Sebelum mengkonfigurasi replikasi master-slave, anda boleh cuba menggunakan SSL untuk menyambung ke pelayan induk pada mysql hamba.
Beri perhatian untuk membezakan IP 8.2 ialah IP induk Anda dapat melihat bahawa protokol ssl Cipher yang digunakan ialah ECDHE-RSA-AES128-GCM-SHA256
[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 --------------
1. Log masuk ke pelayan hamba dan konfigurasikan tuan dan hamba replika
Ingat untuk keluar dari sambungan dahulu dan log masuk ke perkhidmatan mysql hamba.
mysql> 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)
Sahkan pengaktifan berjaya.
1 Log masuk ke induk dan tulis beberapa data
[root@master ~]# mysql -uroot -p123 #省略部分内容 mysql> create database bbs; Query OK, 1 row affected (0.01 sec) mysql> use bbs; Database changed mysql> create table tb1(id int, -> name varchar(20)); Query OK, 0 rows affected (0.02 sec) mysql> insert into tb1 values(1,'z3'); Query OK, 1 row affected (0.02 sec)
2 budak dan lihat data
[root@slave ~]# mysql -uroot -p123 #省略部分内容 mysql> select * from bbs.tb1; +------+------+ | id | name | +------+------+ | 1 | z3 | +------+------+ 1 row in set (0.01 sec)
Akhirnya, anda boleh melihat z3, tuan dan hamba berjaya.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!