• Mysql主从复制


    介绍

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

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

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

      

    MySQL复制过程分成三步:

    1. master将数据变更写入二进制日志

    2. slave将master的二进制日志拷贝到它的中继日志(relay log)

    3. slave重做中继日志中的事件,生成对应的数据存储到自己的数据区

    实现

    实现MySQL的主从复制其实非常简单,只需要对MySQL进行简单的配置即可

    ① 准备服务器

    提前准备两台服务器,并且在服务器中安装MySQL,服务器的信息如下:

    数据库IP数据库版本
    Master192.168.136.1295.5.49-log
    Slave192.168.136.1305.5.49-log

    ==第一台可以直接使用前面一天的,然后重新安装一台Linux操作系统,然后在上面仅仅部署mysql即可==

    ② 防火墙设置

    分别修改两台服务器的防火墙策略,放行3306端口

     firewall-cmd --zone=public --add-port=3306/tcp --permanent
     firewall-cmd --reload
     firewall-cmd --zone=public --list-ports

    ③ 主库配置

    下面操作仅仅在master库上执行[1. 开启二进制日志 2.创建账户]

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

    ==注:截图就是Master的当前状态,执行完此SQL后,在主从复制完成之前这段时间,不能再执行其他操作==

    ④ 从库配置

    下面操作仅仅在slave库上执行

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

    这个里面的 有个注意点,不用瞎写,直接上下一样就好。

     得到这个结果,就代表你成功了

     

    测试

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

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

    ① 在master中创建数据库itcast, 刷新slave查看是否可以同步过去

    ② 在master的itcast数据下创建user表, 刷新slave查看是否可以同步过去

     

    ③ 在master的user表中插入一条数据, 刷新slave查看是否可以同步过去

     

  • 相关阅读:
    Web前端系列技术之JavaScript进阶(从ES6开始)①
    凌特杯,第二届,数字音频传输。simulink matlab
    mysql指令行登录如何添加mysql.sock的配置?(亲测)
    Day626.连接池使用注意事项 -Java业务开发常见错误
    IDEA 中贼好用的插件-开发利器
    PaddlePaddle自然语言处理总结
    神经体液调节网络,神经网络能干嘛
    基于Andriod技术“厕ce”APP-计算机毕业设计源码+LW文档
    2022“杭电杯”中国大学生算法设计超级联赛(8)签到题5题
    Px30裸板初始化及固件升级
  • 原文地址:https://blog.csdn.net/weixin_65549694/article/details/125937897