【MySQL】linuxLPA3588快速配置mysql数据库服务
详细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博客
目录
2.直接在板上联网下载【或者用vscodessh把文件拖入】
3.解压mysql-8.0.34-linux-glibc2.28-aarch64.tar.gz
快速配置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
更多推荐




所有评论(0)