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
完结撒花!!!!!!!!!!!!