mysql读写分离的一系列问题

1.远程连接数据库
1.1创建一个用户并赋予其权限(本来的root用户是localhost的,只能用来本地访问mysql,现在创建的root用户,host为%,可以在任意主机上进行访问)

create user 'root'@‘%’ identified with mysql_native_password by '密码';
grant all on *.* to 'root'@'%';

1.2防火墙的问题
1.2.1查看3306端口是否开放

firewall-cmd  --query-port=3306/tcp;

1.2.2如果没有开放3306端口,使用如下命令开放

firewall-cmd  --zone=public  --add-port=3306/tcp --permanent;

1.2.3重启防火墙

firewall-cmd  --reload;

2.克隆虚拟机需要注意的事项
2.1虚拟机需要关闭才能进行克隆
2.2克隆类型为创建完整克隆
2.3修改uuid,克隆的虚拟机和原主机的uuid相同

uuidgen    -------->用于生成uuid
vim /etc/sysconfig/network-scripts/ifcfg-ens33    ------------>用生成的uuid修改原本的uuid

2.4修改主机名

hostname    ----->查看主机名,发现主机和克隆机的hostname相同
hostnamectl set-hostname  设置的主机名
或者
vim /etc/hostname

2.5修改完之后重启生效

reboot -f

3.master以及slave的配置
3.1查看mysql服务器是否开启

systemctl status mysqld

3.2配置master
3.2.1修改/etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=100
修改完成后需要重启mysql服务

3.2.2创建一个用户并其复制赋予权限用于主从复制

mysql5:grant replication slave on *.* to 'xiaoming'@'%' identified by 'Root@123456'; 
mysql8:
create user '用户名' identified by '密码';
grant repliaction slave on *.* to '用户名';
flush privileges;

3.2.3查看主库的状态

show master status;   ---->之后再操作主库,相应的文件名和其位置都会发生改变

3.3配置slave
3.3.1修改/etc/my.cnf

[mysqld]
server-id=101
修改完成之后需要重启mysql服务

3.3.2登录到mysql数据库,执行下面的sql

change master to
master_host='192.168.233.128',
master_user='xiaoming',
master_password='Root@123456',
master_log_file='mysql-bin.000001',
master_log_pos=866;
上面两项需要根据实际情况来填写
start slave;
show slave status \G;    ------>查看从库的状态

3.3.3出现Slave_IO_Running为Connecting的问题
可能为以下问题,需要一一排查
a.网络问题 能ping通就行
b.防火墙问题

查看防火墙状态
systemctl status firewalld.service
如果为active
关闭防火墙
systemctl stop firewalld.service

c.账号权限问题
最终在show slave status中看到了这个错误

在这里插入图片描述
解决方法:在添加主库的语句中加上获取主库密钥即可

get_master_public_key=1;

但此时又出现了uuid重复的问题,我记得是修改过的
原因在于我之前修改的并不是数据库的uuid,之前修改的是位于/etc/sysconfig/network-scripts/ifcfg-ens33里面的uuid

vim /var/lib/mysql/auto.cnf--------->现在需要修改这个里面的uuid
通过在mysql命令行下输入select uuid()生成新的uuid来替换原来的uuid

到这里总算给解决了
在这里插入图片描述
4.项目中加入Sharding-JDBC实现读写分析
4.1导入maven坐标

<!-- https://mvnrepository.com/artifact/org.apache.shardingsphere/sharding-jdbc-core -->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>4.0.0-RC1</version>
</dependency>

4.2在配置文件中配置读写分离规则(位于spring下)
4.3在配置文件中配置允许bean定义覆盖配置项

  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.233.128:3306/reggie_take_out?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: root
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.233.129:3306/reggie_take_out?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: root
    masterslave:
      #读写分离配置
      local-banlance-algorithm-type: round_robin #轮询(错误,后面已经修改)
      #最终的数据源名称
      name: dataSource
      #主库数据源名称
      master-data-source-name: master
      #从库数据源名称列表,多个逗号分隔
      slave-data-source-name: slave(错误,后面已经修改)
    props:
      sql:
        show: true   #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true

启动项目,出现如下错误提示信息:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class

之后发现是导入的maven依赖有问题,应为:

<dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.0.0-RC1</version> 
</dependency>

重新启动项目,但是又出现了如下错误:

 Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException

后面又发现在masterslave下的几个配置写错了

load-banlance-algorithm-type: round_robin #轮询  
我上面写为local-banlance-algorithm-type: round_robin #轮询
slave-data-source-names: slave
我上面写为slave-data-source-name: slave

完结撒花!!!!!!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值