• Mysql主从复制,读写分离


    当客户端操作主库时,主库会产生binlog日志文件
    从库通过复制主库的binlog日志文件,然后解析成相应的 SQL 语句在从库执行,实现主从一致的效果。
    在主库做的增删改都会影响到从库,实现主从同步。

    PreCondition

    有两台服务器,并且都装有mysql

    配置主库Master

    # /etc/my.cnf
    [mysqld]
    log-bin=mysql-bin		# 启用二进制日志
    server-id=1000			# 唯一ID
    
    • 1
    • 2
    • 3
    • 4

    重启mysql服务

    # replication slave 允许用户使用复制从站从主机读取二进制日志事件
    # *.* 表示所有数据库中的所有表
    # 在mysql数据库中的user表中 新增了一个用户xiaoming,IP任意 密码是 root
    # 对用户 xiaoming 进行授权 
    grant replication slave on *.* to 'xiaoming'@'%' identified by 'root';
    
    # 查看 master 的状态
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      446 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    配置从库Slave

    # /etc/my.cnf
    [mysqld]
    server-id=1001		# 唯一ID
    
    • 1
    • 2
    • 3

    重启mysql服务

    change master to master_host='主库服务器IP地址',master_user='xiaoming',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=446;
    
    start slave;
    
    # 查看从库状态
    show slave status \G
    
    # 看到这些信息基本就说明成功了
           Slave_IO_State: Waiting for master to send event
              Master_Host: 10.34.110.47
              Master_User: xiaoming
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: mysql-bin.000001
      Read_Master_Log_Pos: 446
           Relay_Log_File: localhost-relay-bin.000002
            Relay_Log_Pos: 320
    Relay_Master_Log_File: mysql-bin.000001
         Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    读写分离

    先搭建好两个mysql之间的主从复制关系。
    如果主库中之前已经有数据库数据了,先将主库中的数据库转储为 SQL文件,然后在从库中建同名数据库,之后执行SQL文件。
    这样,主从库的环境就一致了。

            
            <dependency>
                <groupId>org.apache.shardingspheregroupId>
                <artifactId>sharding-jdbc-spring-boot-starterartifactId>
                <version>4.1.1version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    spring:
      shardingsphere:
        datasource:
          names: db1,db2
          # 数据源 1
          db1:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://localhost:3306/ruiji?useSSL=false&serverTimezone=Asia/Shanghai
            username: root
            password:
            type: com.alibaba.druid.pool.DruidDataSource
          # 数据源 2
          db2:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://192.168.44.128:3306/ruiji?useSSL=false&serverTimezone=Asia/Shanghai
            username: root
            password: xxxxxxxx
            type: com.alibaba.druid.pool.DruidDataSource
        masterslave:
          load-balance-algorithm-type: round_robin  # 从库负载均衡策略
          master-data-source-name: db1    # 主库
          slave-data-source-names: db2    # 从库
          name: ruiji   # 不可为空,任意取即可
        props:
          sql:
            show: true # 终端 SQL日志
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    如何取消主从复制

    对从库:

    stop slave;
    reset slave all;		# 清除 slave 信息
    show slave status \G
    
    • 1
    • 2
    • 3

    对主库:

    reset master;
    
    • 1

    如果想彻底清除主从的机制,可以将配置文件中主从相关的配置项删除,然后重启即可。
    MySQL用户授权(GRANT)
    Mysql取消主从复制

  • 相关阅读:
    模块一、任务一.数据分析概述
    .jar包问题该怎么解决?
    Git 分支管理规范
    OPC Expert 最新版 Crack-2022-12-05
    iptables详解和使用
    Docker学习总结
    Java-Day14 异常和异常处理
    [PAT练级笔记] 35 Basic Level 1035 插入与归并
    如何评估需求优先级?
    龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍
  • 原文地址:https://blog.csdn.net/qq_53318060/article/details/125870498