阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL主从复制架构及实现

155次阅读
没有评论

共计 7995 个字符,预计需要花费 20 分钟才能阅读完成。

MySQL 主从复制架构及实现

1、原理:

复制功能及作用:

数据分布
负载均衡:进行读操作的负载均衡,适用于读密集型的应用
可以用于备份
高可用和故障切换
MySQL 的升级测试

主从复制:

从服务器:IO 线程:从 master 请求二进制日志信息,并保存至中继日志;SQL 线程:从 relay log 中读取日志信息,在本地完成重放;主节点:dump Thread:为每个 Slave 的 I /O Thread 启动一个 dump 线程,用于向其发送 binary log events;特点:异步模式:async
        1、从服务器落后于主服务器
        2、主从数据不一致现象比较常见

复制架构:M/ S 主从,M/ M 主主,环状复制

    一主多从:从服务器还可以再有从服务器

二进制日志的事件记录格式:SET datetime = now()
    1、基于行 ROW
    2、基于语句  STATEMENT
    3、混合    MIXED

2、配置过程:

主从

master
    (1)启动二进制日志;[mysqld]配置文件中添加
        log-bin=master-bin
    (2)设置一个当前群集中唯一的 server-id;
        [mysqld]配置文件中添加
        server_id=#
    (3)创建一个有复制权限的账号(REPLICATION SLAVE,REPLICATION CLIENT);
        GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';
    进程:binlog dump

slave
    (1)启用中继日志;[mysqld]配置文件中添加
        relay_log=relay-log
        relay_log_index=relay-log.index
    (2)设置一个在当前集群中的唯一的 server-id;[mysqld]配置文件中添加
        server_id=#
    (3)使用有复制权限用户账号连接至主服务器,并启动复制线程;进程:IO thread,SQL thread

实验:架构  主服务器地址 192.168.150.137   从服务器地址 192.168.159.138
两台 mariadb 均通过 yum 安装,版本相同 mariadb-5.5.52-1.el7.x86_64

主节点 
1、修改配置文档,添加参数
vim /etc/my.cnf
在 [mysqld] 中添加如下几行
log-bin=master-bin
server-id=1
innodb_file_per_table=ON
skip_name_resolve=ON

2、开启数据库,查看状态信息
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%log%';
log_bin                                   | ON 
MariaDB [(none)]> SHOW MASTER LOGS;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-bin.000001 |     30379 |
| master-bin.000002 |   1038814 |
| master-bin.000003 |       245 |
+-------------------+-----------+
3 rows in set (0.00 sec)

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%server%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| character_set_server | latin1            |
| collation_server     | latin1_swedish_ci |
| server_id            | 1                 |
+----------------------+-------------------+
3 rows in set (0.00 sec)    

3、授权账号
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser' @ 192.168.%.%'IDENTIFIED BY'replpass';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

从节点
1、修改配置文档,添加参数
vim /etc/my.cnf
在 [mysqld] 中添加如下几行
relay-log=relay-log
relay-log-index=relay-log.index
server-id=2
innodb_file_per_table=ON
skip_name_resolve=ON
2、开启数据库,查看状态
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%log%';
| relay_log                                 | relay-log                                   
                                                             || relay_log_index                           | relay-log.index       
3、从节点指定主节点,要注意 bin 日志和 position,信息来自于主节点 SHOW MASTER LOGS
CHANGE MASTER TO MASTER_HOST='192.168.150.137',MASTER_USER='repluser',MA
STER_PASSWORD='replpass',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=245;

4、通过目录查看从节点状态,此时 bin log 已指定完成,Slave_IO_Running 和 Slave_SQL_Running 进程还没有开启
MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.150.137
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000003
          Read_Master_Log_Pos: 245
               Relay_Log_File: relay-log.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-bin.000003
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 245
              Relay_Log_Space: 245
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 0
1 row in set (0.00 sec)

5、开启 SLAVE 进程, 此时 IO 进程和 SQL 进程均为 YES 状态
MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.150.137
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000003
          Read_Master_Log_Pos: 497
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 782
        Relay_Master_Log_File: master-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 497
              Relay_Log_Space: 1070
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)


功能验证:主节点进行测试库创建
MariaDB [(none)]> CREATE DATABASE mydb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> SHOW MASTER LOGS;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-bin.000001 |     30379 |
| master-bin.000002 |   1038814 |
| master-bin.000003 |       580 |
+-------------------+-----------+
3 rows in set (0.00 sec)

从库进行同步验证:mydb 库已经过来,状态信息中 bin log 也应用过来了
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

[(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.150.137
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000003
          Read_Master_Log_Pos: 580
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 865
        Relay_Master_Log_File: master-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 580
              Relay_Log_Space: 1153
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)

另:从库的数据文件夹中会记录一些信息,master.info 会记录我连的主库的地址,bin log 信息等
[root@localhost ~]# ls /var/lib/mysql/
aria_log.00000001  ib_logfile0  mydb        performance_schema  relay-log.index
aria_log_control   ib_logfile1  mysql       relay-log.000001    relay-log.info
ibdata1            master.info  mysql.sock  relay-log.000002    test
[root@localhost ~]# cd /var/lib/mysql/
[root@localhost mysql]# file master.info 
master.info: ASCII text
[root@localhost mysql]# cat master.info 
18
master-bin.000003
581
192.168.150.137
repluser
replpass
3306
60
0

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142565.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计7995字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中