目录
前言
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
一.mysql主从复制与原理
mysql的复制类型
1.基于语言的复制
2.基于行的复制
3.混合类型的复制
主从复制工作流程
二. mysql主从复制工作过程
1.两日志 2.三线程 3.复制方向
1.两日志:
二进制日志 master
中级日志 slaves
二进制日志—》复制到 中级日志
2.三线程
master上:dump线程
slave上: I/O线程
SQL线程
dump线程:1)监听本地二进制日志的更新
2)记录I/O线程对应的slave位置
3)同步二进制日志更新内容给I/O线程
I/O线程: 1)监听master的dump线程
2)将slave信息发送给master从服务器位置、日志的position(记录位置),超时时间
3)接收master的dump线程传递过来的更新信息
4)写入relay-log中
SQl线程: 1)监听中继日志
2)将中继日志中的更新内容执行到自己的数据库中(保证从库与主库执行相同操作)
三.mysql主从复制配置
主服务器配置
关闭防火墙
systemctl stop firewalld
setenforce 0
安装时间同步服务
yum -y install ntp
yum -y install ntp ntpdate
保证时间的一致性
同步案例云的时间服务器(时间不同布会出现服务起不来,集群用不了)
ntpdate ntp1.aliyun.com
vim /etc/ntp.conf
配置时间环
fudge 127.127.1.0 stratum 10
#设置本机的时间层级为10级,0级表示时间层级为0级,是向其他服务器提供时间同步源的意思,不要设置0级
server 127.127.1.0
#设置本机的时间同步源
开启ntp服务
systemctl start ntpd
从服务器配置
关闭防火墙
systemctl stop firewalld
setenforce 0
安装时间同步服务
yum -y install ntp
yum -y install ntp ntpdate
开启服务
systemctl start ntpd
同步master服务器
ntpdate 192.168.10.20
creontab -e
*/10 * * * * /usr/sbin/ntpdate 192.168.10.20
安装mysql数据库,这里不做解释
1.主服务器开启同步
开启二进制日志文件
log_bin=master-bin
开启从服务器日志
log_slave-updates=true
主服务器id为1(不可重复)
server_id = 1
重启服务
systemctl restart mysqld
2.从服务器开启同步
开启二进制
log-bin=master-bin
从服务器上同步日志文件记录到本地(定义二进制级别为中继)
relay-log=relay-log-bin
定义relay-log的位置和名称(index索引)
relay-log-index=slave-relay-bin.index
重启服务
systemctl restart mysqld
3.主服务器基于从服务身份
设置权限用户身份
grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by 'abc123';
复制权限 从服务器 所有库所有表 给予用户身份来自主服务器 (允许从服务过来同布主服务器)
flush privileges;
刷新
查找需要同步的二进制日志位置
4.从服务器需要同主服务器
change master to master_host='192.168.10.20',master_user='myslave',master_password='abc123',master_log_file='master-bin.000001',master_log_pos=603;
同步主服务器二进制日志的603位置
flush privileges;
刷新
开启状态
start slave;
查看状态
重要
connecting状态可能需要等一下,长时间的话也要看error
no的话就是前面配置有问题,可以到下面的error里查看是否有错误
5.验证是否主从复制
主服务器创建库表
create database morning;
use morning;
create table hi (id int(3));
insert into hi values (1),(2),(3);
select * from hi;
从服务器查看是否进行复制