欢迎光临
我们一直在努力

MySQL 8.* / 9.* 二进制包一键安装与卸载教程(Linux 通用)

一、注意事项

1. 根据系统选择正确的 MySQL 二进制包

你的操作系统
应选择的 MySQL 8.0 / 9.0 二进制包示例
说明与风险提示
CentOS 7 / RHEL 7 mysql-8.0.*-linux-glibc2.17-x86_64.tar.xz/ mysql-9.4.0-linux-glibc2.17-x86_64.tar.xz 唯一且正确的选择。系统 glibc 为 2.17,必须使用此版本。
CentOS 8 / RHEL 8, 9 / Ubuntu 20.04 / Debian 11 mysql-8.0.*-linux-glibc2.28-x86_64.tar.xz / mysql-9.4.0-linux-glibc2.28-x86_64.tar.xz 这些系统的 glibc 版本(≥2.28)满足此包的运行时要求。
Ubuntu 22.04 / 24.04 / Debian 12 mysql-8.0.*-linux-glibc2.28-x86_64.tar.xz / mysql-9.4.0-linux-glibc2.28-x86_64.tar.xz 这是唯一选择,但存在理论风险。这些新系统的 glibc(≥2.35)版本更高,可以运行基于旧 glibc(2.28)编译的程序。虽然多数情况下正常,但在极端情况下,MySQL 可能无法利用新 glibc 的某些优化或安全补丁。

已验证系统版本:Ubuntu 22.04 / 24.04,Debian 12.10,CentOS 7.9,CentOS 8.2

特别提示:麒麟 V10(服务器版基于 CentOS 8,桌面版基于 Debian 10/11)

2.下载安装包

从 MySQL 官方下载页https://downloads.mysql.com/archives/community/ 下载二进制包。 为方便下载,可用我的网盘分享: 百度链接:https://pan.baidu.com/s/1KmZcTrZcJivgk2Zo81xPXw?pwd=c16m 提取码:c16m 夸克链接:https://pan.quark.cn/s/9b428add66d4 提取码:eejy


二、安装步骤

1. 运行安装脚本

chmod +x install_mysql8.sh

2. 执行安装命令(示例)

CentOS 7 / RHEL 7(注意 my.cnf 地址)

./install_mysql8.sh -p ./mysql-8.0.44-linux-glibc2.17-x86_64.tar.xz -c /home/mysql/my.cnf -d /data/mysql

其他高版本系统(CentOS 8+, Ubuntu 20.04+, Debian 11+)

./install_mysql8.sh -p ./mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz -c /home/mysql/my.cnf -d /data/mysql


三、自定义 my.cnf 配置参考

编辑 /etc/my.cnf 或自定义路径(如 /home/mysql/my.cnf),内容示例:

[mysqld]
# 基本安全设置
bind-address = 0.0.0.0 # 关键:允许所有IP远程连接。如果改为服务器内网IP,只监听内网
skip-name-resolve = 1
# ==================== 大小写敏感设置 ====================
# 警告:只能在初始化前设置!之后不能更改!
# 0: 区分大小写 (Linux默认)
# 1: 不区分大小写 (存储为小写)
# 2: 不区分大小写 (存储为给定大小写)
lower_case_table_names = 1

# ==================== 字符集设置 ====================
# MySQL 8.0 默认使用 utf8mb4,这里显式声明
character-set-server = utf8mb4 # 支持完整Unicode,包括emoji
collation-server = utf8mb4_0900_ai_ci # MySQL 8.0默认排序规则
init_connect = \’SET NAMES utf8mb4\’ # 每个连接初始化时设置字符集

# ==================== 连接设置 ====================
max_connections = 500 # 最大连接数,根据业务调整
max_connect_errors = 10000 # 最大连接错误数,防止暴力破解
connect_timeout = 10 # 连接超时时间(秒)
wait_timeout = 600 # 非交互连接超时时间
interactive_timeout = 600 # 交互连接超时时间
max_allowed_packet = 256M # 最大数据包大小
thread_cache_size = 128 # 线程缓存大小

# ==================== 表缓存设置 ====================
table_open_cache = 4096 # 表缓存大小
table_definition_cache = 2048 # 表定义缓存
table_open_cache_instances = 16 # 表缓存实例数

# ==================== InnoDB 核心配置 ====================
# 内存配置(根据服务器内存调整,假设2GB内存)
innodb_buffer_pool_size = 512M # 缓冲池大小(物理内存的50-75%)
innodb_buffer_pool_instances = 1 # 缓冲池实例数(建议设置)
innodb_redo_log_capacity = 128M # 重做日志文件大小
innodb_log_buffer_size = 64M # 重做日志缓冲区大小
innodb_flush_log_at_trx_commit = 1 # 事务提交时刷盘(1=安全,2=性能)
innodb_file_per_table = ON # 每个表单独文件

# ==================== 事务和锁设置 ====================
transaction_isolation = READ-COMMITTED # 事务隔离级别(推荐READ-COMMITTED)
transaction_read_only = OFF
transaction_alloc_block_size = 8192
explicit_defaults_for_timestamp = ON # 时间戳显式默认值

# ==================== SQL模式设置 ====================
# MySQL 8.0 默认包含 STRICT_TRANS_TABLES
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

# 日志设置(可选)
general_log = 0
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4


四、安装脚本 install_mysql8.sh

#!/bin/bash
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

set -e

# 颜色定义
RED=\’\\033[0;31m\’
GREEN=\’\\033[0;32m\’
YELLOW=\’\\033[1;33m\’
NC=\’\\033[0m\’

# 默认参数
DEFAULT_MYSQL_PACKAGE=\”./mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz\” # MySQL 8+ 通常是 .tar.xz 格式
DEFAULT_MYCNF_PATH=\”/etc/my.cnf\”
MYSQL_BASE_DIR=\”/usr/local/mysql\”
DATA_DIR=\”/data/mysql\”
MYSQL_TEMP_PASSWORD_FILE=\”/root/mysql_temp_password.txt\”

# 显示用法
usage() {


echo \”用法: $0 [选项]\”
echo \”选项:\”
echo \” -p, –package PATH MySQL安装包路径 (默认: ${DEFAULT_MYSQL_PACKAGE})\”
echo \” -c, –mycnf PATH 自定义my.cnf路径 (默认: ${DEFAULT_MYCNF_PATH})\”
echo \” -d, –datadir PATH 数据目录路径 (默认: ${DATA_DIR})\”
echo \” -h, –help 显示帮助信息\”
exit 1
}

# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
-p|–package)
MYSQL_PACKAGE=\”$2\”
shift 2
;;
-c|–mycnf)
MYCNF_PATH=\”$2\”
shift 2
;;
-d|–datadir)
DATA_DIR=\”$2\”
shift 2
;;
-h|–help)
usage
;;
*)
echo \”未知参数: $1\”
usage
;;
esac
done

# 设置默认值
MYSQL_PACKAGE=${MYSQL_PACKAGE:-$DEFAULT_MYSQL_PACKAGE}
MYCNF_PATH=${MYCNF_PATH:-$DEFAULT_MYCNF_PATH}

# 全局变量
OS=\”\”
VER=\”\”
PACKAGE_MANAGER=\”\”
SERVICE_CMD=\”\”
ENV_FILE_DIR=\”\” # 环境变量文件目录
ARCH=$(uname -m) # 系统架构

# 日志函数
log_info() {


echo -e \”${GREEN}[INFO]${NC} $1\”
}

log_warn() {


echo -e \”${YELLOW}[WARN]${NC} $1\”
}

log_error() {


echo -e \”${RED}[ERROR]${NC} $1\”
}

# 检查是否以root运行
check_root() {


if [[ $EUID -ne 0 ]]; then
log_error \”请使用root权限运行此脚本\”
exit 1
fi
}

# 检测操作系统
detect_os() {


if [ -f /etc/os-release ]; then
. /etc/os-release
case \”$ID\” in
kylin)
# 麒麟系统:区分服务器版和桌面版
if grep -qi \”server\” /etc/os-release; then
OS=\”centos\” # 服务器版基于 CentOS
VER=\”8\” # 对应 CentOS 8
log_info \”检测到麒麟服务器版,映射为 centos 8\”
else
OS=\”debian\” # 桌面版基于 Debian
VER=$(echo \”$VERSION_ID\” | cut -d. -f1)
log_info \”检测到麒麟桌面版,映射为 debian $VER\”
fi
;;
*)
OS=$ID
VER=$VERSION_ID
;;
esac
elif [ -f /etc/redhat-release ]; then
# 改进 CentOS/RHEL 版本检测
if grep -q \”CentOS Linux release 7\” /etc/redhat-release; then
OS=\”centos\”
VER=\”7\”
elif grep -q \”CentOS Linux release 8\” /etc/redhat-release; then
OS=\”centos\”
VER=\”8\”
elif grep -q \”Red Hat Enterprise Linux\” /etc/redhat-release; then
OS=\”rhel\”
VER=$(grep -o \'[0-9]\\+\\.[0-9]\\+\’ /etc/redhat-release | head -1 | cut -d. -f1)
else
OS=$(cat /etc/redhat-release | awk \'{print $1}\’ | tr \'[:upper:]\’ \'[:lower:]\’)
VER=$(cat /etc/redhat-release | awk \'{print $4}\’ | cut -d. -f1)
fi
else
OS=$(uname -s | tr \'[:upper:]\’ \'[:lower:]\’)
VER=$(uname -r)
fi

# 简化版本号(只保留主版本号)
VER=$(echo $VER | cut -d. -f1)

log_info \”检测到操作系统: $OS $VER (架构: $ARCH)\”

case $OS in
ubuntu|debian)
PACKAGE_MANAGER=\”apt-get\”
SERVICE_CMD=\”systemctl\”
ENV_FILE_DIR=\”/etc/default\” # Ubuntu/Debian 使用 /etc/default
;;
centos|rhel|rocky|almalinux|fedora)
PACKAGE_MANAGER=\”yum\”
SERVICE_CMD=\”systemctl\”
ENV_FILE_DIR=\”/etc/sysconfig\” # RHEL系列使用 /etc/sysconfig
;;
sles|opensuse)
PACKAGE_MANAGER=\”zypper\”
SERVICE_CMD=\”systemctl\”
ENV_FILE_DIR=\”/etc/sysconfig\” # SUSE使用 /etc/sysconfig
;;
*)
log_warn \”未知操作系统,尝试使用systemctl\”
SERVICE_CMD=\”systemctl\”
# 尝试检测环境变量目录
if [ -d /etc/sysconfig ]; then
ENV_FILE_DIR=\”/etc/sysconfig\”
elif [ -d /etc/default ]; then
ENV_FILE_DIR=\”/etc/default\”
else
ENV_FILE_DIR=\”/etc\”
fi
;;
esac

log_info \”环境变量目录: $ENV_FILE_DIR\”
}

# 检查并修复库文件
check_and_fix_libraries() {


log_info \”检查并修复运行时库…\”

# 检查MySQL二进制文件需要的库
local mysql_bin=\”$MYSQL_BASE_DIR/bin/mysql\”
if [ -f \”$mysql_bin\” ]; then
log_info \”检查MySQL客户端依赖库…\”
ldd \”$mysql_bin\” 2>/dev/null | grep \”not found\” && {


log_warn \”MySQL客户端缺少依赖库\”
}
fi

# 根据系统类型修复库
case $OS in
ubuntu|debian)
# Ubuntu/Debian系统的库修复
log_info \”修复Ubuntu/Debian系统库…\”

# 检查并安装libncurses
if ! ldconfig -p 2>/dev/null | grep -q \”libncurses.so.6\”; then
log_info \”安装libncurses6…\”
apt-get install -y libncurses6 2>/dev/null || {


# 尝试其他包名
apt-get install -y libncurses-dev 2>/dev/null || true
apt-get install -y libncurses5 2>/dev/null || true
apt-get install -y libncurses 2>/dev/null || true

# 创建兼容链接
if [ -f /usr/lib/x86_64-linux-gnu/libncurses.so.5 ]; then
ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.5 /usr/lib/x86_64-linux-gnu/libncurses.so.6
log_info \”创建兼容链接: libncurses.so.5 -> libncurses.so.6\”
fi
}
fi

# 检查并安装libtinfo
if ! ldconfig -p 2>/dev/null | grep -q \”libtinfo.so.6\”; then
log_info \”安装libtinfo…\”
apt-get install -y libtinfo6 2>/dev/null || {


apt-get install -y libtinfo-dev 2>/dev/null || true
apt-get install -y libtinfo5 2>/dev/null || true

# 创建兼容链接
if [ -f /usr/lib/x86_64-linux-gnu/libtinfo.so.5 ]; then
ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.5 /usr/lib/x86_64-linux-gnu/libtinfo.so.6
log_info \”创建兼容链接: libtinfo.so.5 -> libtinfo.so.6\”
fi
}
fi
# 检查并安装libaio
if ! ldconfig -p 2>/dev/null | grep -q \”libaio.so.1\”; then
log_info \”安装libaio…\”
apt-get install -y libaio-dev 2>/dev/null || \\
apt-get install -y libaio 2>/dev/null || \\
apt-get install -y libaio1 2>/dev/null || true
fi
;;

centos|rhel|rocky|almalinux|fedora)
# CentOS/RHEL系统的库修复
log_info \”修复CentOS/RHEL系统库…\”

# 根据版本使用不同的包管理器
if [[ \”$VER\” -ge \”8\” ]]; then
PKG_MGR=\”dnf\”
else
PKG_MGR=\”yum\”
fi

# 检查并修复 ncurses 库
if ! ldconfig -p 2>/dev/null | grep -q \”libncurses.so.6\”; then
log_info \”创建 ncurses 兼容链接…\”

if [[ \”$VER\” -ge \”8\” ]]; then
# CentOS 8+:安装 ncurses-compat-libs
$PKG_MGR install -y ncurses-compat-libs 2>/dev/null || {


log_warn \”无法安装 ncurses-compat-libs\”
}
fi

赞(0)
未经允许不得转载:171主机测评 » MySQL 8.* / 9.* 二进制包一键安装与卸载教程(Linux 通用)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址