Mysql复制简介

复制原理图
master节点开启binlog二进制日志
slave端的io线程发送请求到master端的binlog dump 线程获取二进制日志文件
master的binlog发送数据到slave的io线程
slave的io线程写入日志到relaylog
sql 线程执行sql操作同步数据到slave数据库
AB模式可以做读写分离。也可以将B服务器当做备份数据库。但是AB模式还是常用于读写分离,一般而言master节点可以读写,slave只能读,这样在一定程度上减轻了master的压力。这里我之前遇到过一个问题,小伙伴们一起思考一下。
思考:对于主从复制,主到从的数据同步过程可能需要一定的时间,但是我们线上有这么个需求,就是更新完之后要立马能查询最新的信息,那么我们还能采用读写分离吗?
结论:对于这样的需求一般而言,同步的时间我们是能接受的,但是不排除确有这样的需求。如果你这样的需求,我们该怎么办呢?我们之前采用的个别读写都是master,其他走读写分离。不知道你们有什么好的解决方案没,有的话欢迎一起探讨。
下载rpm包
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

rpm -ivh mysql80-community-release-el7-3.noarch.rpmvi /etc/yum.repos.d/mysql-community.repo

修改完成后,我们执行以下命令安装
yum makecache fast //更新缓存yum install -y mysql-community-server //安装mysql-server
server-id=1log-bin=mysql-bindatadir=/var/lib/mysql //默认数据目录,要想迁移请stop后cp到其他目录
server-id=2 //不能与master相同,唯一标识# log-bin=mysql-bin //slave不需要开启datadir=/var/lib/mysql
systemctl start mysqld
grep 'temporary password' var/log/mysqld.logALTER USER 'root'@'localhost' IDENTIFIED BY 'Aa@123456';
# 创建用户create user 'sync_user'@'192.168.3.4' identified by 'Aa@123456';# 授权grant replication slave on *.* to 'sync_user'@192.168.3.4;# 刷新权限flush privileges;
查看master的日志文件和位置信息
mysql> show master status\G;*************************** 1. row ***************************File: mysql-bin.000002Position: 1173Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:1 row in set (0.00 sec)
slave上执行同步操作
change master to master_host='192.168.3.3',master_user='sync_user',master_password='Aa@123456',master_log_file='mysql-bin.000002',master_log_pos=1173;start slave;
查看slave同步状态是否正常,只要看到我们的IO和SQL处于running即可,并且日志文件和pos也是正确的。
show slave status\G;

在mster上创建一个数据库试试,重点不在建表建库我就随便建,验证一下同步状态。
create database t1;create table t1.t1(a int(11) );insert into t1.t1 values(1);
show databases;use t1;show tables;select * from t1;

文章转载自杨遥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




