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

tech2023-11-15  77

前言

因为项目需要,需要使用分库分表以及主从复制来减少数据压力,于是就走上了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)