Mysql8.4.3LTS中离线部署的实现示例

 更新时间:2024年11月15日 11:45:44   作者:JavaOpsPro  
本文详细介绍了在Ubuntu 24.04系统上离线部署MySQL 8.4.3 LTS,包括环境配置、安装步骤等步骤,对小白有一定的帮助,感兴趣的可以了解一下

一、部署环境

软件:mysql8.4.3LTS

系统:ubuntu24.04

资源配置

资源分配的大小与业务系统的体量有关系;所以没有固定

CPU: 2核

内存: 4 GB

磁盘: 50 GB sda[系统盘] 50GB, 默认分区

sdc[数据盘] 100GB 挂载点 /dcdata

二、下载地址

MySQL :: Download MySQL Community Server

image-20241028163656913

版本选择

由于我的操作系统比较新, 通过 ldd --version 命令查看glibc版本为2.39,所以选择了 glibc 2.28的版本

**注:**如果操作系统支持的话还是选择新的;但是考虑兼容性和维护性,我个人的部署脚本中目前选择的还是glibc2.17的包;

演示使用的是glibc2.28版本的包,后续我也将这个版本的Mysql部署到开发和测试环境中使用,组员一起体验他的稳定性和性能。

三、部署详情

1. 上传安装包

将安装包上传到服务器中,使用root用户安装,上传路径

/root/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz

2. 解压软件包

安装包上传后,执行解压到/dcsm目录下

# 新建dcsm文件夹
mkdir /dcsm
tar -xvf /root/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz -C /dcsm
cd /dcsm && mv mysql-8.4.3-linux-glibc2.28-x86_64/ mysql

3. 安装mysql

3.3.1 创建mysql用户与用户组

查询系统中是否存在mysql用户

cat /etc/passwd | cut -f1 -d':' | grep -w "mysql" -c

groupadd mysql && useradd -r -g mysql -s /bin/false mysql

image-20241028165731601

3.3.2 授权安装文件夹

# 创建相关文件夹
mkdir -p /dcdata/mysql/log && mkdir -p /dcdata/mysql/data && mkdir -p /dcdata/mysql/run && mkdir -p /dcdata/mysql/lib

# 授权
chown -R mysql:mysql /dcsm/mysql && chown -R mysql:mysql /dcdata/mysql 

image-20241028170026153

3.3.3 安装libaio依赖 (坑)

这个依赖是和你操作系统版本有关系的;

ubuntu24.04 中关于libaio的坑

该系统在安装后自带libaio

image-20241028194337230

虽然whereis搜不到libaio.so.1 这个文件; 但系统中确实安装了 libaio;

这也是我后续初始化依然报错的原因;解决办法就是建立超链接,让mysql在初始化的时候找到这个命令

ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1

image-20241028194912390

这里介绍查找方法;

找一台和你镜像一样,或者操作系统版本一样的可以联网的机器;

apt search libaio

image-20241028182214358

/var/cache/apt/archives/ 下找到这个离线deb包; 在离线环境下就可以直接dpkg -i 安装这个依赖包了

注:如果不安装此依赖,后续初始化mysql数据库时会提示缺少此依赖,官网教程中也特意提到要安装这个依赖。

3.3.4 初始化Mysql数据库

cd /dcsm/mysql 

# 初始化
bin/mysqld --initialize --user=mysql --basedir=/dcsm/mysql --datadir=/dcdata/mysql/data --log-error=/dcdata/mysql/log/mysqld.log

image-20241028190817744

注:这是ubuntu24.04 上的坑。系统的 libaio.so.1 软连接的地址不存在;

解决方法就是重新建立一个软链接

ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1

3.3.5 编辑my.cnf

/etc/my.cnf

[mysqld]
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
#innodb_buffer_pool_size = 128M
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
basedir=/dcsm/mysql
datadir=/dcdata/mysql/data
socket=/dcdata/mysql/lib/mysql.sock
port=3306
log-error=/dcdata/mysql/log/mysqld.log
pid-file=/dcdata/mysql/run/mysqld.pid

# 开启远程,类似dblink
federated
log_bin_trust_function_creators=1
# 时间跟随本地
log_timestamps=system
# 允许最大连接数
max_connections=2000
# 关闭binlog日志
skip-log-bin

[mysql]
socket=/dcdata/mysql/lib/mysql.sock

3.3.6 配置环境变量

### 添加到系统服务中
cp /dcsm/mysql/support-files/mysql.server /etc/init.d/mysql  && chmod +x /etc/init.d/mysql

### 配置到环境变量中
echo "/dcsm/mysql/lib" >>/etc/ld.so.conf &&
echo "#MYSQL ENVIRONMENT" >>/etc/profile && 
echo "export PATH=/dcsm/mysql/bin:/dcsm/mysql/lib:\$PATH" >>/etc/profile && 
source /etc/profile

3.3.7 启动mysql

### 重新加载systemd的配置信息
systemctl daemon-reload
systemctl start mysql

image-20241028195723970

设置开机启动

systemctl enable mysql

3.3.8 登录mysql

获取初始化密码

grep 'temporary password' /dcdata/mysql/log/mysqld.log | awk '{print $NF}'

image-20241028195933800

3.3.8.1 创建root

创建mysql账号root,并设置密码

mysql --connect-expired-password -uroot -p

然后输入上述密码;

连上mysql后,修改root密码,

ALTER USER ‘root'@‘localhost' IDENTIFIED WITH mysql_native_password BY ‘MyNewPass';

image-20241028201140959

原因参考:[MySQL8.0.34 开始被弃用mysql_native_password插件](https://dev.mysql.com/doc/refman/8.4/en/native-pluggable-authentication.html#:~:text=MySQL client programs in MySQL 8.4 (and later),what is desired%2C like this%3A %24> mysql --default-auth%3Dmysql_native_password)

3.3.8.2 Plugin ‘mysql_native_password’ is not load 两种解决办法

重新启动该插件(不推荐)

具体做法就是修改my.cnf 文件

image-20241028201541964

重启mysql,即可生效;

使用官方推荐方式

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

3.3.8.3 授权

use mysql; update user set host = '%' where user ='root'; flush privileges;

至此部署完成~

四、快速部署脚本

该脚本适用于快速部署使用,请注意安装包版本与系统版本;

我用的是ubuntu24.04, mysql8.4.3tls

vim deploy_mysql.sh

#!/bin/bash

### 假设安装包已上传到/root下

### 解压软件包
mkdir /dcsm
tar -xvf /root/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz -C /dcsm
cd /dcsm && mv mysql-8.4.3-linux-glibc2.28-x86_64/ mysql

### 创建 mysql 用户与用户组
if [ $(cat /etc/passwd | cut -f1 -d':' | grep -w "mysql" -c) -eq 0 ]; then
    groupadd mysql && useradd -r -g mysql -s /bin/false mysql
fi

### 授权安装文件夹
mkdir -p /dcdata/mysql/log && mkdir -p /dcdata/mysql/data && mkdir -p /dcdata/mysql/run && mkdir -p /dcdata/mysql/lib
chown -R mysql:mysql /dcsm/mysql && chown -R mysql:mysql /dcdata/mysql

### 建立软链接
ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1

### 初始化 Mysql
cd /dcsm/mysql

bin/mysqld --initialize --user=mysql --basedir=/dcsm/mysql --datadir=/dcdata/mysql/data --log-error=/dcdata/mysql/log/mysqld.log

# 3.3.5 编辑 my.cnf
cat <<EOF > /etc/my.cnf
[mysqld]
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
#innodb_buffer_pool_size = 128M
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
basedir=/dcsm/mysql
datadir=/dcdata/mysql/data
socket=/dcdata/mysql/lib/mysql.sock
port=3306
log-error=/dcdata/mysql/log/mysqld.log
pid-file=/dcdata/mysql/run/mysqld.pid

# 开启远程,类似 dblink
federated
log_bin_trust_function_creators=1
# 时间跟随本地
log_timestamps=system
# 允许最大连接数
max_connections=2000
# 关闭 binlog 日志
skip-log-bin

[mysql]
socket=/dcdata/mysql/lib/mysql.sock
EOF

### 配置环境变量
cp /dcsm/mysql/support-files/mysql.server /etc/init.d/mysql && chmod +x /etc/init.d/mysql
echo "/dcsm/mysql/lib" >>/etc/ld.so.conf
echo "#MYSQL ENVIRONMENT" >>/etc/profile
echo "export PATH=/dcsm/mysql/bin:/dcsm/mysql/lib:\$PATH" >>/etc/profile
source /etc/profile

### 启动 mysql
systemctl daemon-reload
systemctl start mysql
systemctl enable mysql

### mysql修改密码 并允许远程
initial_password=$(grep 'temporary password' /dcdata/mysql/log/mysqld.log | awk '{print $NF}')
mysql --connect-expired-password -uroot -p"$initial_password" <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
use mysql; update user set host = '%' where user ='root'; flush privileges;
EOF

source /etc/profile

脚本授权

chmod +x deploy_mysql.sh

执行部署

./deploy_mysql.sh

image-20241028203200087

连接成功;

image-20241028203119358

 到此这篇关于Mysql8.4.3LTS中离线部署的实现示例的文章就介绍到这了,更多相关Mysql8.4.3LTS 离线部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • MySQL 中的权限管理及验证流程

    MySQL 中的权限管理及验证流程

    这篇文章主要介绍了MySQL 中的权限管理及验证流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • CentOS 7中升级MySQL 5.7.23的坑与解决方法

    CentOS 7中升级MySQL 5.7.23的坑与解决方法

    我们在安装升级的时候会遇到一些问题,不过可能每个人遇到的问题不一样,多找找才能解决问题哟,下面这篇文章主要给大家介绍了关于在CentOS 7中升级MySQL 5.7.23遇到的一个坑与解决方法,需要的朋友可以参考下
    2018-10-10
  • MySQL性能优化

    MySQL性能优化

    MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化
    2013-02-02
  • MYSQL子查询和嵌套查询优化实例解析

    MYSQL子查询和嵌套查询优化实例解析

    本文通过实例向大家介绍了MYSQL子查询和嵌套查询优化的相关内容,附代码示例,具有一定参考价值。希望对大家使用MySQL有所帮助。
    2017-10-10
  • MySQL中的引号和反引号的区别与用法详解

    MySQL中的引号和反引号的区别与用法详解

    这个问题是我在学习数据库的时候遇到的一个问题,我当时并不能理解下图中的一些情况,后来我也请教了一位大佬给我解答,最后在大佬和度娘的帮助下我大概理解了这个反引号的东西
    2021-10-10
  • mysql sql_mode="" 的作用说明

    mysql sql_mode="" 的作用说明

    在看discuz源码时看到了sql_mode="",不知道是干嘛的,猜想是设置模式,但是不清楚是什么模式,于是从网上搜了下,sql_mode="" 的作用
    2011-08-08
  • 浅谈MySQL数据库表锁了怎么解锁

    浅谈MySQL数据库表锁了怎么解锁

    在使用 MySQL 数据库时,有时候会发生某个表被锁住的情况,这可能会导致其他用户无法对该表进行读写操作,影响系统的正常运行,本文主要介绍了浅谈MySQL数据库表锁了怎么解锁,感兴趣的可以了解一下
    2023-10-10
  • MySQL实现崩溃恢复的几种方法

    MySQL实现崩溃恢复的几种方法

    MySQL 使用一系列日志和恢复机制来实现崩溃恢复,确保数据库在发生崩溃后可以恢复到一致的状态,主要依赖的日志包括 Redo Log、Undo Log 和 Binary Log,下面就来详细的介绍一下
    2025-08-08
  • Mysql中关于on,in,as,where的区别

    Mysql中关于on,in,as,where的区别

    这篇文章主要介绍了Mysql中关于on,in,as,where的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 阿里云Centos 7.5安装Mysql的教程

    阿里云Centos 7.5安装Mysql的教程

    这篇文章主要介绍了阿里云Centos 7.5安装Mysql的教程,需要的朋友可以参考下
    2017-07-07

最新评论