1、环境准备:两台服务器安装mysql,并启动MySQL服务,例:
192.168.93.101 -- master
192.168.93.102 -- slave
如果用的是虚拟机,要记得修改下IP
1.修改ens33网卡ip地址: vi /etc/sysconfig/network-scripts/ifcfg-ens33
2.重启网络服务:service network restart
2、主库配置:
2-1、修改MySQL的配置文件:cd /etc/my.cnf
2-2、vim /etc/my.cnf,下面内容放在[mysqld]下行,有就修改,没有就新增
log-bin=mysql-bin #[必须]启用二进制日志
server-id=100 #[必须]服务器唯一ID,唯一即可
2-3、重启MySQL服务:systemctl restart mysqld
2-4、登录MySQL数据库,授权用户给从库用于访问主库进行数据备份:mysql -uroot -p123456
# 主库授权 从库可以使用xiaoming这个用户访问主库进行所有数据库下的所有表的数据备份
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
# 刷新权限:flush privileges;
2-5、登录数据库,查看主库的状态信息:show master status;记住以下信息,配置从库时要用
File:binlog日志文件名称 -- eg:mysql-bin.000001
position:位置 从库从binlog日志的多少行开始进行复制 -- eg:593
3、从库配置:
3-1、修改MySQL的配置文件 /etc/my.cnf
3-2、vim /etc/my.cnf 下面内容放在[mysqld]下行,有就修改,没有就新增
server-id=101 #[必须]服务器唯一ID
3-3、重启MySQL服务:systemctl restart mysqld
3-4、登录MySQL,设置当前从库所关联的主数据库:mysql -uroot -p123456
# 注意:下面这条要执行的SQL命令关键参数要修改和你的主数据库环境一致
change master to master_host='192.168.93.101',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=593;
# 启动从库:start slave;
3-5、登录MySQL,查看从库的状态:show slave status\G;
注意:Slave_IO_Running和Slave_SQL_Running都是yes 要运行正常
4、可能遇到的问题:
4-1、问题1:由于我们的服务器主机是直接克隆的,会导致Slave_IO_Running为no,原因是MySQL数据库启动时生成了相同的server-uuids
解决:0.查找存放server-uuids所在的文件位置 find / -name "auto.cnf"
1.删除/var/lib/mysql/auto.cnf 退出MySQL登录:rm -rf /var/lib/mysql/auto.cnf
2.重启MySQL服务即可:systemctl restart mysqld
3.然后再次查看Slave_IO_Running和Slave_SQL_Running的状态 都为yes就OK啦
4-2、问题2:Slave_IO_Running为Connecting 【尝试连接 说明从库连接主库失败】
解决:1.登录MySQL从库:stop slave;
2.将配置从库关联主库的这条SQL语句参数信息修改正确 重新执行即可 【重新执行从库的第三步配置】
========================================================
ShardingJDBC实现读写分离步骤:
1.项目添加ShardingJDBC起步依赖
<!--shardingJDBC起步依赖-->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
2.yam文件配置ShardingJDBC数据源 管理多个数据库 实现读写分离
spring:
shardingsphere:
datasource:
names:
master,slave
# 主数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.93.101:3306/db_xxx?characterEncoding=utf-8
username: root
password: 123456
# 从数据源
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.93.102:3306/db_xxx?characterEncoding=utf-8
username: root
password: 123456
masterslave:
# 读写分离配置
load-balance-algorithm-type: round_robin
# 最终的数据源名称
name: dataSource
# 主库数据源名称
master-data-source-name: master
# 从库数据源名称列表,多个逗号分隔
slave-data-source-names: slave
props:
sql:
show: true #开启SQL显示,默认false
3.开启Spring设置 允许自定义的bean覆盖SpringBoot自动配置提供的bean对象
# 允许程序自定义的bean对象覆盖SpringBoot自动配置的bean对象
spring:
main:
allow-bean-definition-overriding: true