# 读写分离 **Repository Path**: absongyu/spring-boot-sharding-jdbc ## Basic Information - **Project Name**: 读写分离 - **Description**: 数据库一主二从,sharding-jdbc实现读写分离 - **Primary Language**: Unknown - **License**: Unlicense - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-08-11 - **Last Updated**: 2024-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: sharding-jdbc-master-slave, Java ## README # 读写分离 #### 介绍 数据库一主二从,sharding-jdbc实现读写分离 #### 软件架构 软件架构说明 springBoot+sharding-jdbc+jdk1.8+mysql(1主2从) #### 使用说明 1. 本地安装虚拟机,docker 2. 在一台虚拟机模拟MySQL主从复制功能 3. 修改数据库相关配置 #### mysql主从复制配置 自行安装虚拟机,安装docker,本次使用Ubuntu系统 1. 拉取mysql镜像 docker pull mysql:5.7.27 2. 查看镜像:docker images 3. 启动镜像 先启动mysql01容器:(即之后的主机master) docker run -d -p 3310:3306 -v /home/mysql/node-1/config:/etc/mysql/ -v/home/mysql/node-1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7.27 再启动mysql02容器:(即之后的从机) docker run -d -p 3311:3306 -v /home/mysql/node-2/config:/etc/mysql/ -v/home/mysql/node-2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7.27 命令解释: -d: 后台运行容器,并返回容器ID -p 3311:3306 :将容器的3306端口映射到宿主机3310端口 -e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码 -v /home/mysql/node-2/config:/etc/mysql/ :将配置文件夹挂载到宿主机 –name mysql01(02):将容器命名为 mysql01(02) 4. 查看全部容器 docker ps -a 5. 使用Navicat来进行测试 这里不做演示 6. 编写主从复制配置文件 之前我们启动的时候写了这句-v /home/mysql/node-1/config:/etc/mysql/,将mysql 的配置文件夹和宿主机的文件夹挂载起来的。 那么我们就可以直接在宿主机下的/home/mysql/node-1/config/编写配置文件了。 cd /home/mysql/node-1/config/ vim my.cnf insert 以下内容 [mysqld] #修改配置文件:vim /etc/my.cnf #主服务器唯一ID server-id=1 #启用二进制日志 log-bin=mysql-bin #设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql binlog-ignore-db=information_schema #设置需要复制的数据库 需要复制的主数据库名字 binlog-do-db=testdb #设置logbin格式 binlog_format=STATEMENT 退出 先按Esc键–>再按Shift+:键–>输入wq–保存退出。 7. 编写从机配置文件 从机上的my.cnf也是同样的方式 插入以下内容 [mysqld] #从服务器唯一ID server-id=2 #启用中继日志 relay-log=mysql-relay 8. 重启服务 docker restart mysql01 mysql02 9. 搭建主从复制 主机设置 docker exec -it mysql01 /bin/bash #进入容器 mysql -uroot -p123456 #连接mysql 主机上建立帐户并授权 slave,给从机授权,为了让从机能够和主机连接起来。 GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; 10. 查看master状态 show master status; #查询master的状态 把这里的File和Position记下来哈,等下在从机上要用到。 File: mysql-bin.000003 Position: 438 11. 从机设置 进入mysql02容器 docker exec -it mysql02 /bin/bash mysql -uroot -p123456 12. 复制主机的命令 CHANGE MASTER TO MASTER_HOST='主机的ip地址,这里不要写localhost', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_PORT=3310, MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438; #解释: #CHANGE MASTER TO MASTER_HOST='主机的IP地址', #MASTER_USER='slave'(刚刚配置的用户名), #MASTER_PASSWORD='123456'(刚刚授权的密码), #master_port=主机开放的端口 我这里是3310端口, #MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值(之前的Position); 注意事项:如果在这里出现错误,先重置。执行完下面两条命令。 stop slave; reset master; 启动从服务器复制功能 start slave; 查看从服务器状态 show slave status\G #下面两个参数都是Yes,则说明主从配置成功! Slave_IO_Running: Yes Slave_SQL_Running: Yes