在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的。因此,一般通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
主从复制:
Mysql的主从复制和mysql的读写分离两者有紧密的联系,首先要部署主从复制,只有主从复制完成了,才能再此基础上进行数据的读写分离。
Mysql支持的复制类型:
1、基于语句的复制:在主服务器上执行的sql语句,在从服务器上会执行同样的语句。Mysql默认采用基于语句的复制,效率比较高,但是有时不能实现精准复制。
2、基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
3、混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的复制不能精准复制时,就会采用基于行的复制。
主从复制的过程:
1、在每个事物更新数据完成之前,master在二进制日志记录这些改变,写入二进制日志完成后,master通知存储引擎提交事物。
2、Slave将master的binary log复制到其中的中继日志。首先从mysql服务器开始一个工作线程I/O线程,I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master。他会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
3、Sql从线程处理该过程的最后一步。Sql线程从中继日志中读取事件,并重放其中的事件而更新slave的数据,使其与master的数据一致。
----更新数据完成之前,master在二进制日志记录改变,写入二进制日志完成后,master通知存储引擎提交事物,
----Slave将master的二进制日志复制到中继日志里。从mysql服务器开始一个I/O线程,I/O线程在master上打开一个普通的连接,然后开始从master的二进制日志中读取事件,如果已经跟上master。他会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
—Sql从线程处理该过程的最后一步。Sql线程从中继日志中读取事件,并重放其中的事件而更新slave的数据,使其与master的数据一致。
1,在主机A 安装mysql主配置
#!/bin/bash
systemctl stop firewalld #关闭防火墙 和selinux
setenforce 0 &> /dev/null
rpm -qa |grep mariadb-server &> /dev/null #查看是否安装mysql服务
if [ $? -eq 0 ];then
echo "已安装mysql服务!"
else