Mysql实现主从复制

本文会与SpringBoot实现读写分离实现业务的读写分离。
首先准备三台mysql
mysql-1:192.168.31.62
mysql-2:192.168.1.5
mysql-3:192.168.1.6
并且在三台机器上使用ping命令测试网络是否通畅。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在Master主库开启log_bin功能
windows是 my.ini
linux是 my.cnf
添加以下内容(注意备份源文件,并且尽量不要用原始编辑器打开,会修改编码格式,导致mysql无法正常启动

# 配置要给Slave同步的数据库
binlog-do-db=life_account_db
# 不用给Slave同步的数据库,一般是Mysql自带的数据库就不用给Slave同步了
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 自动清理30天前的log文件
expire_logs_days=30
# 启用二进制日志
log-bin=mysql-bin

#集群唯一ID
server-id=1

在这里插入图片描述
查看log_bin开启状态

show variables like '%log_bin%';

在这里插入图片描述
在主库中创建用户,并设置该用户授予复制权限

#切换至mysql库中
use mysql
#创建用户并设置可访问的地址为所有,密码为123456
CREATE USER 'master'@'%' IDENTIFIED BY '123456'
#刷新
FLUSH PRIVILEGES	
#给master用户配置复制权限,可访问库为所有,可访问地址为所有
grant replication slave on *.* to 'master'@'%'	
#查看权限是否配置成功
show grants for master	
#查看网络访问策略是否配置成功
select user,host from user

在这里插入图片描述
在这里插入图片描述
查看当前库中数据的日志名称及偏移量
File和Position的值后面配置从库时需要用到。

show master status

在这里插入图片描述
在从库中配置(192.168.1.5)
linux的 /etc/my.cnf

server-id=2

在这里插入图片描述
重启mysql

systemctl restart mysqld

登录mysql进行从库的读取配置

#停止主从
stop slave
#设置主从配置 
change master to master_host='192.168.31.62', master_port=3306, master_user='master', master_password='123456', master_log_file='mysql-bin.000051', master_log_pos=649
#启动主从
start slave;

设置主从配置语句解释:

#master_host 主库ip
#master_port 主库端口
#master_user 主库提供可用来主从复制的用户名
#master_password 同上的密码
#master_log_file  主库中log日志的名称 也就是File
#master_log_pos 主库中log日志的偏移量 也就是Position

在这里插入图片描述
查看主从状态:

#\G会有格式
show slave status\G;

当以下两种状态都为yes时就设置成功
Slave_IO_Runing:Yes
Slave_SQL_Runing:Yes
在这里插入图片描述
配置从库2(192.168.1.6)
由于我是复制的192.168.1.5的虚拟机,所以需要删除以下文件
复制过来的uuid是一样的,后面是会出错的,删除之后重启mysql会重新生成一个不一样的。

rm  /var/lib/mysql/auto.cnf 

/etc/my.cnf中的service-id的值不要重复

测试
首先清空测试表数据

delete from acc_order where id >0

发现192.168.1.6没有删除数据,执行show slave status发现
Slave_SQL_Runing:No

#这个参数会跳过从主节点接下来的N个事件。这个参数用来修复由SQL语句导致的复制停止。
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1

并且发现如果使用范围删除,如果主库删了id为112,113的数据,但是从库有id为111的数据,那么就只会删除112,113的数据。id为111的数据依旧存在(说明log-bin保存的是真正执行的sql),所以实际操作之前需要将主库的sql同步至从库中,保证起始阶段的数据一致性。

测试删除
主库执行删除操作:
在这里插入图片描述
从库执行查询操作:在这里插入图片描述
在这里插入图片描述
测试新增
主库执行新增操作:
在这里插入图片描述
从库执行查询操作
在这里插入图片描述
在这里插入图片描述
至此mysql的一主两从基本实现。
在实施的过程中遇到很多问题,并且实际工作中由运维来提供的主从读取用户的权限和地址都是会限制的。如果用于实际工作中,用户和可访问地址都要尽可能的缩小,来减少数据被恶意篡改的风险。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值