如你安好

时间就像海绵里的水,只要愿挤,总还是有的。 -- 鲁迅
如你安好 ,

便是晴天 。

MySQL主从复制

1.我们为什么要主从复制?
在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能,一般都会采用「主从复制」。
比如:在复杂的业务系统中,有一句sql执行后导致锁表,并且这条sql的的执行时间有比较长,那么此sql执行的期间导致服务不可用,这样就会严重影响用户的体验度。
主从复制中分为「主服务器(master)」「从服务器(slave)」,「主服务器负责写,而从服务器负责读」,Mysql的主从复制的过程是一个「异步的过程」
这样读写分离的过程能够是整体的服务性能提高,即使写操作时间比较长,也不影响读操作的进行。
mysql主从复制1.png
在从节点上执行sart slave命令开启主从复制开关,开始进行主从复制。从节点上的I/O 进程连接主节点,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
主节点接收到来自从节点的I/O请求后,通过负责复制的I/O进程(log dump 线程)根据请求信息读取指定日志指定位置之后的日志信息,返回给从节点。返回信息中除了日志所包含的信息之外,还包括本次返回的信息的bin-log file 的以及bin-log position(bin-log中的下一个指定更新位置);
从节点的I/O进程接收到主节点发送过来的日志内容、日志文件及位置点后,将接收到的日志内容更新到本机的relay-log(中继日志)的文件(Mysql-relay-bin.xxx)的最末端,并将读取到的binary log(bin-log)文件名和位置保存到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log 的哪个位置开始往后的日志内容,请发给我”;
////////////////////////////////////
环境:OS:CentOS 7.9 Mysql: Mysql 5.7
两台主机名称如下:
Hostname: MasterA ,IP:192.168.172.10
Hostname: slaveB ,IP:192.168.172.*
安装Mysql详情请看前面
记得开启两服务器的防火墙

[root@MasterA ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@slaveB ~]# firewall-cmd --zone=public --list-ports

铺垫结束;
/////////////////////////////////
2.主服务器设置(192.168.172.10)
安装ntp时钟服务,主从服务需要同步时间

[root@MasterA ~]# yum -y install ntp
[root@MasterA ~]# vim /etc/ntp.conf
 #25行左右添加
server 127.127.172.0                    #设置本地是时钟源,注意修改网段
fudge 127.127.172.0 stratum 8               #设置时间层级为8(限制在15内)
[root@MasterA ~]# service ntpd start

mysql主从复制2.png

[root@slaveB ~]# vim /etc/my.cnf
server-id = 1                                           #修改server-id,务必保持两台机器id不相同
log-bin=master-bin                  #添加,主服务器开启二进制日志
log-slave-updates=true                  #添加,允许从服务器更新二进制日志
[root@slaveB ~]# systemctl restart mysqld
[root@slaveB ~]# mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.172.%' IDENTIFIED BY '密码'; #给从服务器授权
FLUSH PRIVILEGES;

mysql主从复制4.png

[root@slaveB ~]# show master status\G;

mysql主从复制3.png
3.从服务器配置(192.168.172.*)

[root@slaveB ~]# yum -y install ntp ntpdate
[root@slaveB ~]# service ntpd start
[root@slaveB ~]# vim /etc/ntp.conf
 #25行左右添加
/usr/sbin/ntpdate 192.168.172.10            #进行时间同步,指向Master服务器IP
[root@slaveB ~]# vim /etc/my.cnf
server-id = 2                       #修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin                 #添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index               #添加,定义中继日志文件的位置和名称
[root@slaveB ~]# systemctl restart mysqld
[root@slaveB ~]# mysql -u root -p
change master to master_host='192.168.172.10' , master_user='myslave',master_password='35123512',master_log_file='master-bin.000001',master_log_pos=604;
 #配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致,这里的是例子,每个人的都不一样
[root@slaveB ~]# start slave;               #启动同步,如有报错执行 reset slave;
[root@slaveB ~]# show slave status\G            #查看 Slave 状态
 #确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes                       #负责与主机的io通信
Slave_SQL_Running: Yes                                  #负责自己的slave mysql进程

mysql主从复制3.png
4.验证主从复制效果
主服务器上进入执行 create database test;
mysql主从复制5.png
完成

  1. llkk说道:

    我川哥nb

愿望集合地

(仅限登陆用户评论)

这篇文章获得了个赞!