Maison  >  Article  >  base de données  >  Comment implémenter la réplication maître-esclave MySQL basée sur une connexion sécurisée SSL

Comment implémenter la réplication maître-esclave MySQL basée sur une connexion sécurisée SSL

王林
王林avant
2023-05-26 17:38:301158parcourir

    Un hôte mysql dans l'environnement de production a un point de défaillance unique, nous devons donc assurer la haute disponibilité de mysql, c'est-à-dire que si l'un des deux serveurs MySQL raccroche, l'autre peut immédiatement prendre le relais son travail.

    Principe de réplication maître-esclave

                                Le maître enregistre le journal binaire Avant que chaque transaction ne mette à jour les données, le maître enregistre ces modifications dans le deuxième journal. Le moteur de stockage reçoit une notification du serveur maître une fois le journal binaire terminé pour valider la transaction MySQL. Ensuite, l'esclave doit copier le journal binaire du maître dans son propre journal de relais. Tout d'abord, l'esclave démarre un thread de travail - le thread d'E/S. Le thread d'E/S ouvre une connexion normale sur le maître, puis démarre le processus de vidage du journal binaire. Le processus de vidage Binlog lit les événements du journal binaire du maître. Si le maître a été synchronisé, il se met en veille et attend que le maître génère de nouveaux événements. Le thread d'E/S écrit ces événements dans le journal du relais. La dernière étape de ce processus est gérée par le thread esclave SQL. Le thread SQL lit les événements dans le journal de relais et reproduit ces événements pour mettre à jour les données de la base de données esclave afin de maintenir la cohérence avec les données de la base de données maître. Étant donné que les journaux de relais sont généralement stockés dans le cache du système d'exploitation, il y a peu de surcharge tant que le thread est cohérent avec le thread d'E/S.

    Préparation de l'environnement : ouvrez deux serveurs MySQL et déployez l'environnement réseau.

    Comment implémenter la réplication maître-esclave MySQL basée sur une connexion sécurisée SSL

    Déployer le maître

    1. Créez un fichier SSL/RSA sur l'hôte

    [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

    2.

    [root@master bin]# chmod +r /usr/local/mysql/data/server-key.pem 
    [root@master bin]# service mysqld restart
    Shutting down MySQL..                                      [  确定  ]
    Starting MySQL.                                            [  确定  ]

    3. Connectez-vous à MySQL pour vérifier si SSL est activé et créez un utilisateur de copie.

    Comment implémenter la réplication maître-esclave MySQL basée sur une connexion sécurisée SSL

    Remarque : activez MySQL pour prendre en charge la connexion sécurisée SSL, qui est principalement utilisée pour la réplication maître-esclave MySQL (le réseau local peut utiliser une connexion non-SSH ou une réplication en texte brut, mais la réplication Internet est recommandée pour utiliser une connexion SSL)

    mysql> grant replication slave on *.* to rep@'192.168.8.3' identified by '123';
    Query OK, 0 rows affected, 1 warning (0.07 sec)

    4. Le maître active le journal binaire et, après le redémarrage, affiche le fichier journal binaire.

    Il est à noter que server_id doit être unique.

    [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 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+

    5. Configuration du pare-feu, le pare-feu peut être désactivé dans l'environnement expérimental et les règles de pare-feu doivent être configurées dans l'environnement de production pour autoriser le port 3306.

    [root@master ~]# firewall-cmd --permanent --add-port=3306/tcp
    success
    [root@master ~]# firewall-cmd --reload
    success

    6. Copiez le fichier SSL sur l'esclave

    [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

    Déployez l'esclave

    1 Activez les journaux SSL et relais, accordez l'autorisation de lecture au fichier SSL et redémarrez 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. Confirmez que SSL est activé avec succès

    [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. Avant de configurer la réplication maître-esclave, vous pouvez essayer d'utiliser SSL pour vous connecter au serveur maître sur le mysql esclave.

                                                                                                                                                                                            peut être considérée comme l'adresse IP du maître. Connectez-vous au service MySQL de l'esclave.

    [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
    --------------

    Confirmez que l'activation est réussie.

    Test de la réplication SSL maître-esclave

    Comment implémenter la réplication maître-esclave MySQL basée sur une connexion sécurisée SSL1. Connectez-vous au maître et écrivez quelques données

    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)

    2 Connectez-vous à l'esclave et affichez les données

    [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)

    Enfin, vous pouvez voir z3, le maître-. l'esclave réussit.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer