MYSQL主从模式

MYSQL的主从介绍

1、在主服务器将客户端对数据操作的指令传到master的服务端,服务端会根据事务的提交顺序写到二进制日志。

2、在有新的操作后,master会通知slave有新的数据变化。slave通过IO线程将master的二进制日志传到slave的中继日志中。

3、slave会将中继日志中的事件通过SQL线程在备库上执行。从而实现数据更新,直到追赶上master的数据。

4、在master上并行执行的sql语句,在存储到备库的中继日志后,只有一个SQL语句对中继日志中的事务进行串行执行。

5、在master与slave中的数据达到一致后,slave就会进入休眠状态,等待下一次的数据同步,下一次的数据同步有master通知slave。

MYSQL的主从配置

一、主从数据库的基本配置

我在配置主从服务器时,使用了两台服务器:10.19.34.126和10.19.34.91

1、首先需要在这两台上搭建单独的mysql服务。

2、在主数据库上创建账号,用于备库通过这个账号进行同步主库的二进制日志到备库的中继日志。

  

3、配置主库,要对每一个数据库服务配置唯一标示,参数名为server-id,可以配置主库为server-id=1,也可以通过ip来指定。

  server-id=10.19.34.92

  log-bin=mysql-bin        //设置主库的执行操作保存到二进制日志中,确保备库能够同步二进制日志到中继日志。

4、配置从库

  server-id=10.19.34.126

  log-bin=mysql-bin    //设置备库在执行中继日志中的事件时将事件重新保存到二进制日志中

  replay_log=mysql-replay-bin   //设置从库的中继日志

  log_slave_updates=1     //该设置是允许中继日志中的事件在二进制日志中进行重放

  read-only=1     //设置该从库为只读库

5、启动主从服务

  正常执行主库启动指令

  在备库上执行指令:change master to master_host=‘server1‘,master_user=‘repl‘ ,master_password=‘123456‘,mater_log_file=‘mysql-bin.000001‘,master_log_pos=0;

  在备库上执行指令:start slave;

二、主从数据库的配置优化

    sync_binlog=1      //所有的事务在提交前,将二进制日志保存到磁盘。保证在系统崩溃时,不至于数据丢失。该参数默认设置为0。但是该设置只对二进制日志起作用,而非中继日志。并且会带来一定的开销。

    innodb_flush_log_at_trx_commit = 2    //如果设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上。

MYSQL的主从原理

     1、基于语句的复制

      优点:基于语句的复制会在主库上执行的数据操作在备库上重新执行一遍。由于基于语句的复制只是简单的执行sql语句,实现比较简单。并且在二进制日志里事件更加紧凑。

      缺点:基于语句的复制在备库上执行时会带来数据的不一致性,例如在获取服务器的当前时间时,在同步到备库上时,可能与主库有一定的偏差。

     2、基于行的复制

      优点:基于行的复制将数据记录在二进制日志中,能够正确的复制每一行。数据的一致性很强。

      缺点:占用的带宽较大,可能一句简单的语句会带来较大的带宽。

     3、复制文件

      mysql-bin.index:该文件中保存着二进制的所有文件名称。

      mysql-replay-bin-index:该文件中保存着中继日志的文件名称。

      master.info:该文件保存在备库服务器上,该文件中保存着主库的信息,例如主库的端口,密码等。

      replay-log.info:该文件保存在备库上,用来记录同步主库的坐标位置。可以在备库重启时,通过该文件来判断从何处同步主库。

     4、发送复制事件到其他备库

      

      在将第一个备库作为其他备库的主库时,需要设置第一备库的二进制文件和log_slave_upodates为1,第二备库设置主库为第一备库即可。

     5、复制过滤器

      在设置过滤器时,可以在主库上设置,也可以在备库上设置。

      binlog-do-db=dbname     //该参数会设置将该数据库的变化保存到二进制日志中,将该数据库的变化同步到备库。

      binlog-ignore-db=dbname   //该参数会忽略该数据库的变化不会保存到二进制日志中,由于该数据库的二进制日志没有保存,所以在系统崩溃后,重新启动时,无法恢复该数据库。

      binlog-do-table=tablename   //该参数会设置将该数据库表的变化保存到二进制日志中,将该数据库表的变化同步到备库。

      binlog-ignore-table=tablename   //该参数会忽略该数据库表的变化不会保存到二进制日志中,由于该数据库表的二进制日志没有保存,所以在系统崩溃后,重新启动时,无法恢复该数据库表。

      replicat-do-db=dbname     //该参数会设置将该数据库的变化同步到中继日志中,将该数据库的变化在备库上执行。

      replicate-ignore-db=dbname   //该参数会忽略该数据库的变化不会保存到中继日志中。

      replicate-do-table=tablename   //该参数会设置将该数据库表的变化保存到中继日志中,将该数据库表的变化在备库上执行。

      replicate-ignore-table=tablename   //该参数会忽略该数据库表的变化不会保存到中继日志中。

      注意:1、binlog-ignore-db和binlog-ignore-table参数会过滤对该数据库和表的操作保存到二进制日志中,所以在数据恢复时,导致数据丢失,一般不建议在主库上设置该参数,

          可以在备库上进行过滤。    

         2、在同时使用binlog-do-db和binlog-ignore-db时,只对binlog-do-db参数有效。

二进制日志

一、二进制日志基本介绍

    二进制日志文件只是保存了对数据库的变更,对没有变更的数据操作不会记录到二进制日志。

    二进制日志的内容如下图所示:

    

    二进制日志中的字段如下:

    Event_Type:用来设置数据的操作类型。如Query、Update。

    Server_id:服务器的id

    Log_name:用来表明该事件保存的二进制日志文件名称

‘    Pos:事件的开始位置

    End_log_pos:事件的结束位置

    info:事件信息的可读文本

    二进制文件的结构:

    

    主要包含二进制文件和二进制文件的索引文件,二进制日志文件以格式描述事件开始,以日志轮换事件结束。

    格式描述事件主要包括服务器版本号、服务器信息和二进制文件信息等。

    日志轮换事件’主要包括事件在记录到的下一个日志文件名称。

    查看二进制日志的指令:

    show  binlog  events    //用以查看第一个日志文件的第一条事件的信息。

    show  binlog  events  in "文件名"  //用以查看指定二进制日志的事件信息

    show  master  status   //通过主服务器查看当前正在写入的二进制日志

二、二进制日志详解

二进制日志结构

记录语句

记录事务

二进制日志管理

二进制日志选项和变量

建立新的slave

    change  master  to  通过两个参数master_log_file和master_log_pos来设置从主服务器同步的位置,而不是从开始同步。如果在新建立slave时,需要以下几步:

    1、master已经运行了很长一段时间了,可以先备份一次master的数据。

    2、记下master数据库的binlog的位置。

    3、到新的slave上恢复。

    4、同时设置slave服务器上的备份位置。

克隆master

克隆slave

常见的复制任务

一主多从

  在使用一主多从时一般有一下几个用途:

  1、每个从库只过滤一部分数据操作到中继日志中,对数据进行保存。这样可以分担数据库的压力。

  2、将一台数据库作为随时变为主库的可能。

  

原文地址:https://www.cnblogs.com/youzhongmin/p/9302075.html

时间: 2024-08-04 22:39:11

MYSQL主从模式的相关文章

Mycat在MySQL主从模式(1主1从)下读写分离和及自动切换模式的验证

实验环境 两台Centos7  MySQL5.7.12 IP地址为:192.168.10.36  192.168.10.37 一台Centos7 Mycat IP地址为:192.168.10.31 一:安装mysql,如下图所示(这里采用yum安装): 二:配置MYSQL,以及建立MYSQL主从 1:初始化密码,由于我没在/root目录下找到第一次启动的随机密码,所以我只能用如下操作 vi /etc/my.cnf mysqd 字段添加 #skip-grant-tables 然后重启mysql  

mysql 主从模式总结(一)

1. 主从模式的部署步骤 目标:部署一个有3台主机的单主模式的MySQL分组. Primary:192.168.197.110. Secondary:192.168.197.111. Secondary:192.168.197.112. MySQL端口:3306,MySQL分组复制端口:33061. (1)主机192.168.197.110上的操作. 按照如下步骤完成MySQL配置,并且将自己加入到分组中,最后启动分组. (a)修改MySQL配置. 修改MySQL服务的配置文件. [mysqld

搭建mysql主从模式

第一步:先安装两个mysql,我分别装在了 192.168.45.128 192.168.45.131 第二步:修改 Master 配置文件 命令:vim /etc/my.cnf 分别修改其中的server_id和log_in 第三步:重启MySQL,并连接 命令:service mysqld restart mysql -uusername -ppassword 第四步: 在 MySQL 数据库中,为不存在的用户授权,就是同步创建用户并授权. 此用户是从库访问主库使用的用户 ip 地址不能写为

Mysql之主从模式、读写分离概念

MySQL主从架构复制: 在主server上每次进行可能引起数据变化的操作都要先记录到二进制文件中,并将数据同步到主server的磁盘上,与此同时还要通过端口(3306)将二进制日志发送到从server上,在从server上,从server会先将接受的二进制日志保存为中继日志(relay log),在从中继日志中进行读取,重新执行一遍操作,进行数据的复制 但一般来说,如果主server有多个cpu,当数据量变化很频繁时,可能会在每个cpu上都运行一个事务,而注server只能一个个的记录入二进制

mysql 主从半同步模式和数据库同步过滤

在mysql主从架构中,默认采用的是异步模式,也就是在master中将数据保存在数据库,再将操作写到bin-log中即响应给客户端.至于slave是否同步了二进制文件,是否完成了本地操作,master无从得知.异步模式固然能以最快的速度响应给客户端,减少用户的等待时间,但在一些数据同步.安全性较高的场景,要求slave中的数据要尽最大能力与master保持一致,那么半同步模式就可以用上了. mysql的半同步模式是以插件的方式由google提供的.主要文件在${mysql_home}/lib/p

MySQL 主从同步(1) - 概念和原理介绍 以及 主从/主主模式 部署记录

Mysql复制概念Mysql内建的复制功能是构建大型高性能应用程序的基础, 将Mysql数据分布到多个系统上,这种分布机制是通过将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起

高性能Mysql主从架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

2-18,19 搭建MySQL主从服务器并并通过mysql-proxy实现读写分离

MySQL主从服务器 实现方式: MySQL  REPLICATION Replication可以实现将数据从一台数据库服务器(master)复制到一台或多台数据库服务器(slave) 默认情况下这种情况属于异步复制,无需维持长连接 通过配置,可以复制所有库或者几个库,甚至库中的一些表 它是MySQL内建的,自带 Replication的原理 主服务器master将数据库的改变写入二进制日志文件,从服务器slave同步这些二进制日志,并生成中继日志,从服务器根据中继日志,执行这些改变 DML:S

mysql-poxy 实现mysql主从架构读写分离

在高并发系统设计中,后端数据库的性能往往会成为系统的瓶颈,这时候就需要进行合理的设计,以分摊后端数据库的压力,比如在数据层前面构建缓存层.数据文件存放在RAID这样的设备.对数据进行分库分表分区存放.合理利用索引.进行数据的读写分离等.mysql-proxy提供了mysql数据库的读写分离能力,mysql-proxy通过Lua脚本能分析得出用户的sql请求,如果发现在是read请求,则会转化到master-slave模型的slave中,如果是write请求,则会转发到master中,以达到读写分