栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Mysql主从复制

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql主从复制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 一、原理
  • 二、使用步骤
    • 1.前提条件,准备两个安装了mysql的服务器
    • 2.实现---操作主库 master
    • 3.实现---操作从库 slave
  • 三、实现读写分离


一、原理

  1. 想要实现mysql主从复制,至少需要两个mysql服务。
    主库master: 用来增删改
    从库slave: 用来读取数据
  2. 当主库有增删改的操作时,会将变化记录写入二进制日志binlog
  3. 从库有个两个线程,其中IO线程会将二进制日志binlog文件读取到,并写入中继日志Relaylog
  4. 从库的另一个线程SQL线程,会解析中继日志Relaylog日志文件,如果发现有变化,会将数据同步到从库

二、使用步骤 1.前提条件,准备两个安装了mysql的服务器

前提:在这开启了两个虚拟机,虚拟机内使用dockers安装了mysql

主库Master :192.168.66.132
从库Slave : 192.168.66.133

2.实现—操作主库 master
  1. 在安装,mysql的时候,将mysql的配置挂载到了【/soft/mysql/conf】,并创建了 【my.cnf】配置文件。docker安装mysq

  2. 在【/soft/mysql/conf/my.cn】配置文件中启用主库master的二进制日志,并设置唯一的服务器名

[mysqld]
log-bin=/var/lib/mysql/mysql-bin
server-id=128
expire_logs_days=30

  1. 修改玩配置文件后,重启Mysql服务
docker restart 容器id

  1. 登录主库mysql,创建用户。

从库slave向主库读取二进制日志binlog时,必须携带由主库向从库分配的用户,此时我们需要登录mysql,分配用户

//进入mysql容器
docker exec -it 容器名/容器id /bin/bash
//登录mysql  
mysql -u root -p


5. 执行命令,确认之日已经开启

show variables like '%log_bin%';


6. 创建用户并给用户授予REPLICATION SLAVE权限

GRANT REPLICATION SLAVE ON *.* to '用户名'@'%' identified by '密码';


7. 查看数据库状态,

查看之后,最好不要对数据库做操作,因为File和Position的值可能会发生变化,后续在从库中我们会使用到这两个值,如果发生变化,可能会导致关联失败

show master status;

3.实现—操作从库 slave
  1. 在安装,mysql的时候,将mysql的配置挂载到了【/soft/mysql/conf】,并创建了 【my.cnf】配置文件。docker安装mysq

  2. 在【/soft/mysql/conf/my.cn】配置文件中设置从库 slave的服务器名,保证唯一

[mysqld]
server-id=168
expire_logs_days=30
  1. 修改玩配置文件后,重启Mysql服务
docker restart 容器id
  1. 登录从库mysql 执行下面的语句
change master to master_host='主库master的IP',master_user='在主库master中创建的那个用户名',master_password='在主库master中创建的那个用户的密码',master_log_file='主库master查询状态中的file属性值',master_log_pos=主库master查询状态中的Position属性值;
//
start slave;


5. 这就完成了主从复制,查看状态

show slave statusG


常用命令:`

stop slave;
reset master;
三、实现读写分离

我们在Java代码中要实现读写分离,是需要依赖Sharding-JDBC框架来实现读写分离的,不需要改代码,只需要更改一下配置,通过以下两步即可:

  1. 导入maven坐标

org.apache.shardingsphere
sharding-jdbc-spring-boot-starter
4.0.0-RC1

  1. 在配置文件中配置读写分离规则
spring:
  shardingsphere:
    datasource:
      names:
      # 定义数据源名字, 多个使用逗号隔开, 可以随便取名字,与下面对应上即可
        master,slave
      # 定义master为主库,用来做增删改  master名字可以随便取,与上面对应即可
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.XX.XX:3306/DB_NAME?characterEncoding=utf-8
        username: root
        password: 123456
      # 定义slave为从库库,用来做查询  slave名字可以随便取,与上面对应即可
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.XX.XX:3306/DB_NAME?characterEncoding=utf-8
        username: root
        password: 123456
    masterslave:
      # 读写分离配置,采用轮询方式
      load-balance-algorithm-type: round_robin
      # 最终的数据源名称
      name: dataSource
      # 指定主库数据源名称    master为上面定义的名字
      master-data-source-name: master
      # 指定从库数据源名称列表,slave为上面定义的名字  配置多个从库以逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
   # 默认dataSource Bean覆盖 因为Sharding-JDBC框架会创建一个数据源  而连接池也会创建数据源, 所以导致数据源冲突
    allow-bean-definition-overriding: true
  1. 这样在程序中就已经完成了 mysql数据库的读写分离,在我们操作数据库做CRUD操作时,会由Sharding-JDBC框架帮助我们区分该操作那个数据库。下面启动日志中可以看出,创建了两个数据源
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940708.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号