zoukankan      html  css  js  c++  java
  • 三、mysql主从复制

    1 MySQL 主从复制
    1.1 主从复制的含义
    在 MySQL 多服务器的架构中,至少要有一个主节点(master),跟主节点相对的,我们把它叫做从节点(slave)。
    主从复制,就是把主节点的数据复制到一个或者多个从节点。主服务器和从服务器可以在不同的 IP 上,通过远程连接来同步数据,这个是异步的过程。
    1.2 主从复制的形式
    一主一从/
    一主多从 
    多主一从
    双主复制
    级联复制
    1.3 主从复制的用途
    数据备份:把数据复制到不同的机器上,以免单台服务器发生故障时数据丢失。
    读写分离:让主库负责写,从库负责读,从而提高读写的并发度。
    高可用 HA:当节点故障时,自动转移到其他节点,提高可用性。
    扩展:结合负载的机制,均摊所有的应用访问请求,降低单机 IO。
     
    主从复制是怎么实现的呢? 回顾:Redis 主从复制怎么实现的?
    1.4 binlog
    客户端对 MySQL 数据库进行操作的时候,包括 DDL 和 DML 语句,服务端会在日志文件中用事件的形式记录所有的操作记录,这个文件就是 binlog 文件(属于逻辑日志,跟 Redis 的 AOF 文件类似)。
    基于 binlog,我们可以实现主从复制和数据恢复。Binlog 默认是不开启的,需要在服务端手动配置。注意有一定的性能损耗。
    1.4.1 binlog 配置
    编辑 /etc/my.cnf
    log-bin=/var/lib/mysql/mysql-bin 
    server-id=1
    重启 MySQL 服务
    service mysqld stop 
    service mysqld start 
    
    ## 如果出错查看日志
    vi /var/log/mysqld.log
    cd /var/lib/mysql
     
    是否开启 binlog
    show variables like 'log_bin%';
    1.4.2 binlog 格式
    STATEMENT:记录每一条修改数据的 SQL 语句(减少日志量,节约 IO)。
    ROW:记录哪条数据被修改了,修改成什么样子了(5.7 以后默认)。
    MIXED:结合两种方式,一般的语句用 STATEMENT,函数之类的用 ROW。
     
    查看 binlog 格式:
    show global variables like '%binlog_format%';

    查看 binlog 列表 
    show binary logs;

    查看 binlog 内容
    show binlog events in 'mysql-bin.000001';

    用 mysqlbinlog 工具,基于时间查看 binlog
    (注意这个是 Linux 命令, 不是 SQL) 
    /usr/bin/mysqlbinlog --start-datetime='2019-08-22 13:30:00' --stop-datetime='2019-08-22 14:01:01' -d gupao /var/lib/mysql/mysql-bin.000001

    1.5 主从复制原理
    1.5.1 主从复制配置
    1、主库开启 binlog,设置 server-id
    2、在主库创建具有复制权限的用户,允许从库连接 
    GRANT REPLICATION SLAVE,
    REPLICATION CLIENT ON *.* TO 'repl'@'192.168.8.147' IDENTIFIED BY '123456';
    FLUSH PRIVILEGES;
    3、从库/etc/my.cnf 配置,重启数据库
    server-id=2 
    log-bin=mysql-bin 
    relay-log=mysql-relay-bin 
    read-only=1
    log-slave-updates=1
    log-slave-updates 决定了在从 binlog 读取数据时,是否记录 binlog,实现双主和级联的关键
    4、在从库执行
    stop slave;
    change master to master_host='192.168.8.146',
    master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',
    master_log_pos=4;
    start slave;
    5、查看同步状态 
    SHOW SLAVE STATUS G
    以下为正常: 

     

    1.5.2 主从复制原理
    这里面涉及到几个线程:
    1、slave 服务器执行 start slave,开启主从复制开关, slave 服务器的 IO 线程请
    求从 master 服务器读取 binlog(如果该线程追赶上了主库,会进入睡眠状态)。
    2、master 服务器创建 Log Dump 线程,把 binlog 发送给 slave 服务器。slave 服
    务器把读取到的 binlog 日志内容写入中继日志 relay log(会记录位置信息,以便下次继
    续读取)。
    3、slave 服务器的 SQL 线程会实时检测 relay log 中新增的日志内容,把 relay log
    解析成 SQL 语句,并执行。
  • 相关阅读:
    EditPlus 4.3.2502 中文版已经发布(12月5日更新)
    EditPlus 4.3.2499 中文版已经发布(11月21日更新)
    为什么有负频率,什么是相位谱 —— 关于傅立叶变换的随笔
    对“善于提问,主动解决问题”的程序员的吐槽
    .NET事件监听机制的局限与扩展
    .NET陷阱之六:从枚举值持久化带来大量空间消耗谈起
    深入挖掘.NET序列化机制——实现更易用的序列化方案
    在VMWare中建立Hadoop虚拟集群的详细步骤(使用CentOS)
    微信分享
    如何导入ShareSDK的sample
  • 原文地址:https://www.cnblogs.com/flgb/p/12057711.html
Copyright © 2011-2022 走看看