• 读写分离--mysql主从复制配置


    理论基础

    问题描述

    在当前系统中,后台管理系统及移动端的用户在进行数据访问时都是直接操作数库MySQL的。

    而MySQL只有一台,那么就可能会存在如下问题:

    1. 读(select)和写(insert update delete)所有压力都由一台数据库承担,压力大

    2. 数据库服务器磁盘损坏则数据丢失,单点故障

    解决方案

    为了解决上述提到的两个问题,我们可以准备多台MySQL,其中一台主(Master)服务器,多台从(Slave)服务器,同时对外提供服务。

    主数据库负责数据的写入操作,而从数据库则负责数据的查询操作,我们把这种思路称之为读写分离

    而在这里存在一个问题,就是主库中的数据要实时的向各个从库进行同步,以保证整个数据系统的完整性,我们把这个过程称为主从复制

    主从复制

    理论

    MySQL数据库默认是支持主从复制的,底层基于MySQL数据库自带的 二进制日志 功能实现。

    二进制日志: 也成为binlog,这是MySQL自带的一种日志功能,它会记录下所有的增删改语句,但是不包括查询语句。

    主从复制原理:
    MySQL的主从复制其实就是由主库生成binlog,里面记录用户对数据库产生影响的操作。
    从库负责读取这个日志,并进行解析得到对应的SQL语句,然后在自己所在的服务器上执行,就可以得到跟主库一致的数据了。

    在这里插入图片描述

    MySQL复制过程分成三步:

    1. master将数据变更写入二进制日志
    2. slave将master的二进制日志拷贝到它的中继日志(relay log)
    3. slave重做中继日志中的事件,生成对应的数据存储到自己的数据区

    配置

    1.准备Master和Slave两台数据库准备配置读写分离,Master为主库
    2.配置两台服务器防火墙放行3306端口
    3.主库(Master)mysql配置文件配置:

    # 1. 修改mysql的配置文件/etc/my.cnf,保证下面两项
    vim /etc/my.cnf
    
    [mysqld]
    log-bin=mysql-bin   #[必须]启用二进制日志(当前默认已开启)
    server-id=1         #[必须]服务器唯一ID(当前默认就是1)
    # 2. 重启mysql服务
    systemctl restart mysql
    
    # 3. 登录mysql
    mysql -uroot -p1234
    
    # 4. 在mysql命令行中,创建数据同步的用户并授权
    #    本操作会在mysql中创建一个账户xiaoming,密码为Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限。
    #    常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
    
    GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
    
    # 在mysql命令行中,查看master同步状态
    show master status;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (从库配置用)
    在这里插入图片描述
    4.从库配置

    # 1. 修改mysql的配置文件/etc/my.cnf,保证下面两项
    vim /etc/my.cnf
    
    [mysqld]
    log-bin=mysql-bin   #[必须]启用二进制日志(当前默认已开启)
    server-id=2         #[必须]服务器唯一ID(当前默认1,必须手动修改成2)
    
    # 2. 重启mysql服务
    systemctl restart mysql
    
    # 3. 登录mysql
    mysql -uroot -p1234
    
    # 4. 在mysql命令行中,执行复制的操作
    #    注意,这条命令中各项参数,需要根据实际情况进行修改
    
    change master to  
    	master_host='192.168.136.128', -- 主节点ip地址(需要改)
    	master_user='xiaoming', -- 主节点创建的用于主从复制的账号
    	master_password='Root@123456', -- 上面账号的密码
    	master_log_file='mysql-bin.000002', -- 从主节点哪个日志文件开始同步(需要改)
    	master_log_pos=537; -- 从主节点日志文件的哪个位置开始同步(需要改)
    	
    # 5. 在mysql命令行中,开始复制操作
    # 	启动I/O线程从主库读取binlog,并存储到relaylog中继日志文件中。
    # 	启动SQL线程读取中继日志,解析后在从库重放。	
    start slave; 
    
    # 6. 在mysql命令行中,查看主从复制的状态
    show slave status;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    结束

    到此为止,主从复制环境已经搭建好了,接下来,我们可以连接上两台MySQL服务器进行测试。

    测试时,我们只需要在主库Master执行操作,查看从库Slave中是否将数据同步过去即可。

  • 相关阅读:
    01- ROS初识
    基于Redis+Cookie实现Session共享
    vue-video-play使用之播放hls格式视频
    DetailView/货币详情页 的实现
    【大数据Hive】hive 加载数据常用方案使用详解
    Vue实现todolist的删除功能
    35个MySQL常见面试题+答案
    Bigder:45/100 测试日报怎么报风险
    Telnet连接
    Linux CPU之mpstat
  • 原文地址:https://blog.csdn.net/q290994/article/details/126305706