• Ubuntu系统安装MySQL主从模式集群(成功!)


    安装MySQL主从模式集群

    配置MySQL节点

    打开主节点的配置文件

    sudo vim /etc/mysql/my.cnf
    
    • 1
    [client]
    port=3306
    [mysqld]
    default-time_zone='+8:00'
    port=3306
    # 默认binlog文件的名称
    log_bin=mysql-bin
    # 当前服务器的ID,不能重复,推荐用服务器IP D段
    server-id=1
    # 允许主节点读写
    read-only=0
    # 数据刷盘参数=1时,只要有1个事务提交就会触发写盘的操作,安全性最高,并发性最差
    # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大,这里根据实际需求配置,不建议乱配。
    sync_binlog=0
    # 排除掉不需要同步的数据库列表
    binlog-ignore-db=performance_schema
    binlog-ignore-db=information_schema
    binlog-ignore-db=sys
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    重启MySQL服务

    sudo systemctl restart mysql
    
    • 1

    在主节点创建用户,将其权限赋予从节点,用于为从节点提供安全用户登录主节点拷贝二进制日志:

    CREATE USER 'slave01'@'%' IDENTIFIED BY '12345678';
    GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
    
    • 1
    • 2

    配置主节点:

    重新打开/etc/mysql/my.cnf文件:

    sudo vim /etc/mysql/my.cnf
    
    • 1
    [client]
    port=3306
    [mysqld]
    default-time_zone='+8:00'
    port=3306
    # 当前服务器的ID,不能重复
    server-id=2
    # 只允许从节点读
    read-only=1
    relay_log=mysql-relay-bin
    binlog-format=ROW
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    打开/etc/mysql/mysql.conf.d/mysqld.cnf文件,开启MySQL的远程连接:

    # 将bind-address改为0.0.0.0,表示允许远程连接
    bind-address=0.0.0.0
    
    • 1
    • 2

    重启MySQL服务

    sudo systemctl restart mysql
    
    • 1

    配置从节点:

    打开/etc/mysql/my.cnf文件:

    vim /etc/mysql/my.cnf
    
    • 1

    [mysqld]部分下面添加以下行:

    log_bin = /var/log/mysql/mysql-bin.log
    gtid-mode = ON
    enforce-gtid-consistency = ON
    
    • 1
    • 2
    • 3

    然后重启MySQL服务:

    sudo service mysql restart
    
    • 1

    开放端口

    (1)开放MySQL的端口

    sudo ufw allow 3306/tcp
    
    • 1

    (2)或者直接关闭防火墙

    sudo systemctl stop ufw
    
    • 1

    最后查看防火墙状态

    sudo ufw status
    
    • 1

    启动主从库

    进入主库,记录查询结果的前两列

    show master status;
    
    • 1

    进入从库控制台,输入:

    CHANGE REPLICATION SOURCE TO SOURCE_HOST='主库IP地址', SOURCE_USER='slave01',SOURCE_PASSWORD='12345678',SOURCE_LOG_FILE='binlog日志文件名',SOURCE_LOG_POS=binlog日志文件位置;
    
    • 1

    上述是8.0.23版本之后的,版本之前的如下:

    CHANGE MASTER TO MASTER_HOST='IP地址', MASTER_USER='',MASTER_PASSWORD='',MASTER_LOG_FILE='',MASTER_LOG_POS=XXX;
    
    • 1

    其中里面的主节点ip、主库密码需要更换为自己的ip和密码,File和Postion是在前面主库输入查看主库状态得到的信息。

    开启从节点

    start replica;  # 8.0.22版本之后
    start slave;   # 8.0.22版本之前
    
    • 1
    • 2

    在从库输入指令查看从节点列表

    show replica status\G;  # 8.0.22版本之后的指令
    show slave status\G;  # 8.0.22版本之前的指令
    
    • 1
    • 2

    如果要关闭从库

    STOP REPLICA;   # 8.0.22版本之后
    STOP SLAVE;     # 8.0.22版本之前
    
    • 1
    • 2

    同步数据

    在主节点创建数据库和表,并插入数据:

    CREATE DATABASE test;
    USE test;
    CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
    INSERT INTO users VALUES (1, 'John');
    
    • 1
    • 2
    • 3
    • 4

    在从节点查看是否存在表:

     use test;
     select * from users;
    
    • 1
    • 2

    测试集群

    在从节点执行:

    USE test;
    SELECT * FROM users;
    
    • 1
    • 2

    能看到数据,则主从节点数据同步成功。

  • 相关阅读:
    2023.11.18html中如何使用input/button进行网页跳转
    Docker:学习笔记【1】
    .NET异步编程模式(二)
    【重识云原生】第四章云网络4.7.5节vDPA方案——virtio的半硬件虚拟化实现
    论文阅读笔记---Image Inpainting with Local and Global Refinement
    Jmeter接口测试, 快速完成一个单接口请求
    基于Springboot实现汽车4S店销售管理系统
    使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
    ElasticSearch - 删除已经设置的认证密码(7.x)
    OAuth2的使用场景与理解(图解防止忘记)
  • 原文地址:https://blog.csdn.net/cleverstronge/article/details/136638525