唠嗑部分
在实际开发中,一般会使用数据库的集群架构,当然在实际开发中,都是运维团队提供好的集群地址供开发连接,至于如何搭建,跟开发者关系并不大,本次搭建主从节点是为后序做铺垫,下期会更新SpringBoot整合多数据源,这个与我们开发者是有关系的哈,其中在使用MyBatis插件动态切换数据源中就使用到了主从架构,先提一提,代码正在手撸,下期更新
原理:
- 从库会生成两个线程,一个I/O线程,一个SQL线程;
- I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
- 主库会生成一个log dump线程,用来给从库I/O线程传binlog;
- SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行
言归正传
准备两台centos机器,配置两张网卡,分别配置网络,ip为10.10.10.10、10.10.10.20
如下,将网卡连接至VMnet0,虚拟机即可上网
真实机vmnet1配置
虚拟网络编辑器配置
虚拟机网卡配置(以10.10.10.10为例,20类似)
两台机器
设置Vmnet1网卡,让其真实机能与虚拟机通信
注:整合数据源在真实机操作,所以只需要真实机能与虚拟机ping通即可,如果让虚拟机与真实机ping通,需要开放入栈防火墙
安装MySQL
采用yum的方式安装(需要网)
- 下载MySQL的yum源,安装yum源的rpm包
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 下载路径:https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装yum源
rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
yum源默认安装8.0的MySQL,修改为5.7的版本
# 编辑文件:
vim /etc/yum.repos.d/mysql-community.repo
# 将80的MySQL的enable设置为0,将57的MySQL的enable设置为1
# 搞定后通过如下命令,查看MySQL的默认安装版本
yum repolist enabled | grep mysql
- 开始安装
# 根据网络情况下载……
yum install mysql-community-server
- 找到密码,登录MySQL服务
# 启动MySQL服务,找到密码
systemctl start mysqld
grep 'temporary password' /var/log/mysqld.log
# 正常登陆即可
mysql -u root -p
- 重置密码,开启远程连接用户
# 登陆MySQL后,重置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd';
# 开启远程连接用户,并刷新
alter user set host = '%' where user = 'root';
flush privileges;
搭建主从复制
1、搭建master节点
修改mysql配置文件
vim /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一
server-id=1
#mysql binlog 日志的存储路径和文件名
log-bin=/var/lib/mysql/mysqlbin
#是否只读,1 代表只读, 0 代表读写
read-only=0
#忽略的数据, 指不需要同步的数据库
binlog-ignore-db=mysql
重启服务
systemctl restart mysqld
连接MySQL,查看master状态
创建master用户
grant replication slave on *.* to 'master'@'10.10.10.20' identified by '@Aa1234567890';
flush privileges;
2、搭建slave节点
修改mysql配置文件
#mysql服务端ID,唯一
server-id=2
#指定binlog日志
log-bin=/var/lib/mysql/mysqlbin
# 除超级用户root、及线程用户外,其余用户均只读
read-only
重启服务
systemctl restart mysqld
连接MySQL,指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。
change master to master_host='10.10.10.10', master_user='master', master_password='@Aa1234567890', master_log_file='mysqlbin.000001', master_log_pos=154;
开始同步
start slave;
# 查看从节点状态
show slave status\G;
两处yes即为正常
3、验证主从复制
在主库创建database为spring-boot-dynamic-datasource-demo的数据库,创建表结构t_user
create database `spring-boot-dynamic-datasource-demo` character set 'utf8mb4';
use spring-boot-dynamic-datasource-demo;
create table t_user(
id int primary key auto_increment comment 'id',
user_name varchar(50) comment '用户名'
) comment '用户表';
insert into t_user values (1, 'admin');
登录从库,查看数据,数据已经同步至从库
结语
1、MySQL主从复制搭建完成,主节点写,从节点读,可以解决数据库压力过大的问题!
2、制作不易,一键四连再走吧,您的支持永远是我最大的动力!
3、Java全栈技术交流QQ群:941095490,欢迎您的加入!