mysql数据库的主从复制

  • MySQL主从复制的应用场景

    • 当只有一台MySQL服务器要负责读写时,对于安全性,高可用,高并发等需求就不能满足,因此就要建立集群,集群的基础就是主从复制。

    • 原理(过程)

      • MySQL支持的复制类型

        • 基于语句的复制,基于二进制文件,效率高,有概率出错

          • binlog-fromat=STATMENT
        • 基于行的复制,复制内容,效率低,不容易出错

          • binlog-fromat=ROW
        • 混合模式,综上两种,效率与容错都折中 先语句,出错再行。

          • binlog-fromat=MIXED
      • 过程

        • 流程图

        • 首先主节点数据库要开启二进制日志功能

          • 进行相关数据库的修改之后,更新二进制文件,通知存储引擎提交事务。
        • 然后,当二进制日志文件添加新数据后,slave的I/O线程就会检测到,并将相关数据复制到slave的中继日志中,复制完毕后进行休眠。等待新的事件。

        • 最后,slave中的sql进程就会将中继日志中的事件进行重放(重做),

          • 需要注意的是slave的重放操作时串行的,当并行操作出现时,也是按串行来处理。
    • 实验操作

      • 准备前奏

        • 三台安装mysql的主机

          • 将内核与防火墙都关闭
        • 进行时间同步

          • 主节点服务器安装ntp

            • yum -y install ntp

            • 配置文件中添加如下语句

              • server 127.127.1.0

                • 主节点数据库作为权威时间的ntp服务器
              • fudge 127.127.1.0 stratum 8

                • 一种调整层级越小越接近权威时间
          • 从服务器安装ntp

            • 执行命令

              • ntptate 权威时间主机的IP地址
      • 过程

        • 要对主从服务器进行配置

          • 修改配置文件【mysqld】添加如下语句

            • server-id=11

              • 在这群集里面该服务的标识id,同一集群内id不能重复。
            • log-bin=master-bin

              • 二进制日志文件的前缀名称
            • binlog-format=MIXED

              • 进行主从复制时采用的模式:混合模式
            • replicate-ignore-db=test

              • 如果不想同步某个库就要把该参数写到从服务器的配置文件中
            • binlog-cache-size=1M

              • 缓存日志的大小,建立缓存降低磁盘的I/O压力
            • expire-logs-days=3

              • 自动清理日志的时间,合理设置,避免无法进行增量备份。
            • log-slave-updates=true

              • 进行主主复制需要
            • 修改后重启

          • 进入主节点服务器

            • 对从节点服务器创建授权账号

              • grant replication slave on *.* to 'slave'@'192.168.10.%' identified by '123456';

                • 从服务器将通过该账号进行混合模式的复制
              • flush privileges

            • 查看当前二进制日志文件的名称与位置

              • show master status;


                该项是从服务器建立主从复制连接的重要依据,要确保该项不会变动

                • 为了确保不会变动,可以有两种方式

                  • 方法一

                    • 关闭前端的服务,这样对mysql数据库便不会有数据被修改。
                  • 方法二

                    • 人性化的设定,将要导出的表进行锁定,或全局锁定,这样只能进行读,并不会断开连接。

                      • 锁定所有表

                        • global lock
                      • 锁定单个表

                        • lock tables 表名 write

                          • write:表示该表不能读但能写

                          • read:表示该表不能写只能读

                      • 解锁

                        • unlock tables
              • 当用了一段时间的数据库要进行主从复制时,不能通过修改起始位置来进行偷懒。

          • 从服务器的配置

            • 在配置文件mysqld中添加如下语句

              • server-id=22

                • 确保server-id在群集中唯一即可
              • relay-log=relay-log-bin

                • 给中继日志文件起前缀名
              • relay-log-index=slave-relay-bin.index

                • 从服务器启动时需要检查中继日志文件中的中继日志信息1,这里在该处定义了名字。
            • 修改后重启服务器

            • 进入从服务器

              • 建立主从连接

                • change master to master_host='192.168.10.101' 主服务器地址 master_user='myslave' 要用哪个账号连接 master_password='123456' 连接的账号密码是什么 master_log_file='master-bin.000002' 要读取的日志文件名叫什么 master_log_pos=154 要从那个位置开始进行复制
              • 开始连接

                • start slave;
              • 查看连接

                • show slave status\G


                  划红线部分必须要为yes状态 可以查看其他信息是否正确,如果建立主从连接的参数出错,那么需要停止slave的I/O进程才能再次提交。

          • 需要注意的是,从服务器的重启对主从建立的连接影响较小很快就能重建连接,而主服务器上的重启会造成较长时间的连接时间。

以上所有内容全选复制后粘贴到xmind上便可形成条理性笔记!!!

相关推荐
金海境科技2 分钟前
【服务器数据恢复】H3C CAS虚拟化平台HP存储qcow2文件损坏快照丢失数据恢复案例
服务器·数据库·经验分享
Now喔9 分钟前
mysql-笔记一
mysql
正儿八经的少年15 分钟前
Spring 事务保证数据一致性
java·数据库·spring
foo1st20 分钟前
MySQL 8.0(Windows)升级笔记
数据库·笔记·mysql
张人玉22 分钟前
基于 Vue 3 + ECharts + Express + SQLite 的可视化大屏与业务管理系统——YOLOv8 高精度车辆行人检测与计数系统
数据库·vue.js·yolo·sqlite·echarts·express
吴声子夜歌31 分钟前
MongoDB 4.x——高级特性(Change Stream和事务)
数据库·mongodb
是店小二呀32 分钟前
NanoPi R4S怎么搭私人云盘?iStoreOS与WebDAV完整教程
数据库·人工智能
Database_Cool_43 分钟前
云数据库备份是怎么实现的、支持时间点恢复吗:阿里云 RDS MySQL 备份与 PITR 详解
数据库·mysql·阿里云
名字还没想好☜1 小时前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
NWU_LK1 小时前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库