zoukankan      html  css  js  c++  java
  • Mysql主从复制

    扩展方式: Scale UP, Scale Out

    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日志的对应关系

    主从复制特点:

      异步复制

      主从数据不一致比较常见

    复制架构:

      Master/Slave , Master/Master, 环状复制 ,一主多从

      从服务器还可以在有从服务器

      一丛多主,适用于多个不同数据库

    复制需要考虑二进制时间记录格式

      STATEMENT(5.0之前) ROW(5.1之后,推荐), MIXED

    各种复制模型实战:

      主从,主主,半同步复制, 复制过滤器

     主从配置过程参考文档:

      https://mariadb.com/kb/en/library/setting-up-replication/

      https://dev.mysql.com/doc/refman/5.5/en/replication-configuration.html

      主节点:

        1) [mysqld]

           log_bin=mysql-bin

        2) 当前节点设置一个全局唯一的ID号

          [mysqld]

          server_id=#

        3) 创建由复制全向的用户账号

          GRANT REPLCATION SLAVE ON *.* TO 'repluser'@HOST IDENTIFIED BY 'password';

    从节点配置:
      1)启动中继日志
        [mysqld]
          server_id=# 为当前节点设置一个全局惟的ID号
          relay_log=relay-log relay log的文件路径,默认值hostname-relay-bin
          relay_log_index=relay-log.index默认值hostname-relay-bin.index
           2)使用有复制权限的用户账号连接至主服务器,并启动复制线程

    mysgl> CHANGE MASTER TO MASTER_HOST='host',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='mysql-binxxxxx',MASTER_LOG_POS=#;
    mysgl> START SLAVE [IO_THREAD|SQL_THREAD];
    

    实战操作

    1. Master 配置

      1) 修改配置文件

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    innodb_file_per_table
    log_bin
    server_id=1
    

      2) 创建测试数据库(可选),创建复制用户

    # 查看 要复制的log日志size 点

    MariaDB [(none)]> show binary logs;
    +--------------------+-----------+
    | Log_name | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 | 245 |
    +--------------------+-----------+

    # 创建数据库测试文件
    MariaDB [(none)]> create database test;
    Query OK, 1 row affected (0.00 sec)
    MariaDB [(none)]> use test
    MariaDB [test]> create table students(id int auto_increment primary key,name varchar(30) not NULL UNIQUE key ,gender char(1) DEFAULT'm');
    Query OK, 0 rows affected (0.36 sec)
    MariaDB [test]> insert into students (name) values ('Zhang San'),('Li Si');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    MariaDB [test]> insert into students (name) values ('Wang Wu'),('Zhao Liu');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    # 查看 bin log日志
    
    MariaDB [test]> show binary logs;
    +--------------------+-----------+
    | Log_name           | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 |      1841 |
    +--------------------+-----------+
    1 row in set (0.00 sec)
    
    # 创建复制用户
    MariaDB [test]> grant replication slave on *.* to repluser@'192.168.10.%' identified by '123456';
    Query OK, 0 rows affected (0.00 sec)
    

    从服务器配置

      1) 配置数据库文件

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    innodb_file_per_table
    server_id=2
    

      2) 

    MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.16.0.40',MASTER_USER='alave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mariadb-bin.000001',MASTER_LOG_POS=245;
    Query OK, 0 rows affected (0.00 sec)
    

      3) 启动同步线程

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

      

      4) 查看从服务器状态

    MariaDB [(none)]> show slave statusG
    

      

    检查,查看日志信息

    # 主服务器执行
    MariaDB [test]> show binary logs;
    +--------------------+-----------+
    | Log_name           | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 |      2155 |
    +--------------------+-----------+
    # 从服务器执行
    MariaDB [(none)]> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.16.0.40
              Read_Master_Log_Pos: 2155
     Seconds_Behind_Master: 0  #主从同步的时间差

      

  • 相关阅读:
    [BZOJ3510][洛谷P4299]首都(LCT)
    [luogu P5325][模板]Min_25筛
    [洛谷P3288][SCOI2014][BZOJ3597]方伯伯运椰子(网络流+图论)
    [洛谷P5342][TJOI2019]甲苯先生的线段树(数位dp)
    [CQOI2012][洛谷P3159][BZOJ2668]交换棋子(网络流+图论)
    [SDOI2015]约数个数和(莫比乌斯反演)
    使用Visual Studio 2005扩展创建Windows SharePoint Services 3.0 Web Part
    C#操作xml文件
    实用JS代码
    ASP.NET分页存储过程自定义用户控件(转)
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/10453708.html
Copyright © 2011-2022 走看看