Ubuntu 24.04 安装 mysql-8.0.37-linux-glibc2.28-x86_64

我爱海鲸 2026-01-04 14:49:37 暂无标签

简介乌班图

Ubuntu 24.04 安装 mysql-8.0.37-linux-glibc2.28-x86_64 完整文档(全路径 / 大小写敏感 / 专用业务用户)

一、环境说明

  • 操作系统:Ubuntu 24.04 LTS(64 位)
  • MySQL 版本:mysql-8.0.37-linux-glibc2.28-x86_64(二进制免编译版本)
  • 安装路径:全部组件统一部署至 /opt/mysql(含程序、数据、日志)
  • 核心适配:
    1. Ubuntu 24.04 老旧依赖(libaio/ncurses/tinfo)适配
    2. MySQL 大小写敏感配置(区分表名大小写)
    3. 全路径标准化部署,便于运维管理
    4. 创建专用业务用户(仅授予增删改查权限,遵循最小权限原则)
  • 前提条件:拥有服务器 root 权限,已配置网络(或已下载好 MySQL 安装包)

二、前期准备

1. 系统环境检查

bash
 
运行
 
 
 
 
# 检查系统架构(确认是x86_64)
uname -m
# 检查glibc版本(Ubuntu 24.04默认≥2.12,满足要求)
ldd --version | head -1
 

2. 安装核心依赖(适配 Ubuntu 24.04)

Ubuntu 24.04 移除了 libncurses5/libaio1 等老旧包名,安装兼容依赖:
bash
 
运行
 
 
 
 
# 更新源并安装核心依赖
sudo apt update
sudo apt install -y libaio-dev libncurses-dev wget tar libnuma1 libnuma-dev software-properties-common -y
 
  • 忽略libncursesw5/libncurses5等包找不到的报错,后续通过软链接适配
  • 核心依赖说明:
    • libaio-dev:提供 MySQL 异步 I/O 所需的 libaio 库
    • libncurses-dev:ncurses 基础库,满足终端交互依赖
    • libnuma1/libnuma-dev:NUMA 内存管理依赖
    • wget/tar:下载 / 解压安装包工具

3. 下载 MySQL 安装包

方式 1:外网直接下载
bash
 
运行
https://downloads.mysql.com/archives/community/
 
 
 
# 创建下载目录
mkdir -p /opt/mysql/src && cd /opt/mysql/src
# 下载MySQL 8.0.18二进制包
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz
 
方式 2:本地上传(无外网)将下载好的mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz上传至/opt/mysql/src目录。

4. 验证安装包完整性(可选)

bash
 
运行
 
 
 
 
# 校验MD5(官网可查对应MD5值)
md5sum /opt/mysql/src/mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz
 

三、安装步骤

1. 创建 MySQL 系统用户和组

bash
 
运行
 
 
 
 
# 创建mysql组(系统级,运行MySQL服务)
sudo groupadd mysql
# 创建mysql用户(无登录权限,仅运行服务)
sudo useradd -r -s /sbin/nologin -g mysql mysql
 

2. 解压安装包并统一部署至 /opt/mysql

bash
 
运行
 
 
 
 
cd /opt/mysql/src
# 解压安装包
sudo tar -xvf mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz
# 移动解压后的程序目录至/opt/mysql(统一路径)
sudo mv mysql-8.0.37-linux-glibc2.28-x86_64 /opt/mysql/server
# 创建数据、日志、临时、配置目录(全路径归拢至/opt/mysql)
sudo mkdir -p /opt/mysql/{data,log,tmp,conf}
 

3. 目录权限配置(关键)

bash
 
运行
 
 
 
 
# 授权所有/opt/mysql目录给mysql系统用户
sudo chown -R mysql:mysql /opt/mysql
# 设置目录权限(数据目录严格限制为700)
sudo chmod 755 /opt/mysql/server
sudo chmod 700 /opt/mysql/data
sudo chmod 755 /opt/mysql/log
sudo chmod 755 /opt/mysql/tmp
 

4. 适配 Ubuntu 24.04 库文件(解决依赖缺失)

4.1 适配 libaio 库(核心)

Ubuntu 24.04 的 libaio 库名为libaio.so.1t64,需创建 MySQL 识别的软链接:
bash
 
运行
 
 
 
 
# 查找系统libaio库路径
sudo find /usr/lib -name "libaio.so*"
# 创建libaio.so.1软链接(MySQL 8.0.37硬编码依赖)
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1
# 刷新系统库缓存
sudo ldconfig
 

4.2 适配 ncurses/tinfo 库(解决终端交互依赖)

bash
 
运行
 
 
 
 
# 查找系统ncurses/tinfo库路径
sudo find /usr/lib -name "libncurses.so.6"
sudo find /usr/lib -name "libtinfo.so.6"

# 1. 适配libncurses.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libncursesw.so.6 /usr/lib/x86_64-linux-gnu/libncursesw.so.5

# 2. 适配libtinfo.so.5(mysql客户端依赖)
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.5 /usr/lib/libtinfo.so.5

# 刷新系统库缓存
sudo ldconfig
 

5. 配置 my.cnf(含大小写敏感 + 全路径配置)

bash
 
运行
 
 
 
 
# 创建配置文件(统一放在/opt/mysql/conf下)
sudo vim /opt/mysql/conf/my.cnf
 
写入以下配置(根据服务器内存调整性能参数):
ini
 
 
 
 
 
[mysqld]
# 基础配置(全路径+大小写敏感核心)
user = mysql
basedir = /opt/mysql/server
datadir = /opt/mysql/data
socket = /opt/mysql/tmp/mysql.sock
pid-file = /opt/mysql/tmp/mysql.pid
port = 3306
server-id = 1
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 大小写敏感配置(关键:区分表名大小写,Linux默认开启,显式配置)
lower_case_table_names = 0  # 0=区分大小写;1=不区分;2=仅存储不区分(慎用)
# 注意:lower_case_table_names需初始化时配置,后续修改需重新初始化

# 日志配置(全路径归拢至/opt/mysql/log)
log-error = /opt/mysql/log/mysqld.err
slow_query_log = 1
slow_query_log_file = /opt/mysql/log/slow.log
long_query_time = 2
log_bin = /opt/mysql/log/mysql-bin
binlog_format = row

# 性能配置(根据服务器内存调整,示例为4G内存配置)
max_connections = 1000
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

[client]
socket = /opt/mysql/tmp/mysql.sock
port = 3306
default-character-set = utf8mb4

[mysqld_safe]
log-error = /opt/mysql/log/mysqld.err
pid-file = /opt/mysql/tmp/mysql.pid
 

6. 初始化 MySQL(生成 root 临时密码)

bash
 
运行
 
 
 
 
# 关键:--defaults-file必须作为第一个参数
# 简化版:my.cnf已配置datadir/basedir,无需重复指定
sudo /opt/mysql/server/bin/mysqld --defaults-file=/opt/mysql/conf/my.cnf --initialize --user=mysql
 
关键提示
  • 初始化无报错即成功,临时密码会写入/opt/mysql/log/mysqld.err
  • 若提示权限错误,重新执行:sudo chown -R mysql:mysql /opt/mysql
  • lower_case_table_names仅初始化时生效,若需修改需清空/opt/mysql/data重新初始化

7. 配置 systemd 系统服务

bash
 
运行
 
 
 
 
# 创建服务文件
sudo vim /usr/lib/systemd/system/mysqld.service
 
写入以下内容(适配 /opt/mysql 全路径):
ini
 
 
 
 
 
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=0
PermissionsStartOnly=true
# 绝对路径执行mysqld,指定自定义配置文件
ExecStart=/opt/mysql/server/bin/mysqld --defaults-file=/opt/mysql/conf/my.cnf $MYSQLD_OPTS
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
 

8. 启动 MySQL 服务并设置开机自启

bash
 
运行
 
 
 
 
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动MySQL
sudo systemctl start mysqld
# 设置开机自启
sudo systemctl enable mysqld
# 检查服务状态(显示active (running)即成功)
sudo systemctl status mysqld
 

9. 配置 MySQL 环境变量(全局可用)

bash
 
运行
 
 
 
 
# 添加到系统环境变量
sudo echo 'export PATH=$PATH:/opt/mysql/server/bin' >> /etc/profile
sudo echo 'export MYSQL_HOME=/opt/mysql/server' >> /etc/profile
# 生效配置
source /etc/profile
# 验证环境变量
echo $PATH | grep mysql
echo $MYSQL_HOME
 

四、MySQL 用户配置(root 改密 + 创建业务用户)

1. 获取 root 临时密码

bash
 
运行
 
 
 
 
# 从错误日志中筛选临时密码(关键!)
sudo grep "temporary password" /opt/mysql/log/mysqld.err
 
输出示例:A temporary password is generated for root@localhost: Abc123!xyz

2. 登录 MySQL 并修改 root 密码

bash
 
运行
 
 
 
 
# 使用临时密码登录(指定socket避免路径问题)
mysql -uroot -p -S /opt/mysql/tmp/mysql.sock
 
登录后执行以下 SQL(替换RootPasswd@123为自定义 root 强密码):
sql
 
 
 
 
 
-- 修改root本地密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'RootPasswd@123';
-- (可选)允许root远程访问(生产环境建议指定IP,如192.168.1.0/24)
CREATE USER 'root'@'%' IDENTIFIED BY 'RootPasswd@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
 

3. 创建专用业务用户(仅授予增删改查权限)

3.1 基础配置(本地访问 + 指定数据库)

sql
 
 
 
 
 
-- 1. 创建业务用户(示例:用户名mysql_user,密码UserPasswd@123,仅允许本地访问)
CREATE USER 'mysql_user'@'localhost' IDENTIFIED BY 'UserPasswd@123';

-- 2. 授予指定数据库的增删改查权限(示例:数据库名test_db,若需所有库替换为*.*)
-- 核心权限:SELECT(查)、INSERT(增)、UPDATE(改)、DELETE(删)
GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'mysql_user'@'localhost';

-- 3. (可选)允许远程访问(生产环境建议指定具体IP,如192.168.1.100)
CREATE USER 'mysql_user'@'%' IDENTIFIED BY 'UserPasswd@123';
GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'mysql_user'@'%';

-- 4. 刷新权限使配置生效
FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON test_db.* TO 'mysql_user'@'%';
FLUSH PRIVILEGES;
 

3.2 进阶配置(按需调整权限)

权限需求 权限语句补充
允许创建 / 删除表 GRANT CREATE, DROP ON test_db.* TO 'mysql_user'@'%';
允许执行存储过程 GRANT EXECUTE ON test_db.* TO 'mysql_user'@'%';
仅允许访问指定表 GRANT SELECT, INSERT ON test_db.tb_user TO 'mysql_user'@'%';
允许外键权限 GRANT REFERENCES ON *.* TO 'mysql_user'@'%';

3.3 适配客户端认证(解决 Navicat 等连接问题)

MySQL 8.0 默认使用caching_sha2_password,若客户端不兼容,修改业务用户认证插件:
sql
 
 
 
 
 
ALTER USER 'mysql_user'@'%' IDENTIFIED WITH mysql_native_password BY 'UserPasswd@123';
FLUSH PRIVILEGES;
 

4. 验证业务用户权限

sql
 
 
 
 
 
-- 退出root登录,使用业务用户登录
EXIT;
mysql -umysql_user -pUserPasswd@123 -S /opt/mysql/tmp/mysql.sock

-- 验证权限(切换到指定数据库)
USE test_db;
-- 尝试增删改查(正常执行即权限生效)
INSERT INTO tb_user (id, name) VALUES (1, 'test');
SELECT * FROM tb_user;
UPDATE tb_user SET name = 'test2' WHERE id = 1;
DELETE FROM tb_user WHERE id = 1;

-- 尝试创建数据库(应报错,无权限)
CREATE DATABASE new_db;
 

5. 开放 3306 端口(可选,远程连接需要)

bash
 
运行
 
 
 
 
# 临时关闭ufw防火墙(测试用)
sudo ufw disable
# 或永久开放3306端口
sudo ufw allow 3306/tcp
sudo ufw reload
 

五、验证安装与权限

1. 验证 MySQL 版本

bash
 
运行
 
 
 
 
# 环境变量生效后可直接执行
mysql -V
 
输出示例:mysql Ver 8.0.37 for Linux on x86_64 (MySQL Community Server - GPL)

2. 验证大小写敏感配置

sql
 
 
 
 
 
-- 使用root登录
mysql -uroot -pRootPasswd@123 -S /opt/mysql/tmp/mysql.sock
-- 创建测试库和表
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE TestTable (id INT);
CREATE TABLE testtable (id INT);
-- 查看表列表(应显示2个表,说明大小写敏感生效)
SHOW TABLES;
EXIT;
 

3. 验证业务用户权限

bash
 
运行
 
 
 
 
# 使用业务用户登录并执行操作
mysql -umysql_user -pUserPasswd@123 -S /opt/mysql/tmp/mysql.sock -e "USE test_db; SELECT * FROM TestTable;"
 
正常返回表数据(无报错)即权限配置成功。

六、常见问题解决

1. 初始化报错:unknown variable 'defaults-file=xxx'

bash
 
运行
 
 
 
 
# 修正参数顺序:--defaults-file必须作为第一个参数
sudo /opt/mysql/server/bin/mysqld --defaults-file=/opt/mysql/conf/my.cnf --initialize --user=mysql
 

2. mysql -V 报错:libtinfo.so.5 找不到

bash
 
运行
 
 
 
 
# 重新创建tinfo软链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
sudo ldconfig
 

3. 找不到 root 临时密码

bash
 
运行
 
 
 
 
# 重新初始化(清空数据目录)
sudo systemctl stop mysqld
sudo rm -rf /opt/mysql/data/*
sudo /opt/mysql/server/bin/mysqld --defaults-file=/opt/mysql/conf/my.cnf --initialize --user=mysql
# 重新查找密码
sudo grep "temporary password" /opt/mysql/log/mysqld.err
 

4. 业务用户权限不足

sql
 
 
 
 
 
-- 使用root登录补充权限
mysql -uroot -pRootPasswd@123 -S /opt/mysql/tmp/mysql.sock
GRANT [需要的权限] ON 数据库.表 TO 'mysql_user'@'%';
FLUSH PRIVILEGES;
 

5. 密码策略报错(密码强度不足)

sql
 
 
 
 
 
-- 放宽密码策略(测试环境,生产环境不建议)
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=6;
FLUSH PRIVILEGES;
 

七、常用运维命令

bash
 
运行
 
 
 
 
# 启动/停止/重启MySQL
sudo systemctl start mysqld
sudo systemctl stop mysqld
sudo systemctl restart mysqld
# 查看MySQL状态
sudo systemctl status mysqld
# 查看错误日志(排查问题核心)
sudo tail -f /opt/mysql/log/mysqld.err
# 查看慢查询日志
sudo tail -f /opt/mysql/log/slow.log
# root登录MySQL(指定socket)
mysql -uroot -p -S /opt/mysql/tmp/mysql.sock
# 业务用户登录MySQL
mysql -umysql_user -p -S /opt/mysql/tmp/mysql.sock
 

八、安全与运维注意事项

  1. 路径规范:
    • 所有 MySQL 相关文件均在/opt/mysql下,便于备份、迁移和运维
    • 禁止随意修改/opt/mysql目录权限,避免服务异常
  2. 权限最小化:
    • 业务用户仅授予必要的增删改查权限,禁止授予ALL PRIVILEGESGRANT OPTION
    • 生产环境中,业务用户建议限制仅允许指定 IP 访问(替换%为具体 IP)
  3. 大小写敏感:
    • lower_case_table_names=0是 Linux 默认值,符合 MySQL 官方最佳实践
    • 若需兼容 Windows 的不区分大小写,需设置为 1(需重新初始化)
  4. 生产环境建议:
    • 根据服务器内存调整my.cnf中的innodb_buffer_pool_size(建议为物理内存的 50%-70%)
    • 定期备份/opt/mysql/data(可通过 mysqldump 或二进制日志)
    • 定期修改 root 和业务用户密码,避免弱密码
  5. 依赖适配:
    • Ubuntu 24.04 的库文件软链接请勿删除,否则 mysql 客户端 / 服务端会报错
    • 若升级系统,需重新检查软链接是否失效

你好:我的2025