当前位置: 首页 > 数据库 > MySQL教程 >正文

MySQL主从复制

来源:互联网时间:2020-09-16 17:30:42编辑:网友分享
MySQL Replication(主从复制)1)企业中的职责: 搭建主从复制的环境 熟悉主从的原理 处理主从的故障 处理主从延时 主从特殊结构的配置和使用(单独复制某个库) 了解主

MySQL Replication(主从复制)
1)企业中的职责:

  1. 搭建主从复制的环境
  2. 熟悉主从的原理
  3. 处理主从的故障
  4. 处理主从延时
  5. 主从特殊结构的配置和使用(单独复制某个库)
  6. 了解主从的架构演变
    在企业中做了什么:处理主从的异常故障,负责公司高可用架构的实现和后期维护

2)主从复制的介绍

  1. 主从复制基于binlog来实现
  2. 当主库发生新的操作,数据库会记录binlog
  3. 从库取得主库的binlog进行数据的回放
  4. 主从复制的过程是异步的MySQL主从复制

3)主从复制的前提(搭建)

  1. 2个或以上的数据库实例(可同机器多实例,不推荐)
  2. 主库需要开启二进制日志
  3. server_id 要不同,来区分不同的节点
  4. 在主库建立专用的复制用户
  5. 从库通过备份主库,达到和主库数据结构一模一样(mysqldump)
  6. 告诉从库,如何去连接主库(主库的IP,端口,复制用户的账户和密码,binlog日志的起点)
  7. 从库开启专门用于复制的线程

4)主从复制的搭建过程

  1. 准备两个MySQL节点
  2. 检查配置文件
    检查主库是否开启二进制日志
    vim /etc/my.cnf
    [mysqld]
    log-bin=master-log   #日志的名字定义为该名字(默认存储在/var/lib/mysql,也可以定义为 log-bin=/data/mysql-master 意为日志存储在/data/下名为m-m,/data必须存在)

    检查主从两库的server-id是否不同

    server-id=1 #只要两个节点不一样即可,建议主库的ID小于从库的ID
  3. 主库创建用于复制的用户
    登陆数据库
    mysql -uroot -p 
    mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123qwe';  #创建用于主从复制的用户,该用户运行在192.168.1.0网段登陆,且在所有库具有主从复制相关所有的权限
    flush privileges;   #刷新权限

    4.备份主库信息同步给从库

    mysqldump -u root -p -A --single-transaction -R -E --triggers  >all.sqll #导出所有的数据库相关信息且不会占用,复制到从数据库内。###在实际环境中可采用近期的备份日志,避免临时复制影响性能。
    mysql -uroot -p < all.sql 从库导入主库信息
  4. 告诉从库相关信息(从库指向主库)
    change master to 
    master_host='主库ip',
    master_user='复制用户',
    master_password='用户密码',
    master_port=3306,
    master_log_file='mysql-bin.*',     #复制时采用的二进制日志,参数参考下图
    master_log_pos=120,             #参数参考下图
    master_connect_retry=10;                 #断连重试次数
    开启复制
    start slave

MySQL主从复制

6.检测复制状态
检查是否开启了sql线程和IO线程
mysql> show slave status\G
两个yes即完成了一个初步的整个数据库的主从复制

MySQL主从复制

5) 主从复制的原理

  1. 主从复制中涉及的文件
    主库: binlog
    从库:relaylog 中继日志,master.info 主库信息文件,relaylog.info relaylog应用的信息

  2. 主从复制中涉及的线程
    主库:Binlog_Dump Thread : Dump_T 线程
    从库: SLAVE_IO_THREAD :IO线程 ;SLAVE_SQL_THREAD :sql线程
    6) 主从复制的监控
    1.命令
    show slave status\G        #友好的方式展示slave的状态,从库执行
    show master status\G     #友好的方式展示slave的状态,主库执行

    2.对比

    1.主从库同步信息对比(master.info)
    show slave status\G             #命令  从库
    Slave_IO_State: Waiting for master to send event   #等待新的事务
    Master_Host: 192.168.1.14               #主库IP
    Master_User: repl                            #同步用户
    Master_Port: 3306                            #主库端口   
    Connect_Retry: 10                           #连接次数
    Master_Log_File: master-log.000003   #日志编号名称,相当于村庄
    Read_Master_Log_Pos: 120  #日志具体位置,相当于你家详细地址
    show master status\G   #命令 主库
    File: master-log.000003         #日志编号名称,相当于村庄
    Position: 120                          #日志具体位置,相当于你家详细地址
    2.从库relaylog的应用信息 (relay-info)
    Relay_Log_File: localhost-relay-bin.000003 #当前使用的relaylog
    Relay_Log_Pos: 284                  #具体log位置点
    Relay_Master_Log_File: master-log.000003 #对应的主库的log
    3.从库线程的运行状态
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes  #IO和SQL两大同步线程
    Last_IO_Errno: 0             
    Last_IO_Error: 
    Last_SQL_Errno: 0
    Last_SQL_Error:  #具体的报错信息
    4.过滤复制有关的信息(后面会配置过滤)
    Replicate_Do_DB:          #复制的库
    Replicate_Ignore_DB:    #不复制的库
    Replicate_Do_Table:       #复制的表
    Replicate_Ignore_Table: 
    Replicate_Wild_Do_Table: 
    Replicate_Wild_Ignore_Table:
    5.从库同步的延迟时间(仅作为参考,详细还是要根据日志进行计算)
    Seconds_Behind_Master: 0
    6.延时从库(一般用于防止误操作)
    SQL_Delay: 0
    SQL_Remaining_Delay: NULL
    7.GTID复制相关的状态信息(下面会有)
    Retrieved_Gtid_Set: 
    Executed_Gtid_Set: 
    Auto_Position: 0

主从同步的详细过程和原理
MySQL主从复制

MySQL主从复制

上一篇: MySQL循环插入千万级数据

下一篇:主从同步-过滤复制

您可能感兴趣的文章

    暂无相关信息

相关阅读