mysql主从复制概述以及配置mysql5.7.10实现简单主从复制

  1. 什么是主从复制:

    通过将Mysql的某一台主机的 数据复制到其它主机,复制过程中一个服务器充当主服务器(master),而一个或多个其它服务器充当从服务器(slave)。进行复制时,所有对数据表的写操作必须在主服务器上进行。否则,因为主服务器不会同步从服务器的数据,会导致主从数据不一致的问题。mysql的主从复制功能是构建高性能大型应用服务器的基础

  2. 主从复制的作用:

    1.辅助实现数据的备份

    2.实现数据服务的高可用和异地容灾

    3.实现多个服务器分摊负载

  3. 主从复制的实现原理:

    实现整个复制过程主要由三个线程来完成,其中slave端两个线程(Sql线程和IO线程) ,master端一个线程(IO线程)

    1.master将数据库改变的记录到二进制日志(binary log)中

    2.slave的IO线程向master请求二进制日志中的事件

    3.master服务器的IO线程将slave服务器的IO线程请求的数据相应给对方

    4.slave的IO线程接收到数据并依次写入到中继日志里面

    5.slave的SQL线程检测到中继日志发生改变,解析出master发生改变执行的sql语句并在自身执行一遍

  4. 主从复制类别:

    1.基于语句的复制:每一条会修改数据的语句都会记录到master的二进制中。slave在复制的时候SQL线程会解析成和原来master端执行过的相同的语句来再次执行

    优点:不需要记录每一行数据的变化,减少二进制日志量,节约了IO成本,提高了性能。

    缺点:由于他是记录的执行语句,所以,为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端杯执行的时候能够得到和在master端执行时候相同的结果。当master的某个SQL语句中执行了一些特殊函数,再复制到slave来执行可能会导致值不一样。例如:master表中的某个字段了插入一条select now();的执行结果,当这条语句再复制到slave上去执行的时候,结果数据就无法被正确复制。

    2.基于行的复制:二进制日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改。

    优点:二进制日志中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以RowLevel的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程,或函数,以及触发器的调用和触发无法被正确复制的问题

    缺点:所有的执行的语句当记录到BinaryLog中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如有这样一条update语句:update user_info set sal=15000 where user_id >= 3,执行之后,日志中记录的不是这条update语句所对应的事件(MySQL以事件的形式来记录BinaryLog日志),而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多个事件,增加了IO负担。

    3.混合方式:基于语句+基于行的混合方式 中和了前两种方式的优缺点,是一种相对比较理想的复制方式

    mysql的这个复制级别也就是通过配置二进制日志的记录格式来决定的。

  5. mysql主从复制配置:

    环境说明:

    master和slave数据初始都是没有数据的

    master:

    操作系统:centos6.7

    mysql版本:mysql5.7.10

    主机地址:192.168.1.223

    slave:

    操作系统:centos6.7

mysql版本:mysql5.7.10

主机地址:192.168.1.222

1.master端配置工作

启动二进制日志
       选择一个唯一的server-id

          vi /etc/my.cnf
           log-bin=/mydata/binlogs/master-bin  
           binlog_format=mixed
            server-id = 2

重启mysql服务

          service mysqld restart

登录mysql创建具有复制权限的用户

         mysql -uroot -p ‘password’
         grant replication slave on *.* to [email protected]‘192.168.1.222‘ identified by ‘password‘; 
         flush privileges;

2.slave端配置工作

修改server-id
        启用中继日志

            vi /etc/my.cnf
           server-id = 11
            relay-log = /mydata/relaylogs/relay-bin
             log-bin=OFF

重启mysql服务

         service mysqld restart

登录mysql连接主服务器

         mysql -uroot -p ‘password’
         change master to master_host=‘192.168.1.223‘,master_user=‘repuser‘,master_password=‘password‘

查看slave工作状态

         show slave status \G;

*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 192.168.1.223
                  Master_User: repuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File:
          Read_Master_Log_Pos: 4
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File:
             Slave_IO_Running: No            #现在io线程处于关闭状态
            Slave_SQL_Running: No           #sql线程也处于关闭状态
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 0
              Relay_Log_Space: 154
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 0
                  Master_UUID:
             Master_Info_File: /mydata/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State:
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:

启动复制:

        start slave;

6.验证主从配置结果:

登录主服务器创建一个数据库

       mysql -uroot -p‘password‘
       create database two_db;
       show databases;

登录slave服务器查看是否已同步

至此mysql简单主从复制基本完成

时间: 2024-10-26 10:15:55

mysql主从复制概述以及配置mysql5.7.10实现简单主从复制的相关文章

CentOS 5.9编译安装配置mysql-5.6.10

说明:操作系统:CentOS 5.9 64位MySQL版本:mysql-5.6.10MySQL安装目录:/usr/local/mysqlMySQL数据库存放目录:/data/mysql准备篇:一.配置好IP.DNS .网关,确保使用远程连接工具能够连接服务器,服务器yum命令可以正常使用二.配置防火墙,开启3306端口vi /etc/sysconfig/iptables  #编辑-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -

[原创]mysql 5.6安装配置,主从分离,读写分离简单教程

文章中参考使用了多个博客的资料,汇总而成!其流程准确性被人亦本人实践! https://blog.csdn.net/qq_35206261/article/details/81321201 https://www.cnblogs.com/qianniao12/p/8011222.html https://blog.csdn.net/qq_35206261/article/details/81321201 https://blog.csdn.net/why15732625998/article/d

MySQL5.6基于GTID的主从复制配置

全局事务标示符(Global Transactions Identifier)是MySQL 5.6复制的一个新特性. GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标识.TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增.下面是一个GTID的具体形式. 1.在MySQL5.6以前对于主从复制出现问题有时候需要你分析BINLOG找到POS点,然后在CHANG MASTER TO.对于新手来说很容易犯错,造成主从复制错误.在新版本中,不必在需要寻找BI

MySQL5.7.10配置和使用

前两天搞mybatis和springmvc的结合,搞了半天项目就是跑不起来,由于都没有接触过,也不知道原因出在哪里.今天想彻底学习下mybatis,于是就想使用MySQL.从官网上下了,MySQL-5.7.10免安装版,本来以为只奥简单配置下就好的,硬是花了两个小时,汗.... 1.下载MySQL解压D:\mysql-5.7.10-winx64 2.在MySQL目录下新建一个my.ini文件,将下列内容复制过去: [mysql] # 设置mysql客户端默认字符集 default-charact

mysql 5.5.28与mysql5.6.17 配置启动区别

从mysql.com下载了一个最新的mysql.5.6.17后安装后,因原机器安装过mysql,启动总是报错 检查了一下mysql的原安装目录里面有个一新的myql-new.conf. 对比了下原/etc/my.conf和mysql-net.conf在mysql.5.6.17这个版本下有很大不同 原my.conf配置内容 [[email protected] bin]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib

MySQL5.7.10免安装版配置

 最新版的 Mysql 不提供图形界面的安装了, 下载下来是一个压缩包的形式, 那么我们如何来使用它呢, 让它为我们工作呢? 环境: mysql-5.7.10-winx64 + win7(64位) 一: 下载 下载东西, 肯定是去官网下载, 点击 http://dev.mysql.com/downloads/mysql/ 下载 选择对应的版本, 进行进行下载. 这个地方可以点击跳过, 不用登陆就可以直接下载. 二: 配置环境变量 我习惯把软件安装在 D:\Program Files 下面, 所以

mysql5.6 主从复制,详细配置

环境:Centos 6.5 mysql5.6 采用的是虚拟机环境 master ip:192.168.17.140 slaver ip:192.168.17.141 下面开始配置: master的配置: 1.注意下图的箭头: 2:重新启动mysql服务 shell: service mysqld restart 3.看下图: 命令如下: mysql -u root -p grant replication slave,replication client on *.* to 'root'@'19

mysql数据库的主从复制搭建与配置

环境: vmwareworkstation 10下布署两台Linux虚拟机作主,从服务器主机:主服务器:centos 7.6 mysql 5.6.45-log IP:10.11.18.190 从服务器:centos 7.6 mysql 5.6.45-log IP:10.11.18.193主服务器test数据库一:配置主服务器: 1:创建一个复制用户,具有replication slave 权限.Mysql>grant replication slave on . to 'slaveuser'@'

MySQL主从复制原理及其配置过程

一.MySQL复制原理. 二.MySQL复制配置. 一.MySQL复制原理 1.MySQL复制原理图 复制原理: Slave启动IO Thread和SQL Thread Master启动DumpThread 1.Slave通过IO Thread向Master的Dump Thread发送请求,Master的Dump Thread请求本地的binlog. 2.Master读取本地的binlog,并将读取内容发送给Slave的IO Thread线程. 3.Slave的IO Thread将收到的内容,写