欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL主从原理及配置详解

程序员文章站 2023-12-05 12:11:58
mysql主从配置及原理,供大家参考,具体内容如下 一、环境选择: 1.centos 6.5 2.mysql 5.7 二、什么是mysql主从复制 mysql...

mysql主从配置及原理,供大家参考,具体内容如下

一、环境选择:

1.centos 6.5

2.mysql 5.7

二、什么是mysql主从复制

mysql主从复制是其最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。mysql主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

三、mysql主从复制的类型

1.基于语句的复制

主服务器上面执行的语句在从服务器上面再执行一遍,在mysql-3.23版本以后支持。

缺点:时间上可能不完全同步造成偏差,执行语句的用户也可能是不同一个用户。

2.基于行的复制

把主服务器上面改编后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的,在mysql-5.0版本以后引入。

缺点:比如一个工资表中有一万个用户,我们把每个用户的工资+1000,那么基于行的复制则要复制一万行的内容,由此造成的开销比较大,而基于语句的复制仅仅一条语句就可以了。

3.混合类型的复制

mysql默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,mysql会自动进行选择。

在mysql主从复制架构中,读操作可以在所有的服务器上面进行,而写操作只能在主服务器上面进行。主从复制架构虽然给读操作提供了扩展,可如果写操作也比较多的话(多台从服务器还要从主服务器上面同步数据),单主模型的复制中主服务器势必会成为性能瓶颈。

四、原理

1.主从(master-slave)

主服务器上面的任何修改都会保存在二进制日志binary log里面,从服务器上面启动一个i/o thread(实际上就是一个主服务器的客户端进程),连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个realy log里面。从服务器上面开启一个sql thread定时检查realy log,如果发现有更改立即把更改的内容在本机上面执行一遍。

MySQL主从原理及配置详解

2.主从从(master-slave-slave)

一主多从的话,这时主库既要负责写又要负责为几个从库提供二进制日志。此时可以稍做调整,将二进制日志只给某一从,这一从再开启二进制日志并将自己的二进制日志再发给其它从。或者是干脆这个从不记录只负责将二进制日志转发给其它从,这样架构起来性能可能要好得多,而且数据之间的延时应该也稍微要好一些。

MySQL主从原理及配置详解

【注意】

1.在老版本的mysql中,主从复制的slave段并不是由两个进程完成的,而是由一个进程完成的,之后就出现了很多风险和性能的相关问题。具体有以下问题:

  1.一个进程会使复制bin-log日志和解析日志并在自身执行的过程成为一个串行的过程,性能受到了一定的限制,异步复制的延迟也会比较长。

2. slave端从master端获取bin-log过来之后,需要接着解析日志内容,然后在自身执行。在这个过程中,master端可能又产生了大量变化并新增了大量的日志。如果在这个阶段master端的存储出现了无法修复的错误,那么在这个阶段所产生的所有变更都将永远无法找回。如果在slave端的压力比较大的时候,这个过程的时间可能会比较长。

五、mysql主从复制的过程

1.两种情况:同步复制和异步复制,生产环境中大多数采用异步复制。

2. 复制的基本过程:

  1.slave上面的i/o进程连接上master,并请求从指定文件的指定位置(或者从最开始的日志)之后的日志内容。

  2.master接收到来自slave的io进程的请求后,负责复制的io进程会根据请求信息读取日志指定位置之后的日志信息,返回给slave的io进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到master端的bin-log文件的名称以及bin-log的位置。

3.slave的io进程接收到信息后,将接收到的日志内容依次添加到slave端的relay-log文件的最末端,并将读取到的master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”。

4.slave的sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在master端真实执行时候的那些可执行的内容,并在自身执行。

六、配置:

1.首先明确两种情况:

  1.两台相互独立的服务器或虚拟机。

  2.两台通过模板创建的虚拟机。

2.下面对两台服务器进行命名,分别为:mysql主服务器,mysql从服务器。

3.主从服务器分别进行如下操作:

  1.mysql版本一致

  2.初始化表

4.修改mysql主服务器和mysql从服务器:

vim /etc/my.cnf 
[mysqld] 
log-bin=取任意名称 //启用二进制日志
server-id=任意取数字 //服务器唯一id,默认值是1,一般设置为ip地址的最后一段数字

5.若是第一种情况,直接重启两台服务器;若是第二种情况,还需将两台服务器的auto.cnf文件重命名为auto.cnf.bak,然后重启mysql服务。

6.在mysql主服务器上建立账户并授权slave

grant replication slave on *.* to '用户名'@'%' identified by '任意密码';

7.查询mysql主服务器的状态

show master status;

8.配置mysql从服务器

change master to 
master_host='mysql主服务器ip地址', 
master_user='之前在mysql主服务器上面创建的用户名', 
master_password='之前创建的密码', 
master_log_file='mysql主服务器状态中的二进制文件名', 
master_log_pos='mysql主服务器状态中的position值';

9.启用slave

start slave;

10.查看mysql从服务器的状态

show slave status\g

查看

slave_io_running: yes //此状态必须yes

slave_sql_running: yes //此状态必须yes

全变yes说明主从配置成功,当mysql主服务器有更新变化时,从服务器会根据具体配置做相应的同步。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。