SpringBoot+Sharding-JDBC+读写分离
一、搭建docker+mysql主从复制
本文采用的是windows上进行安装的docker,mysql使用的是5.6版本
1.1 分别创建主从对应的mysql配置文件
1.1.1 主mysql
D:\DockerWorkspace\mysql\3307\con\mysql.cnf
[mysqld]
user=mysql
log-bin=mysql-bin
server-id=1
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
1.1.2 从mysql
D:\DockerWorkspace\mysql\3308\conf\mysql.cnf
[mysqld]
user=mysql
server-id=2
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
1.2 创建docker容器与容器之间的网络
以创建一个新的Bridge网络实现两个容器之间的互相通信 参考博客:Docker网络——实现容器间通信、容器与外网通信以及容器的跨主机访问
docker network create mysql
1.3 docker安装mysql
创建主mysql,配置详情
-- name 给创建的容器取别名 -p 端口映射 -e 指定容器内的环境变量 -v 挂载宿主机指定的文件,这里挂载的是宿主机的mysql配置 --network 创建容器时使用Bridge网络 参考博客:Docker network整理 --network-alias 设置网络别名 -d 默认不会进入容器,容器后台运行
1.2.1 主mysql
docker run --name mysql-3307 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v D:\DockerWorkspace\mysql\3307\conf\mysql.cnf:/etc/mysql/conf.d/mysql.cnf --network mysql --network-alias mysql-master -d mysql:5.6
1.2.2 从mysql
docker run --name mysql-3308 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v D:\DockerWorkspace\mysql\3308\conf\mysql.cnf:/etc/mysql/conf.d/mysql.cnf --network mysql --network-alias mysql-slave -d mysql:5.6
此时,两个mysql的服务已经启动了 可以通过命令
docker ps -a
看到正在运行的容器,如果是windows版本可以直接在面板看到
1.4 进入mysql容器进行配置
1.4.1 主mysql
docker exec -it e8c6 /bin/bash
在容器中 连接mysql数据库 ,密码根据安装mysql的时候进行对应修改
mysql -h127.0.0.1 -uroot -p123456
授予 从mysql 复制权限
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
刷新权限
flush privileges;
查看主服务器状态
show master status;
此时不要关闭窗口,需要记住 File
列对应的名字,以及 Position
对应的数字,这两个值在 从mysql 中进行同步的时候需要用到
1.4.2 从mysql
新起一个dos窗口,进入容器
docker exec -it a8aa /bin/bash
连接mysql数 据库
mysql -h127.0.0.1 -uroot -p123456
配置同步数据
- master_host 主mysql名字,可填ip
- master_user 连接主mysql用户
- master_password 连接密码
- master_log_file 也就是在主mysql上使用show master status;获取到的File的值
- master_log_pos 从主mysql上哪个位置开始进行同步数据,如果填0,那么意味着从新开始同步,填在主mysql上使用show master status;获取到的Position的值意味着从当前位置进行同步
执行
change master to master_host='mysql-master',master_user='root',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=502,master_port=3306;
启动slave 也就是开启同步
start slave;
查看slave状态
show slave status\G;
当两个都处于YES的时候,意味着配置成功了
此时当你在主mysql进行怎样的操作都会同步到从数据库
二、 搭建Sharding-JDBC读写分离
官方参考文档:SHARDING-JDBC