主开启二进制日志
从开启中继日志(binlog)
1.数据更新写入二进制日志
2.开启io线程向主请求二进制日志事件
3.主为每个io线程开启dump线程向从发送二进制日志事件
4.从保存二进制日志事件到中继日志
5.从开启SQL线程读取中继日志中的二进制事件并解析成sql语句进行重放/逐一执行。
1)STATEMENT:基于语句的复制(mysql默认采用基于语句的复制,执行效率高)
2)ROW:基于行的复制。
3)MIXED:混合类型的复制(默认采用基于语句复制,一旦发现无法精确复制时,就会采用基于行复制。
实验准备
1台主数据库,两台从数据库
主:192.168.116.60
从1:192.168.116.70
从2:192.168.116.80
systemctl status ntpd #检查ntpd服务是否开启
systemctl enable --now ntpd #设置永久并立即开启ntpd服务
vim /etc/ntp.conf
将第8行注释,并复制到下一行
restrict default nomodify #客户端不可以修改时间参数,但可以同步时间服务器
server ntp.aliyun.com iburst #阿里云的服务器
systemctl restart ntpd #重启ntpd服务
netstat -lntup | grep ntpd #查看ntpd端口
date #查看当前时间
ntpq -p #查看当前ntp服务器状态
切到从服务器里
ntpdate 192.168.116.60 #跟主服务器做同步
crontab -e #创建计划任务
*/30 * * * * /usr/sbin/ntpdate 192.168.116.60 &> /dev/null
crontab -l #检查计划任务
?
vim /etc/my.cnf
server-id=1
log-bin=mysql_bin #添加,主服务器开启二进制日志
binlog_format=mixed #设置复制类型
配置完后重启
systemctl restart mysqld
给服务器做授权
grant replication slave on *.* to 'myslave'@'192.168.116.%' identified by '123456';
flush privileges;
show master status\G #查看当前状态
vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index
------------------------------------------------
server-id = 2 #修改,注意id与主的不同,两个从的id也要不同
relay-log=relay-log-bin #开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=relay-log-bin.index #定义中继日志文件的位置和名称,一般和relay-log在同一目录
systemctl restart mysqld #重启mysqld服务
mysql
change master to master_host='192.168.116.60',master_port=3306,master_user='myslave',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=1053;
?