Mac M2基于MySQL 8.4.3搭建(伪)主从集群

前置准备工作

安装MySQL 8.4.3

  • 参考博主之前的文档,在本地Mac安装好MySQL:Mac M2 Pro安装MySQL 8.4.3
  • 安装目录:/usr/local/mysql,安装好的MySQL都处于运行状态,需要先停止MySQL服务
  • 最快的方式:系统设置 → \rightarrow MySQL → \rightarrow Stop MySQL Server

设置环境变量

  • ~/.zshrc添加如下内容,

    export MYSQL_BASE=/usr/local/mysql
    # 在用户目录下创建mysql主从集群目录
    export MYSQL_CLUSTER=/Users/xxx/tmp/mysql
    # 3306端口对应master, 3307端口对应slave, 这里只创建两个节点
    export MYSQL_MASTER=${MYSQL_CLUSTER}/3306
    export MYSQL_SLAVE=${MYSQL_CLUSTER}/3307
    
  • 执行source ~/.zshrc让环境变量生效

创建集群目录

  • 创建 “主/从节点” 对应的目录
    # -p: 自动创建缺失的父目录, -v: 显示创建好的目录名
    mkdir -pv $MYSQL_MASTER $MYSQL_SLAVE
    mkdir -pv $MYSQL_MASTER/data $MYSQL_MASTER/log
    mkdir -pv $MYSQL_SLAVE/data $MYSQL_SLAVE/log
    
  • 如果环境变量生效,将在/Users/xxx/tmp/mysql 创建出33063307端口的对应目录
    # 以master为例
    cd $MYSQL_MASTER 
    ls -al # 将显示创建好的data log目录
    

启动master

新建cnf文件

  • $MYSQL_MASTER目录下新建3306.cnf文件,内容如下:

    [mysqld]
    # mysql启动用户
    user=mysql
    # 服务字符集
    character-set-server=utf8
    # 端口
    port=3306
    bind-address = 0.0.0.0
    # 用于通讯的套接字,由于是一机多实例,所以区分开
    socket=/Users/xxx/tmp/mysql/3306/mysql.sock
    # mysql安装目录
    basedir=/usr/local/mysql
    # 数据存放目录
    datadir=/Users/xxx/tmp/mysql/3306/data
    # master节点唯一标识
    server-id=1
    gtid_mode=ON
    enforce-gtid-consistency=true
    # master-info-repository=TABLE
    # relay-log-info-repository=TABLE
    # bin-log前缀
    log-bin=master-bin
    # bin-log-index前缀
    log-bin-index=master-bin.index
    binlog_format=ROW
    # 开启 mysql_native_password 认证
    mysql_native_password=ON[mysqld_safe]
    # 启动错误日志输出地址(可以改成自己的目录)
    log-error=/Users/xxx/tmp/mysql/3306/log/err.log
    
  • 修改上述文件为可执行文件:

    chmod 0755 $MYSQL_MASTER/3306.cnf
    

初始化master

  • 初始化master

    ${MYSQL_BASE}/bin/mysqld --defaults-file=${MYSQL_MASTER}/3306.cnf --initialize-insecure --explicit_defaults_for_timestamp --user=mysql --basedir=${MYSQL_BASE} --datadir=${MYSQL_MASTER}/data
    
  • 如果初始化成功,会有如下提示信息
    在这里插入图片描述

启动master进程

  • 启动master

    ${MYSQL_BASE}/bin/mysqld_safe --defaults-file=${MYSQL_MASTER}/3306.cnf &
    
  • 启动成功后,ps -ef | grep "mysql" | grep "3306" 命令查看,将新增两个进程
    在这里插入图片描述

  • 同时,在$MYSQL_MASTER目录将新增两个套接字相关的文件

  • 此时,可以通过root用户、以空密码的方式登录mysql:mysql -h 127.0.0.1 -u root -p

启动slave

创建cnf文件

  • $MYSQL_SLAVE目录下新建3307.cnf文件,内容如下:

    [mysqld]
    # mysql启动用户
    user=mysql
    # 服务字符集
    character-set-server=utf8
    # 端口
    port=3307
    # 用于通讯的套接字,由于是一机多实例,所以区分开
    socket=/Users/bytedance/tmp/mysql/3307/mysql.sock
    # mysql安装目录
    basedir=/usr/local/mysql
    # 数据存放目录
    datadir=/Users/bytedance/tmp/mysql/3307/data
    # master节点唯一标识
    server-id=2
    gtid_mode=ON
    enforce-gtid-consistency=true
    log_slave_updates=ON
    skip-slave-start=1
    #master-info-repository=TABLE
    #relay-log-info-repository=TABLE
    # bin-log前缀
    log-bin=master-bin
    # bin-log-index前缀
    log-bin-index=master-bin.index
    binlog_format=ROWmysql_native_password=ON[mysqld_safe]
    # 启动错误日志输出地址(可以改成自己的目录)
    log-error=/Users/bytedance/tmp/mysql/3307/log/err.log
    
  • 修改上述文件为可执行文件:

    chmod 0755 $MYSQL_SLAVE/3307.cnf
    

初始化slave

  • 初始化slave

    ${MYSQL_BASE}/bin/mysqld --defaults-file=${MYSQL_SLAVE}/3307.cnf --initialize-insecure --explicit_defaults_for_timestamp --user=mysql --basedir=${MYSQL_BASE} --datadir=${MYSQL_SLAVE}/data
    
  • slave初始化成功的信息同初始化master,参考上面的截图即可

启动slave进程

  • 启动slave

    ${MYSQL_BASE}/bin/mysqld_safe --defaults-file=${MYSQL_SLAVE}/3307.cnf  &
    
  • 启动成功后,ps -ef | grep "mysql" | grep "3307" 命令查看,将新增两个进程
    在这里插入图片描述

  • 同时,在$MYSQL_SLAVE目录将新增两个套接字相关的文件

  • 此时,可以通过root用户、以空密码的方式登录mysql:mysql -h127.0.0.1 -P3307 -uroot -p(截图省略,同master)

开启主从复制

master上的操作

创建主从复制用户

  • (可跳过)为root用户设置密码

    alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
    flush privileges;
    
  • 创建主从复制用户

    create user 'replica'@'%' identified with 'mysql_native_password' by '123456';
    grant replication client,replication slave on *.* to 'replica'@'%'; 
    flush privileges;
    
  • 查看用户信息,查询结果中将包含replica用户

    SELECT User, Host FROM mysql.user;
    

查看主节点的binlog信息

  • 执行如下SQL,查看主节点的binlog信息。主要是获取如下两个坐标,后续设置slave节点时需要使用

    mysql>  SHOW BINARY LOG STATUS\G;
    *************************** 1. row ***************************File: master-bin.000003 # 坐标1: 日志文件Position: 1311 # 坐标2: 日志文件位置Binlog_Do_DB:Binlog_Ignore_DB:
    Executed_Gtid_Set: 8b52fb06-ca82-11ef-a11f-04d82f6466d3:1-5
    1 row in set (0.00 sec)
    

slave上的操作

创建主从复制用户

  • (可跳过)为root用户设置密码

    alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
    flush privileges;
    
  • 创建主从复制用户

    CREATE USER 'replica'@'%' IDENTIFIED WITH 'mysql_native_password' BY '123456';
    grant replication slave on *.* to 'replica'@'%';
    FLUSH PRIVILEGES;
    
  • 查看用户信息,查询结果中将包含replica用户(截图省略)

    SELECT User, Host FROM mysql.user;
    

设置主机节点信息

  • 执行如下SQL,设置主节点信息

    CHANGE REPLICATION SOURCE TOSOURCE_HOST='127.0.0.1',SOURCE_PORT = 3306,SOURCE_USER='replica',SOURCE_PASSWORD='123456', -- 填写master节点的基本信息SOURCE_LOG_FILE='master-bin.000003',SOURCE_LOG_POS=1311; -- 使用之前SHOW BINARY LOG STATUS展示的坐标信息
    

开启主从复制

  • 开启主动复制

    start replica;
    
  • 查看主动复制开启是否成功

    mysql> show replica status\G;
    *************************** 1. row ***************************Replica_IO_State: Waiting for source to send eventSource_Host: 127.0.0.1Source_User: replicaSource_Port: 3306Connect_Retry: 60Source_Log_File: master-bin.000003Read_Source_Log_Pos: 1311 // 以上显示的信息, 能跟master节点对上Relay_Log_File: F177XMTP97-relay-bin.000002... // 其他信息省略Last_Errno: 0Last_Error:  // 这里未显示错误, 代表主从复制开启成功... // 其他信息省略
    

验证主从复制

  • 上面只是从基本信息看,主从复制开启成功了,还需要具体地验证才靠谱

master上的操作

  • 在master节点上新建测试库

    create database test;
    
  • 并创建一个测试表

    use test;
    create table t(id int primary key ,name varchar(10));
    insert into t(id, name) values(1,'hello');
    
  • 查询新插入的数据

slave上的操作

  • 登录slave节点,查看刚在master创建的库表

    show database;
    # 查询测试库中的数据
    use test;
    select * from t;
    
  • 能查询到,表示主从复制工作正常

  • 库表信息都没有任何问题,主从复制创建成功 😄

一些问题的解决办法

主动复制开启失败

  • 虽然通过show replica status未看到错误信息,但是验证主从复制时,发现slave节点上未同步master上的库
  • 可能是跟笔者一样,中途为了重新设置master的信息,关闭了replica
    • 中途想通过 CHANGE REPLICATION SOURCE TO 重新设置master的信息

    • MySQL报错,提示

      ERROR 3021 (HY000): This operation cannot be performed with a running replica io thread; run STOP REPLICA IO_THREAD FOR CHANNEL '' first.
      
    • 执行 STOP REPLICA IO_THREAD FOR CHANNEL '';停止了replica

  • 此时,可以通过 start replica;重新开启主从复制。如无意外,再次查询slave节点,能查到来自master节点的库表信息
  • 如果还不行,可以试试参考博客。注意:需要将博客中的start slave改成 start replica:mysql8.0的主从集群架构搭建教程,主从复制原理详解

主从节点的关闭

  • 如果遇到初始化失败,或想关闭服务了,最好通过如下方式完整的关闭MySQL服务
    ps -ef | grep "mysqld" | grep "3306" | grep -v grep |  awk '{print $2}' | xargs kill -9
    # 查看对应端口是否存在tcp监听
    lsof -i:3306
    kill -9 $PID
    

后记

  • 超级感谢博客,里面使用的各种命令都符合MySQL 8.4.3的规则:mysql 8.0 搭建主从集群注意事项
  • 其次,感谢博客给的主从复制未开启的解决思路:mysql8.0的主从集群架构搭建教程,主从复制原理详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502022.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络IP协议

IP(Internet Protocol,网际协议)是TCP/IP协议族中重要的协议,主要负责将数据包发送给目标主机。IP相当于OSI(图1)的第三层网络层。网络层的主要作用是失陷终端节点之间的通信。这种终端节点之间的通信也叫点…

密钥管理系统在数据安全解决方案中的重要性

密钥管理系统在数据安全解决方案中占据着举足轻重的地位,其重要性体现在以下几个方面:一、保障数据机密性 密钥管理系统通过生成、存储和管理加密密钥,确保了数据的机密性。这些密钥用于加密和解密数据,只有授权用户才能访问和使…

关于PINN进一步的探讨

pinn 是有监督、无监督、半监督? PINN(Physics-Informed Neural Networks,物理信息神经网络)通常被归类为一种有监督学习的方法。在PINN中,神经网络的训练过程不仅依赖于数据点(例如实验观测数据&#xff0…

设计形成从业务特点到设计模式的关联

规范和指引在应用架构、数据架构等各架构方向上形成规范性约束指导。同一个决策要点、架构单元在统一的架构原则指导下,会因业务特点差异有不同的实现,经过总结形成了最佳实践。在开展新应用的设计时,根据决策要点以及相关的业务特点&#xf…

Framebuffer 驱动

实验环境: 正点原子alpha 开发板 调试自己编写的framebuffer 驱动,加载到内核之后,显示出小企鹅 1. Framebufer 总体框架 fbmem.c 作为Framebuffer的核心层,向上提供app使用的接口,向下屏蔽了底层各种硬件的差异; 准确来说fbmem.c 就是一个字符设备驱动框架的程序,对…

STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)

一:步进电机简介 步进电机又称为脉冲电机,简而言之,就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩,步进电机的角位移量与输入的脉冲个数严格成正…

WPS-JS宏快速上手

WPS JS宏注意事项 代码后面可以不写分号“ ; ”; 缩进对程序的运行影响不大,但为了易读(防止自己以后看不懂),还是乖乖写好; 代码是逐行运行的,意味着下面一行代码错了,前面的代码…

Conda 安装 Jupyter Notebook

文章目录 1. 安装 Conda下载与安装步骤: 2. 创建虚拟环境3. 安装 Jupyter Notebook4. 启动 Jupyter Notebook5. 安装扩展功能(可选)6. 更新与维护7. 总结 Jupyter Notebook 是一款非常流行的交互式开发工具,尤其适合数据科学、机器…

【CVPR 2024】【遥感目标检测】Poly Kernel Inception Network for Remote Sensing Detection

0.论文摘要 摘要 遥感图像(RSIs)中的目标检测经常面临几个日益增加的挑战,包括目标尺度的巨大变化和不同范围的背景。现有方法试图通过大核卷积或扩张卷积来扩展主干的空间感受野来解决这些挑战。然而,前者通常会引入相当大的背…

C++语言编程————C++的输入与输出

1.面向过程的程序设计和算法 在面向过程的程序设计中,程序设计者必须指定计算机执行的具体步骤,程序设计者不仅要考虑程序要“做什么”,还要解决“怎么做”的问题,根据程序要“做什么”的要求,写出一个个语句&#xff…

Fabric链码部署测试

参考链接:运行 Fabric 应用程序 — Hyperledger Fabric Docs 主文档 (hyperledger-fabric.readthedocs.io) (2)fabric2.4.3部署运行自己的链码 - 知乎 (zhihu.com) Fabric2.0测试网络部署链码 - 辉哥哥~ - 博客园 (cnblogs.com) 1.启动测试…

《米塔》为什么能突破160万销量?

1、跟完蛋美女有一定的类似之处,都是针对用户需求打造的商品,所以取得良好的销量不意外。 偏宅的玩家有陪伴、被重视、被爱的需求, 而厂商很懂,无论真人还是二次元都只是手段。 完蛋也是突破百万销量,成为黑马。 2、…

ESP32自动下载电路分享

下面是一个ESP32系列或者ESP8266等电路的一个自动下载电路 在ESP32等模块需要烧写程序的时候,需要通过将EN引脚更改为低电平并将IO0引脚设置为低电平来切换到烧写模式。 有时候也会采用先将IO接到一个按键上,按住按键拉低IO0的同时重新上电的方式进入烧写…

Backend - C# 的日志 NLog日志

目录 一、注入依赖和使用 logger 二、配置记录文件 1.安装插件 NLog 2.创建 nlog.config 配置文件 3. Programs配置日志信息 4. 设置 appsettings.json 的 LogLevel 5. 日志设定文件和日志级别的优先级 (1)常见的日志级别优先级 (2&…

java项目之社区医院信息平台源码(springboot+mysql)

项目简介 社区医院信息平台实现了以下功能: 社区医院信息平台的主要使用者分为管理员可以查看对护士信息进行添加,修改,删除以及查询操作;管理员可以对医生信息进行添加,修改,删除以及查询操作&#xff1…

《普通逻辑》学习记录——命题的判定与自然推理

目录 一、真值 1.1、真值联结词 1.2、真值联结词与逻辑联结词的区别 1.3、真值形式 1.3.1、真值符号的优先级和结合性规则 1.4、真值规则 1.4.1、条件式(蕴含式) P → Q 的真值规则 1.4.2、双条件式(等值式) P ↔ Q 的真值规则 1.…

Pycharm连接远程解释器

这里写目录标题 0 前言1 给项目添加解释器2 通过SSH连接3 找到远程服务器的torch环境所对应的python路径,并设置同步映射(1)配置服务器的系统环境(2)配置服务器的conda环境 4 进入到程序入口(main.py&#…

无刷直流电机(BLDC)六步换向法

文章目录 1、三相BLDCM 基本结构2、三相BLDCM 数学模型3、有霍尔位置传感器直流无刷电机工作原理4、无位置传感器直流无刷电机工作原理5、速度检测6、六步换向双闭环模型仿真6.1 模型总览6.2 系统及参数设置6.3 六步换向模块6.4 仿真效果 7、六步换向速度闭环PWM控制参考 1、三…

Windows11安装Oracle11g以及plsqldev工具连接配置

文章目录 一、安装Oracle数据库软件二、配置数据库三、配置监听(listener.ora)四、本地网络服务名配置(tnsnames.ora)五、网络服务名配置以及监听文件路径六、plsqldev工具连接Oracle配置 一、安装Oracle数据库软件 点击“setup.…

IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案

IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案 问题描述 在IEEE PDF eXpress上上传论文后,出现Font XXX is not embedded的问题。 该问题是指你所插入的图片等,没有将对应的字体嵌入进去。 解决方案 以下以Origin Lab图片…