Linux Ubuntu24.04配置安装MySQL8.4.5高可用集群主从复制!

MySQL 主从复制(Replication)是实现数据高可用、读写分离及异地容灾的核心机制之一。主库写、从库读,提升并发能力;读写分离,减轻主库压力。

本地 windows 系统有一个Linux Ubuntu子系统,版本为Ubuntu 24.04.2 LTS。

图片

想在这个子系统上安装Mysql主从配置,打开官网:https://dev.mysql.com/downloads/mysql/ 进行下载操作。

图片

下载链接有那么多,下载哪个呢?有几个概念也不太理解。

一、什么是DEB

DEB Bundle (捆绑包) 是一组 .deb 文件的压缩包(通常是 .tar.gz),里面包含多个 .deb 安装包。

比如 mysql-8.4.5-debian11-x86_64.deb-bundle.tar 包含了 mysql-common_8.4.5.deb、mysql-community-client_8.4.5.deb、mysql-community-server_8.4.5.deb、mysql-community-libs_8.4.5.deb等等。可以用 tar -xvf 解开看。

.deb 文件里包含了某个软件的二进制可执行文件、配置文件、依赖说明等等。

DEB Package 通常指的是 单个的 .deb 软件包文件。mysql-community-server.deb 是 MySQL 服务端(数据库引擎),mysql-community-client.deb 是 MySQL 客户端程序(mysql命令行工具等),mysql-common.deb 是 共享配置,基础内容。“DEB Package”是最泛指的概念 —— 单个包。

也就是说,一个DEB Bundle 包含了多个deb,不需要那么多可以单独下载某个deb。

二、安装 MySQL8.4.5

MySQL已经升级到9了,选择MySQL8.4.5是因为这是一个长期支持的版本。

DEB 的安装方式:sudo dpkg -i xxx.deb 或 sudo apt install ./xxx.deb。下载单个 Deb包,可能会导致依赖不完整,仅适合临时测试环境,官网建议 apt 方式,那我就试试apt方式。

1、添加 MySQL 官方 APT 仓库

MySQL 的 APT 配置工具包下载地址:https://repo.mysql.com/

# 下载仓库配置包
wget https://repo.mysql.com/mysql-apt-config_0.8.34-1_all.deb

图片

头几次安装都失败了,原因是没找到合适的配置工具包,这次使用0.8.34版本。

# 安装并选择版本
sudodpkg-imysql-apt-config_0.8.34-1_all.deb

图片

图片

少截了一个图片,在第三个对话框中选择OK,否则就进入死循环了。

图片

2、更新软件源并安装

# 更新 APT 软件包列表
sudo apt update

图片

# 安装 MySQL Server 指定版本(注意包名格式)
# sudo apt install mysql-server=8.4.5-1ubuntu24.04sudo apt install mysql-server

图片

在安装的过程中会跳出来密码确认页面:

图片

图片

安装完成后,会在提示信息中看到配置文件的路径:

图片

3、验证安装

# 登录测试
mysql -u root -p

图片

确保 MySQL 服务正常启动并设置开机自启:

#启动 MySQL 服务
sudo systemctl start mysql
#停止 MySQL 服务
sudo systemctl stop mysql
#开机自启
sudo systemctl enable mysql
#禁止开机自启
sudo systemctl disable mysql
#检查服务状态
systemctl status mysql

在安装的时候踩了个大坑,刚开始怎么安装都安装失败,主要原因是配置工具包不是最新的,不是 Ubuntu24.04 支持的版本,但是想想都有Ubuntu对应的bed,怎么会不支持呢?最后找到了配置包的下载地址,换了个配置包就好了。

4、说说配置文件

查看mysql的配置文件,发现这个配置文件很绕、层层嵌套,这无疑加大了主从库配置的难度。

理想状态下的配置文件目录:

/etc/mysql/my.cnf

ubuntu的配置文件:

图片

查看我安装的目录结构:

图片

果真,my.cnf 导入了 /etc/mysql/conf.d/ 和 /etc/mysql/mysql.conf.d/ 这两个文件:

图片

为什么配置文件也要层层嵌套呢?

图片

好像有道理。

为了方便,我决定还是使用 /etc/mysql/my.cnf 这一个配置文件吧。

三、主从复制配置

1、停止现有服务

sudo systemctl stop mysql

图片

2、为mysql创建专属用户和用户组

#创建mysql用户组
groupadd -g 27 mysql#创建该组下的用户
sudo useradd -u 1027 -g mysql mysql-admin#查看用户的id信息
id mysql-admin

图片

3、 创建多实例环境

# 主库目录
sudo mkdir -p /var/lib/mysql-master
# 更改目录权限
sudo chown mysql-admin:mysql /var/lib/mysql-master# 从库目录
sudo mkdir -p /var/lib/mysql-slave
# 更改目录权限
sudo chown mysql-admin:mysql /var/lib/mysql-slave# 更改启动目录下内容的权限
sudo chown mysql-admin:mysql /var/run/mysqld/

图片

4、配置文件统一配置

编辑 /etc/mysql/my.cnf

sudo nano /etc/mysql/my.cnf

/etc/mysql/my.cnf 内容设置如下:

[mysqld_multi]
mysqld=/usr/bin/mysqld_safe  # 使用守护进程启动
mysqladmin=/usr/bin/mysqladmin
log=/var/lib/mysqld_multi.log[mysqld1]
# 源服务器(原主服务器)配置
server-id=1
port=3306
# 启用二进制日志
log_bin=/var/lib/mysql-master/mysql-bindatadir=/var/lib/mysql-master
# 主库socket
socket=/var/run/mysqld/mysqld-master.sock
pid-file=/var/run/mysqld/mysqld-master.pid# 需要复制的数据库(可选)
binlog-do-db=rsdun
binlog-do-db=rsdun-circle# 不需要复制的数据库(可选)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys# 设置日志保留时间(天),7天 = 7×24×60×60 = 604800秒
binlog_expire_logs_seconds=604800# 主服务器默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ciuser=mysql-admin[mysqld2]
# 副本服务器(原从服务器)配置
server-id=2
port=3307datadir=/var/lib/mysql-slave
# 从库socket
socket=/var/run/mysqld/mysqld-slave.sock
pid-file=/var/run/mysqld/mysqld-slave.pid# 启用中继日志
relay_log = /var/lib/mysql-slave/relay-log
relay_log_index = /var/lib/mysql-slave/relay-log.index# 从服务器默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci# 副本服务器专用设置
read_only=1user=mysql-admin
4. 初始化并启动实例
# 初始化源服务器
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql-admin --datadir=/var/lib/mysql-master

图片

# 初始化副本服务器
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql-admin --datadir=/var/lib/mysql-slave

图片

# 启动实例
sudo mysqld_multi start# 查看启动情况
sudo mysqld_multi report

根据上面的密码使用客户端修改主从库的密码:

图片

5、主服务器配置

连接主服务器:

mysql -S /var/run/mysqld/mysqld-master.sock -u root
# 或
mysql -u root -p --protocol=TCP -P 3306

创建复制用户

-- 主库创建复制用户
CREATE USER 'repl'@'localhost' IDENTIFIED BY '123456';# 分配复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';#授权后需要刷新后,才能生效;
flush privileges; # 查看主服务器状态
SHOW BINARY LOG STATUS; 

图片

6、从服务器配置

连接从服务器:

mysql -S /var/run/mysqld/mysqld-slave.sock -u root
# 或
mysql -u root -p --protocol=TCP -P 3307-- 从库配置主库信息
CHANGE REPLICATION SOURCE TO SOURCE_HOST='127.0.0.1', SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=1207,SOURCE_CONNECT_RETRY=10;# 授权复制用户名密码
START REPLICA USER='repl' PASSWORD='repl_password';# 启动从服务器复制进程
START REPLICA;
# 停止从服务器的复制过程
STOP REPLICA;
# 检查从服务器状态,替代原来的 SHOW SLAVE STATUS
SHOW REPLICA STATUS; 

图片

执行这一系列步骤后,同步状态出错了。

出错原因:

图片

大概意思是,mysql8.4.5默认采用的是 caching_sha2_password 插件,要求安全连接(SSL/TLS),而我目前并没有配置SSL。因此呢还需要把同步用户的插件调整为mysql_native_password 插件。

7、开启 mysql_native_password 插件

先停止主从库的服务,在my.cnf增加 mysql_native_password 配置:

mysql_native_password=on

在windows server2008上通过设置mysql_native_password=on就生效了,在这个系统上应该也可以。

图片

主从库都要加这个配置项目,设置后进行重启。

# 重启主从库
sudo mysqld_multi reload 1,2

图片

发现上面这个命令没有用,只能使用最简单粗暴的杀死命令,然后在启动服务器。

# 查找端口号所在pid
sudo lsof -i :3306
# 杀死pid
sudo kill -9 3670

图片

如果还不行,那就重启电脑吧,重启电脑能解决百分之九十的问题。

重启后再次登录主库:

mysql -u root -p --protocol=TCP -P 3306
# 查询同步用户的插件
select host,user,plugin from mysql.user where user='repl';# 修改主库同步用户的插件:
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl_password' REQUIRE NONE;# 刷新生效
FLUSH PRIVILEGES;

图片

REQUIRE NONE 表示 MySQL 用户账户可以在不加密的连接上进行身份验证和操作。这是 MySQL 用户账户的默认安全要求级别。

四个相关的参数:
REQUIRE NONE:不强制要求加密连接(默认)。
REQUIRE SSL:要求使用 SSL 加密连接。
REQUIRE X509:要求使用有效的 X509 证书。
REQUIRE CIPHER:要求使用特定加密算法 。

从到从库,再把从库的复制操作走一遍:

mysql -u root -p --protocol=TCP -P 3307-- 从库配置主库信息
CHANGE REPLICATION SOURCE TO SOURCE_HOST='127.0.0.1', SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=1207,SOURCE_CONNECT_RETRY=10;# 授权复制用户名密码
START REPLICA USER='repl' PASSWORD='repl_password';# 启动从服务器复制进程
START REPLICA;
# 停止从服务器的复制过程
STOP REPLICA;
# 检查从服务器状态,替代原来的 SHOW SLAVE STATUS
SHOW REPLICA STATUS; 

图片

最后查看主从配置的状态:

图片

终于配置成功了。

8、在从库上创建后只读用户

CREATE USER 'root_readonly'@'%' IDENTIFIED BY '123456';
# 只读授权
GRANT SELECT ON *.* TO 'root_readonly'@'%';
#执行刷新,刷新后;
flush privileges;

四、最后总结

这次安装一点也不顺利,重装过好多次,有时候是在mysql8.4.5初始化那一步就错了,有时候是在启动的时候报错,反倒是配置主从库的顺利一点。

一方面,对Linux ubuntu系统不熟悉。另一方面,Linux系统对文件的权限管理比较严格。还有一点,最近做事有点不用心

回顾这些次的安装,每次都是文件权限的问题,但是当时没有意识到是文件权限的问题,还以为配置错了,走了很多弯路。

使用Linux系统,一定要特别留意文件夹权限!不要设置错了!

比如说这两个设置目录权限:

# 更改目录权限
sudo chown mysql-admin:mysql /var/run/mysqld
# 更改目录下所有内容的权限
sudo chown mysql-admin:mysql /var/run/mysqld/

这两个命令是不一样的。

第一个命令,最后不带斜杠的,作用于 /var/run/mysqld 这个目录本身(作为一个文件对象),只改变目录本身的 ownership,不影响目录内的内容 。

第二个命令带斜杠的,末尾的斜杠表示这是一个目录路径,在大多数情况下,行为与第一个命令相同(改变目录本身的 ownership),在某些特殊情况下(如当 `/var/ /var/run/mysqld 是符号链接时),行为可能会有不同。

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

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

相关文章

R基于逻辑回归模型实现心脏病检测及SHAP值解释项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 心血管疾病是全球范围内导致死亡的主要原因之一,每年有数百万人因此失去生命。在众多的…

嵌入式学习笔记 -函数嵌套时以及异常响应时,LR使用的具体过程

函数嵌套时以及异常响应时,寄存器LR的作用存在显著区别,理解这个问题对于理解freeRTOS底层代码的实现大有帮助,具体使用过程如下: 一 函数嵌套时的LR使用的具体过程 在ARM架构(特别是M0处理器)中,函数嵌套调用时LR(L…

Java String函数的使用

文章目录 String字符串比较字符串查找转化字符串替换字符串拆分字符串截取(常用)字符串的不可变性 String str本来是字符串常量的引用,应该打印地址,但是编译器重写了toString方法,所以打印hello String 的构造方法 …

Oracle 11G RAC重启系统异常

vmware安装centos7环境部署Oracle RAC (11.2.0.4) 部署时所有资源情况都是正常的,关机重启虚拟机后集群资源状态异常,请教CSDN大佬 – 部署规划 域名地址备注rac16192.168.31.16rac17192.168.31.17rac16vip192.168.31.26viprac17vip192.168.31.27vip…

吉林省CCPC与全国邀请赛(东北地区赛)游记

总述: 本次赛段共获得一银(吉林省赛)、一铜(东北地区赛)、一铁(全国邀请赛的成绩)。总体成绩跟校内赛的情况相比队伍状态与发挥水准都有提升),但也体现出很多不足&#x…

「Python教案」循环语句的使用

课程目标 1.知识目标 能使用for循环和while循环设计程序。能使用循环控制语句,break、continue、else设计程序。能使用循环实际问题。 2.能力目标 能根据需求合适的选择循环结构。能对嵌套循环代码进行调试和优化。能利用循环语句设计&am…

OpenCV---findCountours

一、基本概念与用途 findContours是OpenCV中用于在二值图像中查找轮廓的核心函数。轮廓作为连续的点集,能够精确勾勒出物体的边界,广泛应用于目标检测、形状分析、图像分割等领域。 函数核心价值 目标检测:通过轮廓定位图像中的物体&#…

20250523-BUG:无法加载“GameLib/Framework.h“头文件(已解决)

BUG:无法加载"GameLib/Framework.h"头文件(已解决) 最近在打开新的C项目时报了这个错,我是按照以下步骤来排除的BUG,希望对您有所帮助~ 检查【C/C】-【附加包含目录】中的路径有无问题,一般需要加…

商品条形码查询接口如何用C#进行调用?

一、什么是商品条码查询接口? 1974年6月26日,美国俄亥俄州的一家超市首次使用商品条码完成结算,标志着商品条码正式进入商业应用领域。这项技术通过自动识别和数据采集,极大提升了零售行业的作业效率,减少了人工录入错…

SD07_NVM的安装及相关操作

以下是在 Windows 系统 上使用 NVM(Node Version Manager) 管理多个 Node.js 版本的详细步骤,从零开始操作: 一、准备工作 卸载旧版 Node.js 打开 控制面板 → 程序和功能,找到已安装的 Node.js 和 npm,彻底…

OSI 深度安全防御体系架构深度剖析

文章目录 前言什么是 OSI 深度安全防御体系架构各层的安全防御措施物理层数据链路层网络层传输层会话层表示层应用层 OSI 深度安全防御体系架构的优势全方位防护深度防御灵活性和可扩展性 总结 前言 大家好,我是沛哥儿。今天咱们来深入探讨一下 OSI 深度安全防御体…

大模型应用:开发移动端页面个人中心页面提示词

角色 你是一个移动端web页面开发专家,擅长开发移动端页面,使用原生web技术(html,css,js),开发的页面针对手机移动端友好 技术栈 使用基础的Html,CSS,JavaScript方案实现&#xff…

从零到一:影刀RPA学习者的破局之路

1. 学习目标与预期差距分析 1.1 官方课程学习目标梳理 影刀RPA的官方课程旨在帮助学习者掌握RPA(机器人流程自动化)的基本概念、操作技能和常见应用场景。课程内容通常包括: RPA基础理论:介绍RPA的定义、优势、发展历程以及与其…

计算机组成与体系结构:硬盘驱动器(Hard Disk Drives)

目录 💽 硬盘驱动器(HDD):传统的固定辅助存储设备 什么是硬盘驱动器? 硬盘的工作原理 HDD 的物理结构 Disk Pack(盘组) Tracks(磁道) Cylinders(柱面&…

GitCode镜像仓库批量下载开发实录

GitCode作为国内领先的开源代码托管平台,其镜像仓库批量下载功能对开发者生态建设与开源协作效率提升具有关键价值。本文基于企业级代码资产管理需求,系统记录从需求分析到生产部署的全周期开发实践。内容覆盖镜像仓库同步机制设计、分布式任务调度优化、…

基线配置管理:为什么它对网络稳定性至关重要

什么是基线配置(Baseline Configuration) 基线配置(Baseline Configuration)是经过批准的标准化主设置,代表所有设备应遵循的安全、合规且运行稳定的配置基准,可作为评估变更、偏差或未授权修改的参考基准…

AJAX get请求如何提交数据呢?

在 AJAX 中使用 GET 请求提交数据,主要通过 在 URL 后拼接查询参数 的方式实现,具体步骤如下: 1.构造带参数的 URL 将数据以 键值 的形式拼接在 URL 后,多个参数间用 & 连接。例如: var url "https://exa…

基于FashionMnist数据集的自监督学习(对比式自监督学习SimCLR算法)

目录 一,对比式自监督学习 1.1 简介 1.2 常见算法 1.2.1 SimCLR (2020) 1.2.2 MoCo (2020) 1.2.3 BYOL (2021) 1.2.4 SimSiam (2021) 1.2.5 CLIP (2021) 1.2.6 DINO (2021) 1.2.7 SwAV (2020) 二,代码逻辑分析 2.1 整体目标与流程 2.2 数据…

Linux:基础指令与内涵理解(下)与权限

1.mv 作用:将文件移动、文件重命名 语法: mv (选项) 源文件/目录 目标文件/目录 (1)将文件/目录移动到当前目录的新文件/目录(也就是重命名操作) 这里我们mv了test.txt文件到当前目录下当前并不存在的ln.tx…

卷积神经网络(CNN)入门学习笔记

什么是 CNN? CNN,全称 卷积神经网络(Convolutional Neural Network),是一种专门用来处理图片、语音、文本等结构化数据的神经网络。 它模仿人眼识别图像的方式: 从局部到整体,一步步提取特征&a…