iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL复制的原理和作用是什么
  • 306
分享到

MySQL复制的原理和作用是什么

2023-06-20 13:06:36 306人浏览 八月长安
摘要

本篇内容主要讲解“MySQL复制的原理和作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql复制的原理和作用是什么”吧!目录一、mysql复制相关概念二、简单的一主一从架构实现新数

本篇内容主要讲解“MySQL复制的原理和作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Mysql复制的原理和作用是什么”吧!

目录
  • 一、mysql复制相关概念

  • 二、简单的一主一从架构实现

  • 三、级联复制架构实现

    • 四、主主复制架构

      • 五、半同步复制的实现

        • 六、加密传输复制的实现

          • 七、Mysql复制的相关指令和变量总结

            一、MySQL复制相关概念

            • 主从复制:主节点将数据同步到多个从节点

            • 级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据

            • 同步复制:将数据从主节点全部同步到从节点时才返回给用户的复制策略叫同步复制

            • 异步复制:只要数据写入到主节点就立即返回给用户同步完成

            • 读写分离:在前端加一个调度器,负责将改变数据的语句和查询数据的语句分开调度,把写操作调度到主节点,读操作调度到从节点

            MySQL复制的原理和作用是什么

            主节点:

            • dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events

            从节点:

            • I/O Thread:向Master请求二进制日志事件,并保存于中继日志中

            • SQL Thread:从中继日志中读取日志事件,在本地完成重放

            跟复制功能相关的文件:

            • master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等

            • relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地replay log日志的对应关系

            复制架构:

            • 一主一从

            • 一主多从

            • 主主复制

            • 环状复制

            • 级联复制

            • 多主一从

            常见的架构有主从架构或者级联架构

            二、简单的一主一从架构实现

            MySQL复制的原理和作用是什么

            1、新数据库搭建主从架构

            1)主服务器配置

            ~]# vim /etc/my.cnf    [mysqld]    log_bin    binlog_fORMat=ROW    log-basename=master1    server_id=1~]# systemctl restart mariadb~]# mysqlMariaDB [(none)]> GRANT REPLICATioN SLAVE ON *.* TO testuser@'192.168.0.8' IDENTIFIED BY 'testpass';  #授权同步账户MariaDB [(none)]> SHOW MASTER LOGS;+--------------------+-----------+| Log_name           | File_size |+--------------------+-----------+| master1-bin.000001 |     26756 || master1-bin.000002 |    921736 || master1-bin.000003 |       401 |  #记录此位置,从服务器从这里开始同步+--------------------+-----------+

            2)从服务器配置

            ~]# vim /etc/my.cnf    [mysqld]    server_id=2  #服务器ID唯一    relay_log=relay-log    relay_log_index=relay-log.index    read_only=ON~]# systemctl restart mariadb~]# mysqlMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.7',  #指定主节点IP    -> MASTER_USER='testuser',  #同步用户的用户名    -> MASTER_PASSWord='testpass',  #密码    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='master1-bin.000003',  #以上记录的文件    -> MASTER_LOG_POS=401,  #位置    -> MASTER_CONNECT_RETRY=10;  #重试时间10秒MariaDB [(none)]> START SLAVE;  #开始主从复制

            3)测试

            在主节点上生成一些数据:MariaDB [(none)]> CREATE DATABASE testdb;MariaDB [(none)]> use testdbMariaDB [testdb]> create table testlog (id int auto_increment primary key,name char(30),age int default 20);MariaDB [testdb]> delimiter $$MariaDB [testdb]> create procedure pro_testlog()    -> begin    -> declare i int;    -> set i = 1;    -> while i < 100000    -> do insert into testlog(name,age) values (concat('testuser',i),i);    -> set i = i +1;     -> end while;    -> end$$MariaDB [testdb]> delimiter ;MariaDB [testdb]> START TRANSACTION;MariaDB [testdb]> CALL pro_testlog;MariaDB [testdb]> COMMIT;
            在从节点上查看同步情况:MariaDB [(none)]> SELECT COUNT(*) FROM testdb.testlog;+----------+| COUNT(*) |+----------+|    99999 |  #同步成功+----------+MariaDB [(none)]> SHOW SLAVE STATUS\G*************************** 1. row ****************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.0.7                  Master_User: testuser                  Master_Port: 3306                Connect_Retry: 10              Master_Log_File: master1-bin.000003          Read_Master_Log_Pos: 10389814               Relay_Log_File: relay-log.000002                Relay_Log_Pos: 10389944        Relay_Master_Log_File: master1-bin.000003             Slave_IO_Running: Yes  #IO线程已启动            Slave_SQL_Running: Yes  #SQL线程已启动        Seconds_Behind_Master: 0    #主从复制的时间差             Master_Server_Id: 1

            2、旧数据库新加从服务器

            1)主服务器配置

            ~]# vim /etc/my.cnf    [mysqld]    log_bin    binlog_format=ROW    log-basename=master1    server_id=1~]# systemctl restart mariadb~]# mysqldump -A -F --single-transaction --master-data=1 > full.sql~]# scp full.sql root@192.168.0.8:/root/~]# mysql -e 'GRANT REPLICATION SLAVE ON *.* TO testuser@'192.168.0.8' IDENTIFIED BY 'testpass';'

            2)从服务器配置

            ~]# vim /etc/my.cnf    [mysqld]    server_id=2    relay_log=relay-log       relay_log_index=relay-log.index    read_only=ON~]# systemctl restart mariadb~]# vim full.sql  #在备份的SQL文件中加入以下信息    CHANGE MASTER TO    MASTER_HOST='192.168.0.7',    MASTER_USER='testuser',    MASTER_PASSWORD='testpass',    MASTER_PORT=3306,    MASTER_LOG_FILE='master1-bin.000005',    MASTER_LOG_POS=245,    MASTER_CONNECT_RETRY=10;~]# mysql < full.sql  #导入SQL的同时配置已经完成MariaDB [(none)]> SELECT COUNT(*) FROM testdb.testlog;+----------+| COUNT(*) |+----------+|    99999 |+----------+MariaDB [(none)]> START SLAVE;  #启动复制

            三、级联复制架构实现

            MySQL复制的原理和作用是什么

            1)主节点

            [root@master ~]# vim /etc/my.cnf[mysqld]log_binbinlog_format=ROWlog-basename=masterserver_id=1[root@master ~]# systemctl restart mariadbMariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';MariaDB [(none)]> SHOW MASTER LOGS;+-------------------+-----------+| Log_name          | File_size |+-------------------+-----------+| master-bin.000001 |     26753 || master-bin.000002 |    921736 || master-bin.000003 |       401 |+-------------------+-----------+

            2)从节点

            [root@slave1 ~]# vim /etc/my.cnf[mysqld]log_bin  #注意,级联架构中中继从节点一定得开二进制日志功能binlog_format=ROWread_only=ONserver_id=2log_slave_updates  #这项为关键,作用是将从服务的数据改变记录到二进制日志文件中relay_log=relay-logrelay_log_index=relay-log.index[root@slave1 ~]# systemctl start mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.7',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='master-bin.000003',    -> MASTER_LOG_POS=401,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> START SLAVE;MariaDB [(none)]> SHOW MASTER LOGS;+--------------------+-----------+| Log_name           | File_size |+--------------------+-----------+| mariadb-bin.000001 |       245 |+--------------------+-----------+MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';

            3)从节点的从节点

            [root@slave2 ~]# vim /etc/my.cnf[mysqld]read_only=ONserver_id=3relay_log=relay-logrelay_log_index=relay-log.index[root@slave2 ~]# systemctl start mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.8',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='mariadb-bin.000001',    -> MASTER_LOG_POS=245,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> START SLAVE;

            4)从节点的从节点2

            [root@slave3 ~]# vim /etc/my.cnf[mysqld]read_only=ONserver_id=4relay_log=relay-logrelay_log_index=relay-log.index[root@slave3 ~]# systemctl start mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.8',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='mariadb-bin.000001',    -> MASTER_LOG_POS=245,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> START SLAVE;到此已经搭建好了级联复制,接下来测试一下把~

            四、主主复制架构

            容易产生的问题:数据不一致,因此慎用;考虑要点:自动增长id
            配置一个节点使用奇数id
            auto_increment_offset=1   开始点
            auto_increment_increment=2  增长幅度
            另一个节点使用偶数id
            auto_increment_offset=2
            auto_increment_increment=2

            1)主1

            [mysqld]log_binbinlog_format=ROWlog-basename=master1server_id=1relay_log=relay-logrelay_log_index=relay-log.indexauto_increment_offset=1  #自增长字段从1开始auto_increment_increment=2  #每次增长2,也就是说master1节点写入的数据的id字段全部是奇数[root@master ~]# systemctl start mariadbMariaDB [(none)]> SHOW MASTER LOGS;+--------------------+-----------+| Log_name           | File_size |+--------------------+-----------+| master1-bin.000001 |     27033 || master1-bin.000002 |    942126 || master1-bin.000003 |       245 |+--------------------+-----------+MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';MariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.8',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='master2-bin.000003',    -> MASTER_LOG_POS=245,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> START SLAVE;

            2)主2

            [mysqld]log_binbinlog_format=ROWlog-basename=master2server_id=2relay_log=relay-logrelay_log_index=relay-log.indexauto_increment_offset=2  #自增长字段从1开始auto_increment_increment=2  #每次增长2,也就是说master1节点写入的数据的id字段全部是偶数[root@master2 ~]# systemctl start mariadbMariaDB [(none)]> SHOW MASTER LOGS;+--------------------+-----------+| Log_name           | File_size |+--------------------+-----------+| master2-bin.000001 |     27036 || master2-bin.000002 |    942126 || master2-bin.000003 |       245 |+--------------------+-----------+MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';MariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.7',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='master1-bin.000003',    -> MASTER_LOG_POS=245,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> START SLAVE;

            3)测试

            在master1上创建表,增加数据MariaDB [(none)]> CREATE DATABASE db1;MariaDB [(none)]> use db1MariaDB [db1]> CREATE TABLE t1(id INT(2) AUTO_INCREMENT PRIMARY KEY,name CHAR(30));MariaDB [db1]> INSERT t1(name) VALUES ('tom');MariaDB [db1]> INSERT t1(name) VALUES ('maria'); MariaDB [db1]> SELECT * FROM t1;+----+-------+| id | name  |+----+-------+|  1 | tom   ||  3 | maria |+----+-------+在master2上增加数据MariaDB [db1]> INSERT t1(name) VALUES ('jerry');MariaDB [db1]> INSERT t1(name) VALUES ('tony'); MariaDB [db1]> SELECT * FROM t1;+----+-------+| id | name  |+----+-------+|  1 | tom   ||  3 | maria ||  4 | jerry ||  6 | tony  |

            五、半同步复制的实现

            默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主服务器或从服务器端发生故障时,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失;半同步复制的机制是只有当主节点和从节点同步完成,仅有一台同步完成即可,返回写入完成,这样的机制保证了数据的安全性。

            MySQL复制的原理和作用是什么

            MySQL复制的原理和作用是什么

            1)主节点

            [root@master ~]# vim /etc/my.cnf[mysqld]log_binbinlog_format=ROWlog-basename=masterserver_id=1relay_log=relay-logrelay_log_index=relay-log.index[root@master ~]# systemctl restart mariadbMariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';MariaDB [(none)]> SHOW MASTER LOGS;+-------------------+-----------+| Log_name          | File_size |+-------------------+-----------+| master-bin.000001 |     26753 || master-bin.000002 |    921736 || master-bin.000003 |       401 |+-------------------+-----------+MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  #安装模块MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;  #开启半同步功能MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';+------------------------------------+-------+| Variable_name                      | Value |+------------------------------------+-------+| rpl_semi_sync_master_enabled       | ON    |  #已开启| rpl_semi_sync_master_timeout       | 10000 || rpl_semi_sync_master_trace_level   | 32    || rpl_semi_sync_master_wait_no_slave | ON    |+------------------------------------+-------+MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%';+--------------------------------------------+-------+| Variable_name                              | Value |+--------------------------------------------+-------+| Rpl_semi_sync_master_clients               | 0     || Rpl_semi_sync_master_net_avg_wait_time     | 0     || Rpl_semi_sync_master_net_wait_time         | 0     || Rpl_semi_sync_master_net_waits             | 0     || Rpl_semi_sync_master_no_times              | 0     || Rpl_semi_sync_master_no_tx                 | 0     || Rpl_semi_sync_master_status                | ON    || Rpl_semi_sync_master_timefunc_failures     | 0     || Rpl_semi_sync_master_tx_avg_wait_time      | 0     || Rpl_semi_sync_master_tx_wait_time          | 0     || Rpl_semi_sync_master_tx_waits              | 0     || Rpl_semi_sync_master_wait_pos_backtraverse | 0     || Rpl_semi_sync_master_wait_sessions         | 0     || Rpl_semi_sync_master_yes_tx                | 0     |+--------------------------------------------+-------+

            2)从节点1

            [root@slave1 ~]# vim /etc/my.cnf[mysqld]read_only=ONlog_binbinlog_format=ROWlog-basename=slaveserver_id=2relay_log=relay-logrelay_log_index=relay-log.index[root@slave1 ~]# systemctl restart mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.7',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='master-bin.000003',    -> MASTER_LOG_POS=401,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;MariaDB [(none)]> START SLAVE;MariaDB [(none)]> SHOW MASTER LOGS;+------------------+-----------+| Log_name         | File_size |+------------------+-----------+| slave-bin.000001 |     26753 || slave-bin.000002 |    921736 || slave-bin.000003 |       245 |+------------------+-----------+MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';

            3)从节点2

            [root@slave2 ~]# vim /etc/my.cnf[mysqld]read_only=ONserver_id=3relay_log=relay-logrelay_log_index=relay-log.index[root@slave2 ~]# systemctl restart mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.8',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='slave-bin.000003',    -> MASTER_LOG_POS=245,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> START SLAVE;

            4)从节点3

            [root@slave3 ~]# vim /etc/my.cnf[mysqld]read_only=ONserver_id=4relay_log=relay-logrelay_log_index=relay-log.index[root@slave3 ~]# systemctl restart mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.8',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='slave-bin.000003',    -> MASTER_LOG_POS=245,    -> MASTER_CONNECT_RETRY=10;MariaDB [(none)]> START SLAVE;

            六、加密传输复制的实现

            在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,外网里访问数据或则复制,存在安全隐患。通过SSL/TLS加密的方式进行复制的方法,来进一步提高数据的安全性

            主服务器开启SSL:[mysqld] 加一行ssl
            主服务器配置证书和私钥;并且创建一个要求必须使用SSL连接的复制账号
            从服务器使用CHANGER MASTER TO 命令时指明ssl相关选项

            MySQL复制的原理和作用是什么

            MariaDB [(none)]> SHOW VARIABLES LIKE '%ssl%';+---------------+----------+| Variable_name | Value    |+---------------+----------+| have_openssl  | DISABLED || have_ssl      | DISABLED || ssl_ca        |          || ssl_capath    |          || ssl_cert      |          || ssl_cipher    |          || ssl_key       |          |+---------------+----------+

            特别提示:在配置之前先检查mysql服务是否支持ssl功能,如果have_ssl的值为'DISABLED'则支持;如果为'NO'则不支持,需要再重新编译安装或者安装具有ssl功能的版本

            1)CA

            [root@CA ~]# mkdir /etc/my.cnf.d/ssl/[root@CA ~]# cd /etc/my.cnf.d/ssl/[root@CA ssl]# openssl genrsa 2048 > cakey.pem[root@CA ssl]# openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650 #自签证书    Country Name (2 letter code) [XX]:CN    State or Province Name (full name) []:beijing    Locality Name (eg, city) [Default City]:beijing    Organization Name (eg, company) [Default Company Ltd]:testmysqlca     Organizational Unit Name (eg, section) []:opt    Common Name (eg, your name or your server's hostname) []:ca.testmysqlca.com[root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr    Country Name (2 letter code) [XX]:CN    State or Province Name (full name) []:beijing    Locality Name (eg, city) [Default City]:beijing    Organization Name (eg, company) [Default Company Ltd]:testmysqlca    Organizational Unit Name (eg, section) []:opt    Common Name (eg, your name or your server's hostname) []:master.testmysqlca.com[root@CA ssl]# openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt #签署master证书[root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr    Country Name (2 letter code) [XX]:CN    State or Province Name (full name) []:beijing    Locality Name (eg, city) [Default City]:beijing    Organization Name (eg, company) [Default Company Ltd]:testmysqlca     Organizational Unit Name (eg, section) []:opt    Common Name (eg, your name or your server's hostname) []:slave.testmysqlca.com[root@CA ssl]# openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt #签署slave证书[root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave2.key > slave2.csrCountry Name (2 letter code) [XX]:CNState or Province Name (full name) []:beijingLocality Name (eg, city) [Default City]:beijinGorganization Name (eg, company) [Default Company Ltd]:testmysqlcaOrganizational Unit Name (eg, section) []:optCommon Name (eg, your name or your server's hostname) []:slave2.testmysqlca.com[root@CA ssl]# openssl x509 -req -in slave2.csr -CA cacert.pem -CAkey cakey.pem -set_serial 03 > slave2.crt #签署slave2证书[root@CA ssl]# openssl verify -CAfile cacert.pem master.crt slave.crt slave2.crt #检查证书是否可用master.crt: OKslave.crt: OKslave2.crt: OK先在各个节点上创建/etc/my.cnf.d/ssl/文件夹,将各自的证书,CA的证书和各自的秘钥文件复制过去[root@CA ssl]# scp cacert.pem master.crt master.key root@192.168.0.7:/etc/my.cnf.d/ssl/[root@CA ssl]# scp cacert.pem slave.crt slave.key root@192.168.0.8:/etc/my.cnf.d/ssl/ [root@CA ssl]# scp cacert.pem slave2.crt slave2.key root@192.168.0.9:/etc/my.cnf.d/ssl/

            2)master

            [root@master ~]# mkdir /etc/my.cnf.d/ssl/[root@master ~]# vim /etc/my.cnf[mysqld]log_binbinlog_format=ROWlog-basename=masterserver_id=1ssl #开启ssl功能ssl-ca=/etc/my.cnf.d/ssl/cacert.pem #指定CA证书的路径ssl-cert=/etc/my.cnf.d/ssl/master.crt #指定自己的证书的路径ssl-key=/etc/my.cnf.d/ssl/master.key #指定自己的秘钥文件路径[root@master ~]# systemctl restart mariadbMariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass' REQUIRE SSL; #授权用户并且强制迫使用户开启ssl登录MariaDB [(none)]> SHOW MASTER LOGS;+-------------------+-----------+| Log_name          | File_size |+-------------------+-----------+| master-bin.000001 |     26753 || master-bin.000002 |    921736 || master-bin.000003 |       413 |+-------------------+-----------+

            3)slave1

            [root@slave1 ~]# mkdir /etc/my.cnf.d/ssl/[root@slave1 ~]# mysql -urepluser -preplpass -h292.168.0.7 --ssl-ca=/etc/my.cnf.d/ssl/cacert.pem --ssl-cert=/etc/my.cnf.d/ssl/slave.crt --ssl-key=/etc/my.cnf.d/ssl/slave.key[root@slave1 ~]# vim /etc/my.cnf[mysqld]read_only=ONserver_id=2relay_log=relay-logrelay_log_index=relay-log.indexsslssl-ca=/etc/my.cnf.d/ssl/cacert.pemssl-cert=/etc/my.cnf.d/ssl/slave.crtssl-key=/etc/my.cnf.d/ssl/slave.key[root@slave1 ~]# systemctl restart mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.7',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='master-bin.000003',    -> MASTER_LOG_POS=413,    -> MASTER_CONNECT_RETRY=10,    -> MASTER_SSL=1;  #注意,需要指明开启ssl链接MariaDB [(none)]> START SLAVE;

            4)slave2

            [root@slave2 ~]# mkdir /etc/my.cnf.d/ssl/[root@slave2 ~]# mysql -urepluser -preplpass -h292.168.0.7 --ssl-ca=/etc/my.cnf.d/ssl/cacert.pem --ssl-cert=/etc/my.cnf.d/ssl/slave2.crt --ssl-key=/etc/my.cnf.d/ssl/slave2.key[root@slave2 ~]# vim /etc/my.cnf[mysqld]read_only=ONserver_id=3relay_log=relay-logrelay_log_index=relay-log.indexsslssl-ca=/etc/my.cnf.d/ssl/cacert.pemssl-cert=/etc/my.cnf.d/ssl/slave2.crtssl-key=/etc/my.cnf.d/ssl/slave2.key[root@slave2 ~]# systemctl restart mariadbMariaDB [(none)]> CHANGE MASTER TO    -> MASTER_HOST='192.168.0.7',    -> MASTER_USER='repluser',    -> MASTER_PASSWORD='replpass',    -> MASTER_PORT=3306,    -> MASTER_LOG_FILE='master-bin.000003',    -> MASTER_LOG_POS=413,    -> MASTER_CONNECT_RETRY=10,    -> MASTER_SSL=1;MariaDB [(none)]> START SLAVE;

            七、MySQL复制的相关指令和变量总结

            选项:

            • log_bin 启用二进制日志,在主节点或级联复制中间的从节点必须要开启

            • binlog_format=ROW 二进制日志记录方式为基于行的方式记录,强烈建议开启

            • log-basename=master | slave ... 二进制日志的前缀名,不是必须向,但建议标识

            • server_id = # 服务器ID,各个节点的ID必须唯一

            • relay_log = relay-log 开启中继日志,并以relay-log为文件名开头,从节点开启

            • relay_log_index = relay-log.index 中继日志索引文件

            • log_slave_updates 作用是SQL线程重读中继日志时将改变数据的操作记录为二进制日志,在级联复制中使用

            • ssl 开启ssl功能

              • ssl-ca=/etc/my.cnf.d/ssl/cacert.pem

              • ssl-cert=/etc/my.cnf.d/ssl/master.crt

              • ssl-key=/etc/my.cnf.d/ssl/master.key

            • sync_binlog=1 每次写后立即同步二进制日志到磁盘

              • innodb_flush_log_at_trx_commit=1 每次事务提交立即同步日志写磁盘

              • sync_master_info=# #次事件后master.info同步到磁盘

            • skip_slave_start=ON 不自动启动slave

            • sync_relay_log=# #次写后同步relay log到磁盘

            • sync_relay_log_info=# #次事务后同步relay-log.info到磁盘

            • auto_increment_offset=1 自动增长开始点,在主主复制中使用

            变量:

            • replicate_do_db=        指定复制库的白名单

            • replicate_ignore_db=      指定复制库黑名单

            • replicate_do_table=        指定复制表的白名单

            • replicate_ignore_table=      指定复制表的黑名单

            • replicate_wild_do_table= foo%.bar%    支持通配符

            • replicate_wild_ignore_table=  指定复制的表,黑名单

            • rpl_semi_sync_slave_enabled=1  开启半同步复制,需要安装模块

            指令:

            • START SLAVE; 启动主从复制

            • STOP SLAVE; 停止复制

            • SHOW SLAVE STATUS; 查看复制状态

              • Seconds_Behind_Master: 0 从服务器是否落后于主服务

            • RESET SLAVE ALL; 重置从服务器的配置

            • MASTER_SSL=1, 配合 CHANGE MASTER TO 使用,开启ssl加密复制

              • MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',

              • MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',

              • MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';

            • PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr } 删除二进制日志,谨慎操作

            • SHOW MASTER STATUS 查看二进制日志状态

            • SHOW BINLOG EVENTS 查看二进制日志

            • SHOW BINARY LOGS 查看二进制日志

            到此,相信大家对“MySQL复制的原理和作用是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

            您可能感兴趣的文档:

            --结束END--

            本文标题: MySQL复制的原理和作用是什么

            本文链接: https://www.lsjlt.com/news/296993.html(转载时请注明来源链接)

            有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

            本篇文章演示代码以及资料文档资料下载

            下载Word文档到电脑,方便收藏和打印~

            下载Word文档
            猜你喜欢
            • MySQL复制的原理和作用是什么
              本篇内容主要讲解“MySQL复制的原理和作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL复制的原理和作用是什么”吧!目录一、MySQL复制相关概念二、简单的一主一从架构实现新数...
              99+
              2023-06-20
            • MySQL复制的工作原理是什么
              今天就跟大家聊聊有关MySQL复制的工作原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 MySQL复制的工作...
              99+
              2024-04-02
            • mysql复制的原理是什么
              今天就跟大家聊聊有关mysql复制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1 复制概述   &nbs...
              99+
              2024-04-02
            • mysql组复制的原理是什么
              MySQL组复制是一种MySQL数据库服务器集群技术,它允许多个MySQL数据库服务器之间共享相同的数据,并保持数据的一致性。组复制...
              99+
              2024-03-13
              mysql
            • MySQL中复制机制的原理是什么
              MySQL中复制机制的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。背景介绍复制,就是对数据的完整拷贝,说到为什么要...
              99+
              2024-04-02
            • MySQL的主从复制原理是什么
              这篇“MySQL的主从复制原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL的主从复制原理是什么”文章吧。前...
              99+
              2023-07-02
            • mysql主从复制的原理是什么
              mysql主从复制的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、说明主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据...
              99+
              2023-06-15
            • MySQL中主从复制的原理是什么
              MySQL中主从复制的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。0. 主从复制首先主从复制是什么简单来说是让一台MySQL服务器...
              99+
              2024-04-02
            • MySql中主从复制机制的原理是什么
              今天就跟大家聊聊有关MySql中主从复制机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。主从复制机制MySQL基于binlog实现主从复制,从节点跟踪并获取主节点bin...
              99+
              2023-06-14
            • Mysql主从复制作用和工作原理详解
              一、什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。在最常用的mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服...
              99+
              2024-04-02
            • MySQL主从复制的原理和注意事项是什么
              这篇文章主要介绍了MySQL主从复制的原理和注意事项是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。主从复制原理(1) Master 将数据...
              99+
              2024-04-02
            • MySQL主从复制的底层原理是什么
              这篇文章给大家介绍MySQL主从复制的底层原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。主从复制原理(1) Master 将数据改变记录到二进制日志(binary log)中...
              99+
              2024-04-02
            • MySQL主从架构的复制原理是什么
              MySQL主从架构的复制原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 复制概述Mysql内建的复制功能是构建大型,高性能...
              99+
              2024-04-02
            • mysql主从复制的作用是什么
              MySQL主从复制的作用是实现数据的备份和读写分离。通过主从复制,将主数据库的数据同步复制到从数据库,从而实现数据的备份,提高数据的...
              99+
              2024-04-09
              mysql
            • mysql主从复制的工作原理
              这篇文章给大家分享的是有关mysql主从复制的工作原理的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql主从复制原理:首先主库发送更新事件到从库;然后从库读取更新记录,并执...
              99+
              2024-04-02
            • mysql主从复制的原理有什么
              mysql主从复制的原理有什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、说明mysql数据库提供了主从备份机制,实际上是将主数据库的所有数据同时写入备份...
              99+
              2023-06-15
            • nginx作用和工作原理是什么
              nginx是一种高性能的开源Web服务器和反向代理服务器。它可以用于处理静态和动态的HTTP、HTTPS、SMTP、POP3和IMA...
              99+
              2023-10-07
              nginx
            • MySQL锁机制原理是什么
              这篇文章主要介绍“MySQL锁机制原理是什么”,在日常操作中,相信很多人在MySQL锁机制原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL锁机制原理是什么”...
              99+
              2024-04-02
            • kafka主从复制的原理是什么
              Kafka的主从复制是通过Leader-Replica模式实现的。主要原理如下: Kafka集群中的每个主题分区都有一个Leade...
              99+
              2023-10-27
              kafka
            • mongodb主从复制的原理是什么
              MongoDB的主从复制是一种数据复制机制,它允许将数据从一个主节点复制到一个或多个从节点。主从复制的原理如下: 主节点(Prim...
              99+
              2024-04-09
              mongodb
            软考高级职称资格查询
            编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
            • 官方手机版

            • 微信公众号

            • 商务合作