docker中mysql主从同步配置并用sharding实现读写分离

本文介绍了如何在Docker环境下配置MySQL主从同步,包括启动两个MySQL容器、修改配置文件、设置主从同步。接着,通过Sharding结合Spring Boot实现读写分离,详细说明了引入依赖、配置YML文件和配置类的过程。测试验证了读取成功及主从数据库数据同步。
摘要由CSDN通过智能技术生成

1.首先在docker启动两个mysql容器

docker run -p 3306:3306 --name mysql-master 
-v /data/mysql/master/log:/var/log/mysql
-v /data/mysql/master/data:/var/lib/mysql 
-v /data/mysql/master/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p 3307:3306 --name mysql-slaver 
-v /data/mysql/slaver/log:/var/log/mysql
-v /data/mysql/slaver/data:/var/lib/mysql 
-v /data/mysql/slaver/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

分别开启3306和3307端口,并将mysql的日志,配置文件等挂载到自己新建的目录下,方便查看和修改。

2. 修改mysql配置文件

在刚才新建的 /data/mysql/master/conf和/data/mysql/slaver/cnf目录下创建my.cnf文件

[mysqld]
server_id=1    #数据库服务唯一标识
log-bin=mysql-bin
read-only=0       #不读
binlog-do-db=***  #同步的数据库
 
#忽略mysql初始的数据库
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

[mysqld]
server_id=2
log-bin=mysql-bin   #数据库服务唯一标识
read-only=1        #只读
binlog-do-db=***   #同步的数据库

#忽略mysql初始的数据库
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

配置完成后重启数据库。

3. 配置主从同步

  1. 进入主库
docker exec -it mysql-master /bin/bash
  1. 登录
mysql -uroot -proot
  1. 创建用于从服务器同步数据使用的帐号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by '123456';

FLUSH PRIVILEGES;
  1. 获取主服务器的二进制日志信息
show master status


5. 进入从库

docker exec -it mysql-slaver /bin/bash
  1. 登录
mysql -uroot -p
  1. 设置主库连接

填好自己的数据库host和port

change master to master_host='192.168.0.1', master_port=3306,master_user='slave', master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=0;
  1. 启动从库同步
start slave;
  1. 查看从库状态
show slave status \G 

只要Slave_IO_Running和Slave_IO_Running为yes即成功
在这里插入图片描述

最后,只要在主库增删改数据,从库就会自动读取主库并更新到自己的数据库里。

4.使用sharding结合springboot实现读写分离

数据库虽然配好了,但是还需要通过代码去实现读写分离。实现的方式可以用MyCat数据库中间件,但因为太重量级了,而且配置复杂,所以选用了较轻量但功能齐全的sharding。

  1. 首先在maven引入依赖

这里使用了2.x.x版本
不同版本配置不同,详细内容见官网

        <dependency>
            <groupId>io.shardingjdbc</groupId>
            <artifactId>sharding-jdbc-core</artifactId>
            <version>2.0.3</version>
        </dependency>
  1. 使用简单的yml配置

在resources下创建sharding.yml文件

dataSources:
  db_master: !!com.zaxxer.hikari.HikariDataSource   #数据源
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://192.168.0.1:3306/db
    username: root
    password: root
  db_slave: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://192.168.0.1:3307/db
    username: root
    password: root
masterSlaveRule:  #配置主从
  name: ms_rule
  masterDataSourceName: db_master # 主库数据源名称
  slaveDataSourceNames: [db_slave]   #可写多个从库 用逗号隔开
  1. 用配置类读取yml文件
@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() throws IOException, SQLException {
        File file = ResourceUtils.getFile("classpath:sharding.yml");
        DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(file);
        return dataSource;
    }

}

大功告成,最后测试一下是否读取成功和主从数据库的数据是否同步即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值