详细linuxMysql配置手册下载:【配置手册】Linux环境下MySQL8.0.34手动安装与配置资源

所需的所有驱动:mysqlso.zip

my的压缩包:mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz资源-CSDN下载

测试的数据库文件:mysql数据库导出后的文件log-db.zip资源-CSDN下载

 linux编译mysql驱动:【linux】QT5.15.2通过aarch64使用mysql数据库8.0.34(以及编译linux下的mysql驱动)-CSDN博客

目录

快速配置mysql服务

copy.sh    

执行脚本./copy.sh

1.创建文件夹

2.直接在板上联网下载【或者用vscodessh把文件拖入】

3.解压mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz

4.# 更新软件源

5.# 安装 libaio 依赖

 6.创建用户组、用户、以及授权核心

7.数据目录初始化

8.vim 编辑mysqld.service

9.用vim创建并编辑my.cnf

10.查看服务器启动状态、设置mysqld服务开机自启

11. 停止 systemd 服务并杀掉进程

12. 跳过权限表启动 MySQL

13. # 无需输密码,直接回车

14.更新权限和授权TCP/IP 以及根远程

15.强制清理所有 mysqld 残留进程

16.开启mysql服务,测试登录

17.qt编译mysql驱动mysqlso.zip

18.mysql启动文件驱动mysqlso.zip

 19.将导出的编好码的.sql导入新数据库

mysql配置的shell脚本.sh

 执行脚本./mysqlbuild.sh

mysqlbuild.sh

v1版本

v2版本

常用调试命令

报错检查命令:

mysql服务命令:


快速配置mysql服务

安装路径:basedir=/data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64

数据数据库文件根目录:datadir=/data/Mysql/mysql-8.0.34/data/mysql

mysqlso和mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz 放在Mysql文件夹里

mkdir -p  /data/Mysql/                    #放压缩包和驱动
mkdir -p /data/Mysql/Importsql/db/        #存放导入文件log_db.sql

一键拷贝脚本:

将所有文件放在任意目录下,cd到目录下。执行脚本

vim copy.sh
copy.sh    
#!/bin/bash

# ==========================================
# 文件一键复制脚本(可自定义路径)
# 功能:将当前目录下的文件复制到指定位置,并创建目标目录
# ==========================================

# 【可修改变量】
# 源文件所在目录(当前目录用"."表示)
SOURCE_DIR="."
# 目标根目录(存放MySQL安装包和驱动)
TARGET_ROOT="/data/Mysql"
# 导入文件的目标目录(存放log_db.zip)
IMPORT_DIR="${TARGET_ROOT}/Importsql/db"


# 1. 创建目标目录(-p参数可递归创建不存在的目录)
echo "=== 步骤1:创建目标目录 ==="
mkdir -p ${TARGET_ROOT}
mkdir -p ${IMPORT_DIR}
echo "目录创建完成:${TARGET_ROOT} 和 ${IMPORT_DIR}"


# 2. 复制文件到对应位置
echo "=== 步骤2:复制文件 ==="

# 复制MySQL安装包(mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz)
if [ -f "${SOURCE_DIR}/mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz" ]; then
    cp "${SOURCE_DIR}/mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz" "${TARGET_ROOT}/"
    echo "✅ MySQL安装包复制成功:${TARGET_ROOT}/mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz"
else
    echo "❌ 错误:未找到MySQL安装包(mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz)"
fi

# 复制MySQL驱动(mysqlso.zip)
if [ -f "${SOURCE_DIR}/mysqlso.zip" ]; then
    cp "${SOURCE_DIR}/mysqlso.zip" "${TARGET_ROOT}/"
    echo "✅ MySQL驱动复制成功:${TARGET_ROOT}/mysqlso.zip"
else
    echo "❌ 错误:未找到MySQL驱动(mysqlso.zip)"
fi

# 复制数据库文件(log_db.zip)
if [ -f "${SOURCE_DIR}/log_db.zip" ]; then
    cp "${SOURCE_DIR}/log_db.zip" "${IMPORT_DIR}/"
    echo "✅ 数据库文件复制成功:${IMPORT_DIR}/log_db.zip"
else
    echo "❌ 错误:未找到数据库文件(log_db.zip)"
fi


echo "=== 脚本执行完成 ==="
执行脚本./copy.sh

授权

chmod +x copy.sh

执行

./copy.sh

取消授权

chmod -x copy.sh

1.创建文件夹

mkdir -p /data/Mysql/mysql-8.0.34/              #解压目标路径
mkdir -p /data/Mysql/mysql-8.0.34/data/mysql/   #用于存放数据库
mkdir -p  /data/Mysql/mysqlso/            #用于存放驱动
mkdir -p /data/Mysql/Importsql/db/        #存放导入文件log_db.sql
cd /data/Mysql/Importsql/db/
unzip -o log_db.zip
cd /data/Mysql/
unzip -o mysqlso.zip

-o存在同名则覆盖

2.直接在板上联网下载【或者用vscodessh把文件拖入】

MySQL :: Download MySQL Community Server (Archived Versions)

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz

ls 查看

3.解压mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz

tar -zxvf /data/Mysql/mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz -C /data/Mysql/mysql-8.0.34

4.# 更新软件源

apt update

5.# 安装 libaio 依赖

apt install -y libaio-dev

 6.创建用户组、用户、以及授权核心

# 创建深层文件夹
mkdir -p /data/Mysql/mysql-8.0.34/data/mysql
# 检查mysql组是否存在
grep mysql /etc/group
# 检查mysql用户是否存在
grep mysql /etc/passwd
# 创建mysql用户组(任意目录执行即可)
groupadd mysql
# 创建mysql用户(同样任意目录执行)
useradd -r -s /sbin/nologin -g mysql mysql
# 授权核心:把最终数据目录的属主/属组设为mysql
chown -R mysql:mysql /data/Mysql/mysql-8.0.34/data/mysql
#ls -ld命令查看目标数据目录的权限和所有者信息
ls -ld /data/Mysql/mysql-8.0.34/data/mysql

7.数据目录初始化

# 重新初始化
cd /data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64/bin
./mysqld --initialize --user=mysql --basedir=/data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64 --datadir=/data/Mysql/mysql-8.0.34/data/mysql

# 之前初始化失败需要 清空数据目录
rm -rf /data/Mysql/mysql-8.0.34/data/mysql/*

8.vim 编辑mysqld.service

编辑 MySQL 服务的 systemd 单元配置文件

vim /lib/systemd/system/mysqld.service
[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]

# 运行用户/组(必须是之前创建的mysql)

User=mysql

Group=mysql

Type=notify



# 核心:mysqld程序路径 + 配置文件路径(替换为你的实际路径!)

ExecStart=/data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --basedir=/data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64 --datadir=/data/Mysql/mysql-8.0.34/data/mysql

# 重启策略

Restart=on-failure

RestartPreventExitStatus=1

TimeoutSec=0

# 临时目录

PrivateTmp=true

# 文件描述符限制

LimitNOFILE=5000

[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]

# 运行用户/组(必须是之前创建的mysql)

User=mysql

Group=mysql

Type=notify

# 核心:mysqld程序路径 + 配置文件路径(替换为你的实际路径!)

ExecStart=/data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --basedir=/data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64 --datadir=/data/Mysql/mysql-8.0.34/data/mysql

# 重启策略

Restart=on-failure

RestartPreventExitStatus=1

TimeoutSec=0

# 临时目录

PrivateTmp=true

# 文件描述符限制

LimitNOFILE=5000

输入:wq   按回车键完成保存退出    ESC  :wq【长按esc】

9.用vim创建并编辑my.cnf

vim /etc/my.cnf
[mysqld]

# MySQL安装根目录(你的bin目录上级)

basedir = /data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64

# 你的数据目录

datadir = /data/Mysql/mysql-8.0.34/data/mysql

# 套接字文件路径(和报错里的/tmp/mysql.sock对应)

socket = /tmp/mysql.sock

# 端口

port = 3306

# 运行用户

user = mysql

# 禁用DNS解析

skip-name-resolve

# 字符集

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci



[mysql]

default-character-set = utf8mb4

socket = /tmp/mysql.sock

[mysqld]

# MySQL安装根目录(你的bin目录上级)

basedir = /data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64

# 你的数据目录

datadir = /data/Mysql/mysql-8.0.34/data/mysql

# 套接字文件路径(和报错里的/tmp/mysql.sock对应)

socket = /tmp/mysql.sock

# 端口

port = 3306

# 运行用户

user = mysql

# 禁用DNS解析

skip-name-resolve

# 字符集

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

[mysql]

default-character-set = utf8mb4

socket = /tmp/mysql.sock

10.查看服务器启动状态、设置mysqld服务开机自启

# 重启启动mysql服务,并查看状态
systemctl daemon-reload

  #启动验证

systemctl start mysqld

 #查看状态

# 添加 --no-pager 参数避免分页显示
systemctl status mysqld --no-pager

# 设置mysqld服务开机自启

systemctl enable mysqld

11. 停止 systemd 服务并杀掉进程

#停止mysql服务 

systemctl stop mysqld

如果异常退出mysql

# 删除 PID 文件 (文件名通常是 主机名.pid)
rm -f /data/Mysql/mysql-8.0.34/data/mysql/LPA3588.pid
ps -ef | grep mysqld | grep -v grep | awk '{print $2}' | xargs kill -9

12. 跳过权限表启动 MySQL

# 用 mysqld_safe 启动,跳过权限验证,后台运行,等待10秒

cd /data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64/bin
./mysqld_safe --skip-grant-tables --skip-networking --user=mysql & sleep 10

13. # 无需输密码,直接回车

./mysql -u root 

EXIT;或\q退出数据库

14.更新权限和授权TCP/IP 以及根远程

-- 刷新权限表,解锁操作
FLUSH PRIVILEGES;
-- 切换到权限库
USE mysql;
-- 清空 root 用户的所有记录(避免残留)
DELETE FROM user WHERE user = 'root';
-- 重新创建 localhost 根用户并授权
CREATE USER 'root'@'localhost' IDENTIFIED BY 'Root@123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

-- 创建 127.0.0.1 根用户并授权(TCP/IP 登录用)
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'Root@123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;

-- 创建任意 IP 根用户(可选,远程登录用)
CREATE USER 'root'@'%' IDENTIFIED BY 'Root@123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

-- 刷新权限,确保所有修改生效
FLUSH PRIVILEGES;
-- 执行后退出
EXIT;

15.强制清理所有 mysqld 残留进程

systemctl stop mysqld #关闭服务
ps -ef | grep -E 'mysqld|mysqld_safe' | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null

16.开启mysql服务,测试登录

#开启服务

systemctl start mysqld
./mysql -u root -p -h 127.0.0.1

密码;Root@123456

\q

17.qt编译mysql驱动mysqlso.zip

qt编译的驱动放到qt工具链下的sqldrivers文件夹中

cd /usr/lib/aarch64-linux-gnu/qt5/plugins/sqldrivers
ls

cd /data/Mysql/mysqlso
cp -i libqsqlmysql.so /usr/lib/aarch64-linux-gnu/qt5/plugins/sqldrivers

18.mysql启动文件驱动mysqlso.zip

将mysql数据库的linux驱动lib中的libmysqlclient.so/so.21/so.21.2.34文件复制到可执行文件同级目录

cd /data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64/lib

cp -i libmysqlclient.so libmysqlclient.so.21 libmysqlclient.so.21.2.34 /data/bin/

 19.将导出的编好码的.sql导入新数据库

file -i /data/Mysql/Importsql/db/log_db_utf8.sql #验证转码

cd /data/Mysql
mkdir -p Importsql/db/
cd /data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64/bin
#登录新建数据库
./mysql -u root -pRoot@123456 -h 127.0.0.1
CREATE DATABASE IF NOT EXISTS log_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
show databases;
\q
​#导入文件(强制指定 utf8mb4 编码)
./mysql -u root -pRoot@123456 -h 127.0.0.1 --default-character-set=utf8mb4 log_db < /data/Mysql/Importsql/db/log_db.sql

验证:

./mysql -u root -pRoot@123456 -h 127.0.0.1
use log_db;
show tables;
select * from angle_alarm_info;
\q
将原来mysql中的数据库和数据导出到linux下的mysql数据库

【MySQL数据库】从win导出成_db.sql复制到linux_windows mysql 导出到linux-CSDN博客

 qt编译mysql驱动,qt使用mysql:【linux】QT5.15.2通过aarch64使用mysql数据库8.0.34-CSDN博客

mysql配置的shell脚本.sh

vim mysqlbuild.sh  #创建脚本

 执行脚本./mysqlbuild.sh

授权

chmod +x mysqlbuild.sh

执行

./mysqlbuild.sh

取消授权

chmod -x mysqlbuild.sh

删除脚本:

rm -f mysqlbuild.sh

mysqlbuild.sh

kimi版:

创建文件夹,安装包什么资源zip都放这里,脚本也放这里

mkdir -p /root/mjttest/ty/service/Mysql
vim mysql_deploy.sh

:wq 保存退出

chmod +x mysql_deploy.sh
sudo ./mysql_deploy.sh
脚本:
#!/bin/bash
 
# ==========================================
# LPA3588 Linux MySQL 8.0.34 自动化部署脚本(修复版)
# ==========================================
 
set -euo pipefail    # 严格模式:遇错即停,未定义变量报错,管道错误检测
 
# ==========================================
# 0. 权限检查
# ==========================================
if [ "$EUID" -ne 0 ]; then
    echo "❌ 错误: 此脚本需要 root 权限运行"
    echo "请使用: sudo bash $0"
    exit 1
fi
 # 设置超时时间(秒),防止 systemd 服务死锁导致脚本无限阻塞
TIMEOUT_SEC=60
# ==========================================
# 1. 全局变量定义区   把安装包和mysqlso.zip都放在INSTALL_ROOT下
# ==========================================
MYSQL_VERSION="8.0.34"
ARCHIVE_NAME="mysql-8.0.34-linux-glibc2.28-aarch64"
INSTALL_ROOT="/root/mjttest/ty/service/Mysql" #/root/mjttest/ty/service/Mysql  # /data/Mysql
INSTALL_DIR="${INSTALL_ROOT}/mysql-${MYSQL_VERSION}"
BASE_DIR="${INSTALL_DIR}/${ARCHIVE_NAME}"
DATA_DIR="${INSTALL_DIR}/data/mysql"
 
DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/23/file/${ARCHIVE_NAME}.tar.gz"
ROOT_PWD="Root@123456"
 
DEST_BIN="/userdata/wqs/pull-video-ui/bin"
QT_DRIVER_DEST="/usr/lib/aarch64-linux-gnu/qt5/plugins/sqldrivers"
 
# MySQL 客户端绝对路径(避免相对路径问题)
MYSQL_CLIENT="${BASE_DIR}/bin/mysql"
MYSQLD_SAFE="${BASE_DIR}/bin/mysqld_safe"
MYSQLD="${BASE_DIR}/bin/mysqld"
 
# ==========================================
# 辅助函数:彻底停止 MySQL
# ==========================================
stop_mysql_completely() {
    echo "正在停止MySQL服务..."
    
    # 停止服务
    systemctl stop mysqld 2>/dev/null || true
    
    # 禁用自动重启
    systemctl disable mysqld 2>/dev/null || true
    
    sleep 2
    
    # 强制杀死进程
    pkill -9 -x mysqld 2>/dev/null || true
    pkill -9 -x mysqld_safe 2>/dev/null || true
    
    sleep 3
    
    # 检查残留
    local remaining
    remaining=$(pgrep -x mysqld | wc -l)
    
    if [ "$remaining" -gt 0 ]; then
        echo "警告: 仍有MySQL进程残留,再次清理..."
        pkill -9 -x mysqld || true
        pkill -9 -x mysqld_safe || true
        sleep 2
    fi
    
    # 清理残留文件
    rm -f /tmp/mysql.sock /tmp/mysql.sock.lock
    rm -f "${DATA_DIR}"/*.pid 2>/dev/null || true
    
    # 最终检查
    remaining=$(pgrep -x mysqld | wc -l)
    if [ "$remaining" -eq 0 ]; then
        echo "✅ MySQL进程已完全停止"
        return 0
    else
        echo "⚠️ 警告: 仍有残留进程:"
        pgrep -a -x mysqld
        return 1
    fi
}
 
# ==========================================
# 辅助函数:等待 MySQL 启动
# ==========================================
wait_for_mysql() {
    local max_wait=${1:-30}
    echo "等待MySQL启动(最多${max_wait}秒)..."
    
    for ((i=1; i<=max_wait; i++)); do
        if "${MYSQL_CLIENT}" -u root -p"${ROOT_PWD}" -h 127.0.0.1 -e "SELECT 1" >/dev/null 2>&1; then
            echo "✅ MySQL已就绪"
            return 0
        fi
        sleep 1
    done
    
    echo "❌ MySQL启动超时"
    return 1
}
 
# ==========================================
# 2. 执行部署流程
# ==========================================
 
echo "=== [1/19] 创建文件夹 ==="
mkdir -p "${INSTALL_DIR}"
mkdir -p "${DATA_DIR}"
mkdir -p "${INSTALL_ROOT}/mysqlso"
mkdir -p "${INSTALL_ROOT}/Importsql/db/"
mkdir -p "${DEST_BIN}"
 
echo "=== [1.5/19] 解压 Qt MySQL 驱动 ==="
cd "${INSTALL_ROOT}"
if [ -f "mysqlso.zip" ]; then
    if ! command -v unzip &>/dev/null; then
        echo "正在安装 unzip..."
        apt-get update && apt-get install -y unzip
    fi
    unzip -o mysqlso.zip
    
    # 查找驱动文件(不管 zip 内部目录结构)
    QT_DRIVER_SRC=$(find "${INSTALL_ROOT}" -name "libqsqlmysql.so" -type f | head -1)
    if [ -z "$QT_DRIVER_SRC" ]; then
        echo "⚠️ 警告: 未在解压内容中找到 libqsqlmysql.so"
    else
        echo "✅ 找到驱动: ${QT_DRIVER_SRC}"
    fi
else
    echo "⚠️ 警告: 未找到 mysqlso.zip 文件"
fi
 
echo "=== [1.6/19] 解压初始数据库文件 ==="
cd "${INSTALL_ROOT}/Importsql/db/"
if [ -f "log_db.zip" ]; then
    unzip -o log_db.zip
    echo "✅ 数据库文件解压完成"
else
    echo "⚠️ 警告: 未找到 log_db.zip 文件"
fi
 
echo "=== [2/19] 下载 MySQL 安装包 ==="
cd "${INSTALL_ROOT}"
if [ ! -f "${ARCHIVE_NAME}.tar.gz" ]; then
    wget --timeout=300 --tries=3 "${DOWNLOAD_URL}"
else
    echo "安装包已存在,跳过下载"
fi
 
echo "=== [3/19] 解压安装包 ==="
if [ ! -d "${BASE_DIR}" ]; then
    tar -zxvf "${INSTALL_ROOT}/${ARCHIVE_NAME}.tar.gz" -C "${INSTALL_DIR}"
else
    echo "目录已存在,跳过解压"
fi
 
echo "=== [4/19] 更新软件源 ==="
apt-get update
 
echo "=== [5/19] 安装依赖 libaio ==="
apt-get install -y libaio-dev
 
echo "=== [6/19] 创建用户组和用户 ==="
if ! getent group mysql >/dev/null; then
    groupadd mysql
    echo "✅ 创建组 mysql"
fi
 
if ! getent passwd mysql >/dev/null; then
    useradd -r -s /sbin/nologin -g mysql mysql
    echo "✅ 创建用户 mysql"
fi
 
chown -R mysql:mysql "${DATA_DIR}"
 
# 修复:/root 目录默认权限为 700,mysql 用户无法遍历进入,需添加执行权限
chmod o+x /root /root/mjttest /root/mjttest/ty /root/mjttest/ty/service 2>/dev/null || true
 
ls -ld "${DATA_DIR}"
 
echo "=== [7/19] 初始化数据目录 ==="
cd "${BASE_DIR}/bin"

# 检查数据目录是否已初始化(通过检查 ibdata1 或 mysql 系统表空间)
if [ -f "${DATA_DIR}/ibdata1" ] || [ -d "${DATA_DIR}/mysql" ]; then
    echo "✅ 数据目录已存在,跳过初始化(如需重新初始化请先删除 ${DATA_DIR} 下的文件)"
else
    echo "正在初始化数据目录..."
    if ! "${MYSQLD}" --initialize --user=mysql --basedir="${BASE_DIR}" --datadir="${DATA_DIR}"; then
        echo "❌ 数据目录初始化失败"
        echo "常见原因:"
        echo "  1. 数据目录 ${DATA_DIR} 不为空(包含旧文件)"
        echo "  2. mysql 用户没有权限访问 ${DATA_DIR}"
        echo "  3. 系统内存不足"
        exit 1
    fi
    echo "✅ 数据目录初始化成功"
fi
 
echo "=== [8/19] 配置 systemd 服务 ==="
SERVICE_FILE="/lib/systemd/system/mysqld.service"
cat > "${SERVICE_FILE}" << 'EOF'
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
After=network.target
After=syslog.target
 
[Install]
WantedBy=multi-user.target
 
[Service]
User=mysql
Group=mysql
Type=notify
ExecStart=BASE_DIR_PLACEHOLDER/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
RestartPreventExitStatus=1
TimeoutSec=0
PrivateTmp=true
LimitNOFILE=5000
EOF
 
# 替换路径占位符
sed -i "s|BASE_DIR_PLACEHOLDER|${BASE_DIR}|g" "${SERVICE_FILE}"
echo "✅ mysqld.service 创建完成"
 
echo "=== [9/19] 配置 my.cnf ==="
cat > /etc/my.cnf << EOF
[mysqld]
basedir = ${BASE_DIR}
datadir = ${DATA_DIR}
socket = /tmp/mysql.sock
port = 3306
user = mysql
skip-name-resolve
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
socket = /tmp/mysql.sock
EOF
echo "✅ my.cnf 创建完成"
 
echo "=== [10/19] 重新加载 systemd ==="
systemctl daemon-reload
 
echo "=== [11/19] []停止服务准备重置密码 ==="
#stop_mysql_completely
#ps -ef | grep -E 'mysqld|mysqld_safe' | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null
#systemctl status mysqld #查看服务状态
 
echo "=== [12/19] 跳过权限表启动 MySQL ==="
cd "${BASE_DIR}/bin"
 
# 确保没有残留进程
pkill -9 -x mysqld 2>/dev/null || true
pkill -9 -x mysqld_safe 2>/dev/null || true
sleep 2
 
# 后台启动
"${MYSQLD_SAFE}" --skip-grant-tables --skip-networking --user=mysql &
MYSQLD_PID=$!
 
# 等待 MySQL 就绪
echo "等待MySQL跳过权限启动..."
for ((i=1; i<=30; i++)); do
    if "${MYSQL_CLIENT}" -u root -e "SELECT 1" >/dev/null 2>&1; then
        echo "✅ MySQL已就绪"
        break
    fi
    if [ "$i" -eq 30 ]; then
        echo "❌ MySQL启动超时"
        exit 1
    fi
    sleep 1
done
 
echo "=== [13/19] 登录并重置密码 ==="
 
# 使用临时文件传递 SQL,避免 heredoc 问题
SQL_TMP=$(mktemp)
cat > "${SQL_TMP}" << EOF
FLUSH PRIVILEGES;
DROP USER IF EXISTS 'root'@'localhost';
DROP USER IF EXISTS 'root'@'127.0.0.1';
DROP USER IF EXISTS 'root'@'%';
CREATE USER 'root'@'localhost' IDENTIFIED BY '${ROOT_PWD}';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '${ROOT_PWD}';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
CREATE USER 'root'@'%' IDENTIFIED BY '${ROOT_PWD}';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
 
if ! "${MYSQL_CLIENT}" -u root < "${SQL_TMP}"; then
    echo "❌ 错误: 密码重置失败,脚本终止!"
    rm -f "${SQL_TMP}"
    exit 1
fi
 
rm -f "${SQL_TMP}"
echo "✅ 密码重置成功"
 
echo "=== [14/19] 清理残留进程并重启服务 ==="
#ps -ef | grep -E 'mysqld|mysqld_safe' | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null
#systemctl disable mysqld

 
echo "=== [15/19] 正式启动 MySQL 服务并使能 ==="
#systemctl start mysqld
#systemctl enable mysqld
# systemctl status mysqld --no-pager #查看服务状态 不调用分页器
 
echo "=== [16/19] 验证登录 === 需要在上一步开启了mysql服务 "
if ! "${MYSQL_CLIENT}" -u root -p"${ROOT_PWD}" -h 127.0.0.1 -e "SELECT 'Login Success' as Status;"; then
    echo "❌ 登录验证失败,脚本终止"
    exit 1
fi
echo "✅ 登录验证通过"
 
echo "=== [17/19] 部署 Qt MySQL 驱动 ==="
if [ -n "${QT_DRIVER_SRC:-}" ] && [ -f "${QT_DRIVER_SRC}" ]; then
    cp -f "${QT_DRIVER_SRC}" "${QT_DRIVER_DEST}"
    echo "✅ Qt 驱动复制成功"
else
    echo "⚠️ 警告: 未找到 Qt 驱动源文件"
fi
 
echo "=== [18/19] 部署 MySQL 客户端库 ==="
MYSQL_LIB_SRC="${BASE_DIR}/lib"
if [ -d "${MYSQL_LIB_SRC}" ]; then
    cp -f "${MYSQL_LIB_SRC}/libmysqlclient.so" "${DEST_BIN}/" 2>/dev/null || true
    cp -f "${MYSQL_LIB_SRC}/libmysqlclient.so.21" "${DEST_BIN}/" 2>/dev/null || true
    cp -f "${MYSQL_LIB_SRC}/libmysqlclient.so.21.2.34" "${DEST_BIN}/" 2>/dev/null || true
    echo "✅ 客户端库复制成功"
else
    echo "⚠️ 警告: MySQL lib 目录不存在"
fi
 
echo "=== [19/19] 导入初始数据库 ==="
SQL_FILE="${INSTALL_ROOT}/Importsql/db/log_db.sql"
if [ -f "${SQL_FILE}" ]; then
    "${MYSQL_CLIENT}" -u root -p"${ROOT_PWD}" -h 127.0.0.1 -e \
        "CREATE DATABASE IF NOT EXISTS log_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    
    "${MYSQL_CLIENT}" -u root -p"${ROOT_PWD}" -h 127.0.0.1 --default-character-set=utf8mb4 log_db < "${SQL_FILE}"
    echo "✅ 数据库 log_db 导入完成"
    
    echo "验证导入结果:"
    "${MYSQL_CLIENT}" -u root -p"${ROOT_PWD}" -h 127.0.0.1 -e "USE log_db; SHOW TABLES;"
else
    echo "⚠️ 警告: SQL 文件 ${SQL_FILE} 不存在"
fi
 
echo ""
echo "========================================"
echo "🎉 MySQL 8.0.34 部署完成!"
echo "========================================"
echo "安装目录: ${BASE_DIR}"
echo "数据目录: ${DATA_DIR}"
echo "root密码: ${ROOT_PWD}"
echo "========================================"
卸载操作:
chmod +x uninstall_mysql.sh
sudo uninstall_mysql.sh
#!/bin/bash

# ==========================================
# LPA3588 Linux MySQL 8.0.34 卸载/回退脚本
# 彻底恢复到部署前状态
# ==========================================

set -euo pipefail

# ==========================================
# 0. 权限检查
# ==========================================
if [ "$EUID" -ne 0 ]; then
    echo "❌ 错误: 此脚本需要 root 权限运行"
    echo "请使用: sudo bash $0"
    exit 1
fi

# ==========================================
# 1. 全局变量定义区(必须与安装脚本一致)
# ==========================================
MYSQL_VERSION="8.0.34"
ARCHIVE_NAME="mysql-8.0.34-linux-glibc2.28-aarch64"
INSTALL_ROOT="/root/mjttest/ty/service/Mysql"
INSTALL_DIR="${INSTALL_ROOT}/mysql-${MYSQL_VERSION}"
BASE_DIR="${INSTALL_DIR}/${ARCHIVE_NAME}"
DATA_DIR="${INSTALL_DIR}/data/mysql"

DEST_BIN="/userdata/wqs/pull-video-ui/bin"
QT_DRIVER_DEST="/usr/lib/aarch64-linux-gnu/qt5/plugins/sqldrivers"

# 备份标记(用于判断是否是本脚本安装的)
BACKUP_DIR="${INSTALL_ROOT}/.backup_$(date +%Y%m%d_%H%M%S)"

# ==========================================
# 辅助函数
# ==========================================

# 询问确认
confirm() {
    local msg="$1"
    read -r -p "${msg} [y/N]: " response
    case "$response" in
        [yY][eE][sS]|[yY]) return 0 ;;
        *) return 1 ;;
    esac
}

# 安全删除目录
safe_remove_dir() {
    local dir="$1"
    if [ -d "$dir" ]; then
        echo "  删除目录: ${dir}"
        rm -rf "$dir"
    fi
}

# 安全删除文件
safe_remove_file() {
    local file="$1"
    if [ -f "$file" ]; then
        echo "  删除文件: ${file}"
        rm -f "$file"
    fi
}

# ==========================================
# 2. 执行卸载流程
# ==========================================

echo "========================================"
echo "⚠️  MySQL 8.0.34 卸载脚本"
echo "========================================"
echo ""
echo "以下操作将执行:"
echo "  1. 停止并禁用 MySQL 服务"
echo "  2. 删除 systemd 服务配置"
echo "  3. 删除 /etc/my.cnf 配置文件"
echo "  4. 删除 MySQL 安装目录 (${INSTALL_ROOT})"
echo "  5. 删除 Qt MySQL 驱动 (${QT_DRIVER_DEST}/libqsqlmysql.so)"
echo "  6. 删除 MySQL 客户端库 (${DEST_BIN}/libmysqlclient*)"
echo "  7. 删除 mysql 系统用户和组(可选)"
echo "  8. 清理 /tmp 下的 socket 和 pid 文件"
echo ""

if ! confirm "确认要卸载 MySQL 吗?"; then
    echo "已取消卸载"
    exit 0
fi

echo ""
echo "=== [1/10] 停止并禁用 MySQL 服务 ==="

# 停止服务
if systemctl is-active --quiet mysqld 2>/dev/null; then
    echo "  停止 mysqld 服务..."
    systemctl stop mysqld
fi

# 禁用开机自启
if systemctl is-enabled --quiet mysqld 2>/dev/null; then
    echo "  禁用 mysqld 开机自启..."
    systemctl disable mysqld
fi

# 强制杀死所有 MySQL 进程
echo "  强制终止残留进程..."
pkill -9 -x mysqld 2>/dev/null || true
pkill -9 -x mysqld_safe 2>/dev/null || true
sleep 2

# 确认进程已终止
remaining=$(pgrep -x mysqld | wc -l) || true
if [ "$remaining" -gt 0 ]; then
    echo "  ⚠️ 警告: 仍有 MySQL 进程残留:"
    pgrep -a -x mysqld || true
    if confirm "是否强制终止这些进程?"; then
        pgrep -x mysqld | xargs -r kill -9
    fi
fi

echo "✅ MySQL 服务已停止"

echo ""
echo "=== [2/10] 删除 systemd 服务配置 ==="
safe_remove_file "/lib/systemd/system/mysqld.service"
systemctl daemon-reload
echo "✅ systemd 配置已清理"

echo ""
echo "=== [3/10] 删除 my.cnf 配置文件 ==="
safe_remove_file "/etc/my.cnf"
safe_remove_file "/etc/mysql/my.cnf" 2>/dev/null || true
echo "✅ 配置文件已删除"

echo ""
echo "=== [4/10] 清理 /tmp 残留文件 ==="
rm -f /tmp/mysql.sock /tmp/mysql.sock.lock
rm -f /tmp/mysqld.pid /tmp/mysqld_safe.pid 2>/dev/null || true
echo "✅ /tmp 残留已清理"

echo ""
echo "=== [5/10] 删除 Qt MySQL 驱动 ==="
if [ -f "${QT_DRIVER_DEST}/libqsqlmysql.so" ]; then
    rm -f "${QT_DRIVER_DEST}/libqsqlmysql.so"
    echo "✅ Qt 驱动已删除"
else
    echo "  未找到 Qt 驱动,跳过"
fi

echo ""
echo "=== [6/10] 删除 MySQL 客户端库 ==="
if ls "${DEST_BIN}"/libmysqlclient* 1>/dev/null 2>&1; then
    rm -f "${DEST_BIN}"/libmysqlclient*
    echo "✅ 客户端库已删除"
else
    echo "  未找到客户端库,跳过"
fi

echo ""
echo "=== [7/10] 删除 MySQL 安装目录 ==="
echo "  目标目录: ${INSTALL_ROOT}"

if [ -d "${INSTALL_ROOT}" ]; then
    # 先备份关键配置(可选)
    if confirm "是否在删除前备份配置到 ${BACKUP_DIR}?"; then
        mkdir -p "${BACKUP_DIR}"
        [ -f "/etc/my.cnf" ] && cp /etc/my.cnf "${BACKUP_DIR}/" 2>/dev/null || true
        [ -f "/lib/systemd/system/mysqld.service" ] && cp /lib/systemd/system/mysqld.service "${BACKUP_DIR}/" 2>/dev/null || true
        echo "  配置已备份到 ${BACKUP_DIR}"
    fi
    
    # 删除整个安装目录
    rm -rf "${INSTALL_ROOT}"
    echo "✅ 安装目录已删除"
else
    echo "  目录不存在,跳过"
fi

echo ""
echo "=== [8/10] 删除 mysql 系统用户和组(可选)==="

# 检查是否有其他服务依赖 mysql 用户
mysql_processes=$(ps -u mysql --no-headers 2>/dev/null | wc -l) || true
if [ "$mysql_processes" -gt 0 ]; then
    echo "  ⚠️ 警告: 仍有进程以 mysql 用户运行"
    ps -u mysql --no-headers || true
fi

if confirm "是否删除 mysql 系统用户和组?"; then
    if getent passwd mysql >/dev/null; then
        userdel mysql 2>/dev/null || true
        echo "  已删除用户 mysql"
    fi
    if getent group mysql >/dev/null; then
        groupdel mysql 2>/dev/null || true
        echo "  已删除组 mysql"
    fi
    echo "✅ mysql 用户和组已删除"
else
    echo "  保留 mysql 用户和组"
fi

echo ""
echo "=== [9/10] 清理日志文件(可选)==="
if confirm "是否清理 MySQL 相关日志?"; then
    # 常见日志位置
    rm -f /var/log/mysql* 2>/dev/null || true
    rm -f /var/log/mysqld* 2>/dev/null || true
    rm -rf /var/log/mysql 2>/dev/null || true
    echo "✅ 日志已清理"
else
    echo "  保留日志文件"
fi

echo ""
echo "=== [10/10] 验证清理结果 ==="

issues=0

# 检查服务状态
if systemctl is-active --quiet mysqld 2>/dev/null; then
    echo "  ❌ 警告: mysqld 服务仍在运行"
    ((issues++)) || true
else
    echo "  ✅ mysqld 服务已停止"
fi

# 检查进程
remaining=$(pgrep -x mysqld | wc -l) || true
if [ "$remaining" -gt 0 ]; then
    echo "  ❌ 警告: 仍有 mysqld 进程残留"
    ((issues++)) || true
else
    echo "  ✅ 无残留进程"
fi

# 检查目录
if [ -d "${INSTALL_ROOT}" ]; then
    echo "  ❌ 警告: 安装目录仍存在: ${INSTALL_ROOT}"
    ((issues++)) || true
else
    echo "  ✅ 安装目录已删除"
fi

# 检查配置文件
if [ -f "/etc/my.cnf" ]; then
    echo "  ❌ 警告: /etc/my.cnf 仍存在"
    ((issues++)) || true
else
    echo "  ✅ /etc/my.cnf 已删除"
fi

# 检查服务文件
if [ -f "/lib/systemd/system/mysqld.service" ]; then
    echo "  ❌ 警告: systemd 服务文件仍存在"
    ((issues++)) || true
else
    echo "  ✅ systemd 服务文件已删除"
fi

echo ""
echo "========================================"
if [ "$issues" -eq 0 ]; then
    echo "🎉 MySQL 卸载完成,系统已恢复到部署前状态"
else
    echo "⚠️  卸载完成,但发现 ${issues} 个问题,请手动处理"
fi
echo "========================================"

if [ -d "${BACKUP_DIR}" ]; then
    echo "备份位置: ${BACKUP_DIR}"
fi

exit "$issues"

常用调试命令

报错检查命令:

 #杀掉所有 mysqld/mysqld_safe 进程(确保无残留)【如果之前报错】

ps -ef | grep -E 'mysqld|mysqld_safe' | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null
systemctl status mysqld #查看服务状态
rm -rf /data/mjt/Mysql/mysql-8.0.34/data/mysql/*  #初始化失败时执行

mysql服务命令:

cd /data/Mysql/mysql-8.0.34/mysql-8.0.34-linux-glibc2.28-aarch64/bin
systemctl daemon-reload #重置
systemctl status mysqld #查看状态
systemctl start mysqld  #开启服务
systemctl stop mysqld #关闭服务
# 查看mysqld服务的自启状态
systemctl is-enabled mysqld
systemctl enabled mysqld

 # 取消mysqld服务开机自启 【如果出现问题】

systemctl disable mysqld

杀掉脚本进程

管道劈杀

查找进程

ps -ef | grep mysqld

ps -ef | grep mysqld | grep -v grep | awk '{print $2}' | xargs kill -9
pid杀
    jobs -l
[2]+ 43473 Stopped                 ./mysqlbuild.sh
    kill -9 43473

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐