Mysql 8.4.3LTS 的离线部署

文章目录

    • 一、部署环境
    • 二、下载地址
    • 三、部署详情
      • [1. 上传安装包](#1. 上传安装包)
      • [2. 解压软件包](#2. 解压软件包)
      • [3. 安装mysql](#3. 安装mysql)
        • [3.3.1 创建mysql用户与用户组](#3.3.1 创建mysql用户与用户组)
        • [3.3.2 授权安装文件夹](#3.3.2 授权安装文件夹)
        • [3.3.3 安装libaio依赖 (坑)](#3.3.3 安装libaio依赖 (坑))
          • [ubuntu24.04 中关于libaio的坑](#ubuntu24.04 中关于libaio的坑)
        • [3.3.4 初始化Mysql数据库](#3.3.4 初始化Mysql数据库)
        • [3.3.5 编辑my.cnf](#3.3.5 编辑my.cnf)
        • [3.3.6 配置环境变量](#3.3.6 配置环境变量)
        • [3.3.7 启动mysql](#3.3.7 启动mysql)
        • [3.3.8 登录mysql](#3.3.8 登录mysql)
    • 四、快速部署脚本

一、部署环境

软件:mysql8.4.3LTS

系统:ubuntu24.04

资源配置

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

CPU: 2核

内存: 4 GB

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

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

二、下载地址

MySQL :: Download MySQL Community Server

版本选择

由于我的操作系统比较新, 通过 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目录下

shell 复制代码
# 新建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用户

shell 复制代码
cat /etc/passwd | cut -f1 -d':' | grep -w "mysql" -c

groupadd mysql && useradd -r -g mysql -s /bin/false mysql
3.3.2 授权安装文件夹
shell 复制代码
# 创建相关文件夹
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 
3.3.3 安装libaio依赖 (坑)

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

ubuntu24.04 中关于libaio的坑

该系统在安装后自带libaio

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

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

shell 复制代码
ln -s /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1

这里介绍查找方法;

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

apt search libaio

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

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

3.3.4 初始化Mysql数据库
shell 复制代码
cd /dcsm/mysql 

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

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

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

shell 复制代码
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

shell 复制代码
[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 配置环境变量
shell 复制代码
### 添加到系统服务中
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
shell 复制代码
### 重新加载systemd的配置信息
systemctl daemon-reload
systemctl start mysql
设置开机启动

systemctl enable mysql

3.3.8 登录mysql

获取初始化密码

shell 复制代码
grep 'temporary password' /dcdata/mysql/log/mysqld.log | awk '{print $NF}'
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';

原因参考:[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 文件

重启mysql,即可生效;

使用官方推荐方式
mysql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
3.3.8.3 授权
mysql 复制代码
use mysql; update user set host = '%' where user ='root'; flush privileges;

至此部署完成~

四、快速部署脚本

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

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

vim deploy_mysql.sh

shell 复制代码
#!/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

连接成功;

相关推荐
Zzzzmo_18 小时前
【MySQL】JDBC(含settings.xml文件配置/配置国内镜像以及pom.xml文件修改)
数据库·mysql
FirstFrost --sy19 小时前
MySQL内置函数
数据库·mysql
eggwyw19 小时前
MySQL-练习-数据汇总-CASE WHEN
数据库·mysql
bing_feilong1 天前
Mid360(2):运行livox_ros_driver2的demo失败
ubuntu·机器人
mygljx1 天前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
Bdygsl1 天前
MySQL(1)—— 基本概念和操作
数据库·mysql
身如柳絮随风扬1 天前
什么是左匹配规则?
数据库·sql·mysql
jiankeljx1 天前
mysql之如何获知版本
数据库·mysql
小李来了!1 天前
数据库DDL、DML、DQL、DCL详解
数据库·mysql
我科绝伦(Huanhuan Zhou)1 天前
【生产案例】MySQL InnoDB 数据损坏崩溃修复
数据库·mysql·adb