记录一次 mysql 5.7 主从复制原理以及实现?

前言

因为项目需要,需要使用分库分表以及主从复制来减少数据压力,于是就走上了mysql主从复制和读写分离的坑。读写分离我选用的是sharding-jdbc,期初选型的时候看好的是mycat(想偷懒下,不像改动太多代码0.0~~~),mycat继承好以后,遇到分表join问题,in等多表联查统计问题,无奈选用sharding-jdbc,分库分表以及读写分离继承成功之后,发现主库,从库数据未同步,由于第一次做分库分表和读写分离,一直以为(读写分离和主从复制是一回事),苦思冥想,各种百度,恍然大悟,分离是分离,主从是主从,有毛关系。。。。。。
进入正题,不再废话了。。

原理:mysql主从复制原理:
传统的mysql复制就是主-从复制,它会有一个主,一个或多个从,在主节点提交与执行完事物之后,通过bin-log(2进制日志),将其(异步的)通过从节点上的IO线程发送到从节点上,并将bin-log日志存到从节点的readly-log(中继日志)中,通过sql线程以重新执行(在基于语句的复制中),或应用(在基于行的复制中),
当从节点连上主节点后,会向主节点发送上次同步的位置,主节点将日志文件发给从节点

一:事先需要在两台服务器上安装好mysql5.7(最好版本相同)

主库IP: 192.168.0.123
从库IP: 212.241.123.111

Master 主库配置

1:修改mysql配置文件(一般都在/etc/my.cnf) 注意:主数据库的server-id小于从数据的唯一标识

mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
#开启二进制
log-bin=master-bin
#唯一标识
server-id=1 
binlog_format=mixed

# 表示只备份modou数据库
binlog-do-db=modou
# 表示忽略备份mysql (系统数据库)
binlog_ignore_db=mysql
binlog_ignore_db=sys


sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


# binlog 配置
#log-bin = /usr/local/var/mysql/logs/mysql-bin.log
#expire-logs-days = 14
#max-binlog-size = 500M
#server-id = 1

Slave 从库配置

1:修改mysql配置文件(一般都在/etc/my.cnf)

[mysqld]

bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
# mysql字符集
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true


server-id=2
#开启二进制日志
log-bin=mysql-bin
relay-log=relay-bin
binlog-format=mixed
#设置只读权限
read-only =1

# 只对modou这个数据库进行镜像处理
replicate-do-db = modou
# 不对mysql数据库进行镜像处理
replicate-ignore-db = mysql
replicate-ignore-db = information_schema

#跳过所有错误
slave-skip-errors=all

分别重启主数据库和从数据库

1:进入主数据库执行
grant replication slave on . to ‘rep’@‘从数据库IP’ identified by ‘123456’;

show master status; master-bin.000002从库进行复制的时候需要设置
在这里插入图片描述

2:进入从数据库
停掉slave功能:stop slave;
执行:change master to master_host=‘主数据库IP’, master_user=‘主数据库设置的用户名’, master_password=‘主数据库’,master_log_file=‘master-bin.000002’;

3:启动slave功能:start slave;
4:查看slave状态:show slave status \G;
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值