暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql主从复制的原理和实战

231
  • 实战

1、背景

    在后端的数据库如果是单点部署,那么可能出现如果这个数据库挂机了那么将没有其他数据库可以顶替的问题,即存在单点故障的风险,因此后端的数据一般都是一主多从的方法搭建。


2、主从架构的优势

    1、分担主库的读压力,提高主库的写性能 

    2、从库作为副本可以有效保障主库数据安全性,如果主库挂机了,从库将顶上


3、以一主一从的模式搭建高可用主从架构的例子demo


搭建说明:在两台服务器上安装好mysql,下面的两台mysql服务器的信息

    1、主库的服务器私有IP:172.28.144.179
    2、主从的mysql用户名:root
    3、主库的mysql密码:mysqlroot
    4、从库的服务器私有IP:172.28.144.180
    5、从库的mysql用户名:root
    7、从库的mysql密码:mysqlslave
    复制

    第一步、在【主】数据库上创建一个用户名和密码,该用户只能在从数据库的服务器上登陆。

      GRANT REPLICATION SLAVE ON *.* to 'slave'@'172.28.144.180' identified by 'Slave.666';
      FLUSH PRIVILEGES;
      复制


      第二步、编辑【主】数据的配置文件 etc/my.cnf

      注:这是告诉主数据库开启bin log,同步merlin数据库的内容

        # 开启binlog
        log-bin=mysql-bin
        server-id=100
        # 需要同步的数据库,如果不配置则同步全部数据库
        binlog-do-db=merlin
        # binlog⽇志保留的天数,清除超过20天的⽇志
        # 防⽌⽇志⽂件过⼤,导致磁盘空间不⾜
        expire-logs-days=20
        复制


        第三步、重启【主】数据库

          systemctl restart mysqld
          复制


          第四步、进入【从】数据库执行

            CHANGE MASTER TO
            //主数据库的地址
            MASTER_HOST='172.28.144.179',
            //主数据库上创建的用户名
            MASTER_USER='slave',
            //主数据库上创建的密码
            MASTER_PASSWORD='Slave.666',
            //binlog文件
            MASTER_LOG_FILE='mysql-bin.000002',
            //binlog文件偏移
            MASTER_LOG_POS=154,
            master_port=3306;
            复制


            第五步、重启【从】数据库

              systemctl restart mysqld
              复制


              • 原理

              1、主从复制的架构图


              2、流程

                  1、主数据库会将变更数据存入binlog中,即在配置数据库主从时候指定的log-bin文件

                   2、主数据库的dump线程定期将bin log日志文件推送给从数据库的IO线程 

                  3、从数据库的IO线程将主数据库推送来的bin log文件写入relay log日志中

                   4、从数据库的sql线程在将relay log中的数据一条一条持久化到从数据库中。


              3、变更日志从主库到从库到方式

                  是主数据库主动将bin log 【推送】给从库。


              4、relay log的作用

                  从服务器 I/O 线程将主服务器的 Binlog ⽇志读取过来,解析到各类 Events 之后记录到从服务器本地⽂件,这个⽂件就被称为 relay log。然后 SQL 线程会读取 relay log ⽇志的内容并应⽤到从服务器,从⽽使从服务器和主服务器的数据保持⼀致。中继 ⽇志充当缓冲区,这样 master 就不必等待 slave 执⾏完成才发送下⼀个事件


              关于leetcode算法训练营:

                  加我微信号私聊参加训练营~

              本人用c++刷了800道左右的算法,java语言刷了600道左右的算法题,并对这些题做了详细的个人总结。本科期间系统学习了数据结构与算法课程,同时考研过程中写完了率辉主编的《2020年数据结构高分笔记》和《数据结构1000题》,看完的视频包括《mooc浙大数据结构国家精品课程》和《王道考研408数据结构课程》,《王道2019年算法题讲解视频》,最终以初试专业第三名进入了北理工软件工程专业。熟悉并掌握常见的数据结构,比如链表、数组、树、图、队列、堆栈等等,精通数据结构教材中的所有算法,比如常见的遍历算法、动态规划,递归,回溯,剪枝,并查集,最短路径,拓扑排序等等,所以快加入训练营吧,我们一起进步

              奔跑的小梁,公众号:梁霖编程工具库算法训练营,快来参加
              文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论