mysql主从原理

随着访问量的增加,数据库压力的增加,需要对msyql进行优化和架构改造,优化方法有:

  • 高可用
  • 主从复制
  • 读写分离
  • 拆分库
  • 拆分表

原理

  • 异步复制过程
  • master开启bin-log日志功能,默认关闭
  • slave开启IO线程和SQL线程

过程

  1. salve执行slave start,salve服务IO线程会通过授权的用户连接上master,并请求master从指定的文件和位置之后发送bin-log日志内容
  2. master服务器接收到来自slave服务器的IO线程请求后,master服务器上的IO线程根据slave服务器发送的指定bin-log日志之后的内容,然后返回给slave的IO线程,返回的信息中出了bin-log日志内容wait,还有本次返回日志内容后在master服务器端新的binlog文件名已经在binlog中的下一个指定更新位
  3. slave的IO线程接收到信息后,将接收到的日志内容依次添加到salve端的relay-log文件的最末端,并将读取到的master端的bin-log的文件名和位置记录到master-info文件中,以便下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”、
  4. slave的SQL线程检测到relay-log中新增了内容后,会马上解析relay-log的内容成为master端真实执行时候的那些可执行的内容,并在自身执行。

主从配置

  • master my.cnf
  • [mysqld]
    datadir=/data/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=
    log-bin=mysql-bin
    server-id =
    auto_increment_offset=
    auto_increment_increment= [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    replicate-do-db =all

    slave my,cnf

  • [mysqld]
    datadir=/data/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=
    log-bin=mysql-bin
    server-id =
    auto_increment_offset=
    auto_increment_increment= [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    master-host =192.168.33.10
    master-user=tongbu
    master-pass=
    master-port =
    master-connect-retry=
    replicate-do-db =all

    maste

  • grant  replication  slave  on *.* to  'tongbu'@'%'  identified by  '';
    show master status;
    +------------------+----------+--------------+------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin. | | | |
    +------------------+----------+--------------+------------------+
    row in set (0.00 sec)

    slave

  • change master to
    master_host='192.168.33.10',master_user='tongbu',master_password='',master_log_file='mysql-bin.000006',master_log_pos=;
    show slave status\G

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

  • 两个状态为YES,代表slave已经启动两个线程,一个为IO线程,一个为SQL线程。

问题:如果master挂掉了,如果快速恢复服务

方法一:

  • 如果程序连的是master的IP,直接在slave服务器上添加master的IP即可
  • 手动操作,花费时间长,存在误操作可能,不推荐

方法二:

  • 使用keeplved、heartbeat作为HA检测软件
  • 检车mysql服务,不正常则自动切换到slave上

mysql运维入门2:主从架构的更多相关文章

  1. mysql运维入门5:MySQL+kepalived高可用架构

    keepalive 类似3/4/7层交换机制的软件,也就是平时说的第三层.第四层.第七层交换 作用是检测web服务器的状态,如果有一台web服务器.mysql服务器宕机.或工作出现故障,keepali ...

  2. mysql运维入门6:MySQL读写分离

    Amoeba 以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy 集中想用应用的请求,根据用户事先设置的规则,将SQL请求发送到特定的数据库上执行 基于此可以实现负载均衡.读写分离 ...

  3. mysql运维入门1:基础及备份还原

    存储引擎 myisam 表强调的是性能 执行速度比innodb类型更快 不提供事务支持 如果执行大量的select操作,是首选 支持表锁,不支持行锁 innodb 提供事务支持.外键等高级数据库功能 ...

  4. mysql运维入门4:索引、慢查询、优化

    MySQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都是以B-树的形式保存 如果没有索引,执行查询时,MySQL必须从第一个记录开始整表扫描,知道查询到符合要求的记录,记录越大,花费时 ...

  5. mysql运维入门3:MyISAM和InnoDB

    myisam 5.1的默认存储类型 基于传统的ISAM类型,Indexed Sequential Access Method,有索引的顺序访问方法 存储记录文件的标准方法 不是事务安全,不支持外键 表 ...

  6. 转:三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构

    在微信公众号看到一篇关于mycat的文章,觉得分析的很不错,给大家分享一下 三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构 原文链接:https://mp.weixin.qq.com/s ...

  7. Linux运维入门到高级全套常用要点

    Linux运维入门到高级全套常用要点 目 录 1. Linux 入门篇................................................................. ...

  8. mysql运维必会的一些知识点整理

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  9. 美图秀秀DBA谈MySQL运维及优化

    美图秀秀DBA谈MySQL运维及优化 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=401797597&idx=2& ...

随机推荐

  1. 基于口令的密码(PBE)

    基于口令的密码(PBE) 基于口令的密码(Password Based Encryption,PBE)是一种基于口令生成密钥,并使用该密钥进行加密的方法.其中加密和解密使用的是同一个密钥. 根据用户自 ...

  2. 《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——2.4 双路组相联高速缓存...

    本节书摘来自异步社区<现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)>一书中的第2章,第2.4节,作者:[美]Curt Schimmel著,更多章节内容可以访问云 ...

  3. 精确计算微信小程序scrollview高度,全机型适配

    众所周知,可以滑动的 scroll 组件在移动端非常的重要,几乎每个页面都要用到. 而小程序的 scroll-view 组件就比较坑了,非得指定一个高度才能正常使用.布局复杂的时候谁还给你算高度啊.. ...

  4. SAAS 何以“免费”实现盈利

    本文讲的是SAAS 何以"免费"实现盈利,[IT168 资讯]"天下没有免费的午餐",然而众多厂商却恰恰打出了免费这张王牌,且做出了不小的成绩,淘宝就凭借免费淘 ...

  5. 安装XCode7.1后,QT5.5出现的各种问题解决方案

    安装XCode7.1后,突然发现QT5.5编译不了程序了.直接在终端输入clang,竟然输出如下的信息. Agreeing to the Xcode/iOS license requires admi ...

  6. Linux下创建 code diff 和 合并 patch

    Linux 下经常需要给别人提供 patch 以及合 patch,这时需要用到 Linux 的 diff 和 patch 命令. 1. diff 命令 diff 命令常用来比较文件.目录,也可以用来制 ...

  7. Codeforces Round #622 (Div. 2) 1313 A

    Tired of boring office work, Denis decided to open a fast food restaurant. On the first day he made ...

  8. ACM-ICPC 2019 山东省省赛总结

    五题手快拿银,不然拿铜,甚至不拿,从结果上来看拿了铜牌对第一年的我们来说算好的,也不算太好. 从拿奖后的第一天,我想写这篇博客,但是我忍了下来,那时候被喜悦冲昏了头脑,当 冷静下来,我开始打算写这篇博 ...

  9. CF1324F Maximum White Subtree——换根dp

    换根dp,一般用来解决在无根树上,需要以每个节点为根跑一边dfs的dp问题 我们做两遍dfs 先钦定任意一个点为根 第一遍,算出\(f_i\)表示\(i\)的子树产生的答案,这里,子树指的是以我们钦定 ...

  10. MySQL高级(十三)--- 表锁

    前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...