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=ROW
    
    mysql_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 TO
     SOURCE_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 event
                      Source_Host: 127.0.0.1
                      Source_User: replica
                      Source_Port: 3306
                    Connect_Retry: 60
                  Source_Log_File: master-bin.000003
              Read_Source_Log_Pos: 1311 // 以上显示的信息, 能跟master节点对上
                   Relay_Log_File: F177XMTP97-relay-bin.000002
                       ... // 其他信息省略
                       Last_Errno: 0
                       Last_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的主从集群架构搭建教程,主从复制原理详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第5章——与HTTP协作的Web服务器

第5章——与HTTP协作的Web服务器 用单台虚拟主机实现多个域名 ​ 一台服务器可以使用虚拟主机功能拥有多个域名。 ​ 域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。当请求发送到服务器时,已经是以IP地址形式访问了。 ​ 相同的…

基于Python的投资组合收益率与波动率的数据分析

基于Python的投资组合收益率与波动率的数据分析 摘要:該文通过研究马科维茨的投资组合模型,并将投资组合模型应用到包含6只金融股票的金融行业基金中。首先通过开源的财经接口Tushare获取股票原始数据,接着利用数据分析的黄金组合库&#xf…

AWS re:Invent 2024 现场实录 - It‘s all about Scale

时隔五年,再度造访美国,也是同样的主题,参加在拉斯维加斯举行的 AWS re:Invent 大会。 会场 从 2012 起第一届开始,每年的 re:Invent 大会都放在拉斯维加斯,主会场也都放在威尼斯人酒店 (Venetian)。有小伙伴好奇这背…

【实用干货】日本上市药品价格、说明书、在研新药在线查询网站及数据库

众所周知,日本对上市药品公开信息程度非常高,我们在了解药品信息时常常会访问日本药监局(日本药方局)官网的PMDA数据库来查询信息,但由于网站的不熟悉或语言障碍原因,导致查找某个药品信息需要花费大量时间,如药物综述…

【vba源码】自动获取汇率

Hi,大家好! 没有想到今天居然是腊八,过了腊八就是年,离过年越来越近了,那在这里给大家就拜个年,希望大家在新的一年都有好事发生。 最近在弄点小项目,在项目遇到了一个汇率计算的问题&#xff…

【学习路线】Python 算法(人工智能)详细知识点学习路径(附学习资源)

学习本路线内容之前,请先学习Python的基础知识 其他路线: Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析(数据科学) >> Python 算法(人工智能) >> Pyth…

CV-LLM经典论文解读|VTimeLLM: Empower LLM to Grasp Video MomentsVTimeLLM:赋能大语言模型理解视频片段

论文标题 VTimeLLM: Empower LLM to Grasp Video Moments VTimeLLM:赋能大语言模型理解视频片段 论文链接: VTimeLLM: Empower LLM to Grasp Video Moments论文下载 论文作者 Bin Huang, Xin Wang, Hong Chen, Zihan Song, Wenwu Zhu (Tsinghua Un…

机器学习基础-大语言模型

目录 大语言模型的基本概念 “大”体现在什么地方? 预训练微调两阶段的基本流程和作用 第一阶段:利用语言模型进行无监督预训练 第二阶段:通过监督微调的模式解决下游任务 BERT模型中MLM和NSP机制基本概念 MLM NSP Prompt学习的基本概…

给Kkfileview加请求头鉴权接入

所有接入前端token放localStorage, 或者后端cookie中获取鉴权 本案例以放localStorage为例 一、创建global.js $(document).ready(function() {// 设置全局的 AJAX 请求头$.ajaxSetup({headers: {Authentication: localStorage.getItem(Authentication) }}); }); 二。全部模…

flutter 专题二十四 Flutter性能优化在携程酒店的实践

Flutter性能优化在携程酒店的实践 一 、前言 携程酒店业务使用Flutter技术开发的时间快接近两年,这期间有列表页、详情页、相册页等页面使用了Flutter技术栈进行了跨平台整合,大大提高了研发效率。在开发过程中,也遇到了一些性能相关问题和…

源代码编译安装X11及相关库、vim,配置vim(2)

一、编译安装vim 编译时的cofigure选项如下.只有上一步的X11的包安装全了(具体哪些是必须的,哪些是多余的没验证),configure才能认为X的库文件和头文件是可以用的。打开多个编程语言的支持特性。 ./configure --prefixpwd/mybui…

爬虫学习记录

1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…

大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术

联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…

主机A与主机B建立TCP连接的三次握手过程

( 1 )主机 A 的 TCP 向主机 B 发出连接请求 SYN 报文段(第一次握手)。( 1 分) ( 2 )一旦包含 SYN 报文段的 IP 数据报到达主机 B , SYN 报文段被从数据报…

SpringCloud系列教程:微服务的未来(六)docker教程快速入门、常用命令

对于开发人员和运维工程师而言,掌握 Docker 的基本概念和常用命令是必不可少的。本篇文章将带你快速入门 Docker,并介绍一些最常用的命令,帮助你更高效地进行开发、测试和部署。 目录 前言 快速入门 docker安装 配置镜像加速 部署Mysql …

Express 加 sqlite3 写一个简单博客

例图: 搭建 命令: 前提已装好node.js 开始创建项目结构 npm init -y package.json:{"name": "ex01","version": "1.0.0","main": "index.js","scripts": {"test": &q…

C++:字符数组

一、字符数组介绍 数组的元素如果是字符类型,这种数组就是字符数组,字符数组可以是一维数组,可以是二维数组 (多维数组)。我们接下来主要讨论的是一维的字符数组。 char arr1[5]; //⼀维字符数组 char arr2[3][5];//⼆…

基于SpringBoot实现的保障性住房管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

分享3个国内使用正版GPT的网站【亲测有效!2025最新】

1. molica 传送入口:https://ai-to.cn/url/?umolica 2. 多帮AI 传送入口:https://aigc.openaicloud.cn?inVitecodeMYAAGGKXVK 3. 厉害猫 传送入口:https://ai-to.cn/url/?ulihaimao

LabVIEW瞬变电磁接收系统

利用LabVIEW软件与USB4432采集卡开发瞬变电磁接收系统。系统通过改进硬件配置与软件编程,解决了传统仪器在信噪比低和抗干扰能力差的问题,实现了高精度的数据采集和处理,特别适用于地质勘探等领域。 ​ 项目背景: 瞬变电磁法是探…