MySQL 5.7 二进制包一键安装教程(Linux 通用)

📅 2026/6/26 16:23:47
MySQL 5.7 二进制包一键安装教程(Linux 通用)
本教程适用于在CentOS 7/8、Ubuntu 20.04/22.04/24.04、Debian 10/12、麒麟 V10等主流 Linux 发行版上,通过官方提供的glibc 2.12 通用二进制包快速部署 MySQL 5.7 社区版。所有脚本均已在多系统环境下验证,可直接使用。1. 系统兼容性与包选择MySQL 5.7 官方提供linux-glibc2.12二进制包,该包对较新系统的 glibc 版本向上兼容,下表为典型系统对应的 glibc 版本及推荐包:操作系统典型 glibc 版本应选择的 MySQL 5.7 二进制包CentOS 62.12必须使用linux-glibc2.12CentOS 7 / RHEL 72.17linux-glibc2.12(向上兼容)Ubuntu 18.04 / Debian 102.27linux-glibc2.12(向上兼容)Ubuntu 22.04 / 24.042.35+linux-glibc2.12(向上兼容)麒麟 V10(服务器版)基于 CentOS 8linux-glibc2.12麒麟 V10(桌面版)基于 Debian 10/11linux-glibc2.12✅ 已验证环境:CentOS 7.9、CentOS 8.2、Ubuntu 22.04、Ubuntu 24.04、Debian 12.10。2. 准备工作2.1 下载 MySQL 二进制包从 MySQL 官方下载页 选择5.7.44版本,下载mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz。将下载的包放置于任意目录(例如/home/mysql/)。为方便下载,可用我的网盘分享:百度链接:https://pan.baidu.com/s/1KmZcTrZcJivgk2Zo81xPXw?pwd=c16m提取码:c16m夸克链接:https://pan.quark.cn/s/9b428add66d4提取码:eejy2.2 准备自定义配置文件(可选)你可以提前写好my.cnf配置文件,并指定绝对路径。脚本会优先使用你提供的配置文件,否则会生成一份默认配置。注意:配置文件中必须包含basedir和datadir的正确路径,否则 MySQL 无法正常启动。创建数据库配置,执行 vi /etc/my.cnf :[mysqld] # ==================== 基础设置 ==================== user = mysql # MySQL运行用户 port = 3306 # 监听端口 bind-address = 0.0.0.0 # 绑定所有IP地址 basedir = /usr/local/mysql datadir = /data/mysql # ==================== 大小写设置 ==================== # 警告:只能在初始化前设置,之后不能更改 # 0: 区分大小写(Linux默认) # 1: 不区分大小写(存储为小写,比较时不区分) lower_case_table_names = 1 # ==================== 字符集设置 ==================== character-set-server = utf8mb4 # 服务器默认字符集 collation-server = utf8mb4_unicode_ci # 默认排序规则 init_connect = 'SET NAMES utf8mb4' # 连接初始化时执行的SQL # ==================== 连接设置 ==================== max_connections = 150 # 最大并发连接数(2G内存建议150-200) max_connect_errors = 1000 # 最大连接错误数 connect_timeout = 10 # 连接超时时间(秒) wait_timeout = 28800 # 非交互连接超时时间(秒) interactive_timeout = 28800 # 交互连接超时时间(秒) max_allowed_packet = 64M # 最大数据包大小 back_log = 300 # 连接请求队列大小 thread_cache_size = 16 # 线程缓存大小 # ==================== 查询缓存设置 ==================== # MySQL 5.7默认关闭查询缓存,因为在高并发下可能成为瓶颈 query_cache_type = 0 # 0=禁用查询缓存 query_cache_size = 0 # 查询缓存大小 # ==================== MyISAM 配置 ==================== key_buffer_size = 32M # MyISAM键缓冲区大小 myisam_sort_buffer_size = 64M # MyISAM排序缓冲区 myisam_max_sort_file_size = 10G # MyISAM排序使用的临时文件最大大小 # ==================== InnoDB 核心配置 ==================== innodb_buffer_pool_size = 384M # 缓冲池大小(推荐占总内存的50-60%) innodb_buffer_pool_instances = 1 # 缓冲池实例数(提高并发) innodb_log_file_size = 128M # 重做日志文件大小 innodb_log_buffer_size = 16M # 重做日志缓冲区大小 innodb_flush_log_at_trx_commit = 1 # 事务提交刷新日志策略 innodb_file_per_table = 1 # 每个表独立表空间 innodb_flush_method = O_DIRECT # 文件刷新方式(Linux推荐) innodb_lock_wait_timeout = 50 # 锁等待超时时间(秒) innodb_read_io_threads = 4 # 读IO线程数 innodb_write_io_threads = 4 # 写IO线程数 innodb_io_capacity = 200 # IO处理能力(根据磁盘性能调整) innodb_io_capacity_max = 500 # 最大IO处理能力 innodb_purge_threads = 1 # 清理线程数 innodb_old_blocks_time = 1000 # 热数据阈值(毫秒) innodb_stats_on_metadata = 0 # 关闭元数据统计 # ==================== 事务和SQL模式 ==================== transaction_isolation = READ-COMMITTED # 事务隔离级别 sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # SQL模式 log_bin_trust_function_creators = 1 # 允许创建存储函数 group_concat_max_len = 102400 # GROUP_CONCAT最大长度 max_execution_time = 30000 # 最大执行时间(毫秒) # ==================== 二进制日志和复制 ==================== server_id = 1 # 服务器ID(主从复制需要) #log_bin = /var/log/mysql/mysql-bin # 二进制日志路径 binlog_format = ROW # 二进制日志格式 expire_logs_days = 7 # 日志保留天数 max_binlog_size = 100M # 每个二进制日志文件大小 sync_binlog = 1 # 同步二进制日志 log_slave_updates = 1 # 从库记录二进制日志 binlog_cache_size = 32K # 二进制日志缓存大小 max_binlog_cache_size = 1G # 最大二进制日志缓存 # ==================== 错误和慢查询日志 ==================== #log_error = /var/log/mysql/error.log # 错误日志路径 slow_query_log = 1 # 启用慢查询日志 #slow_query_log_file = /var/log/mysql/slow.log # 慢查询日志路径 long_query_time = 2 # 慢查询阈值(秒) log_queries_not_using_indexes = 0 # 记录未使用索引的查询 log_slow_admin_statements = 1 # 记录管理语句 log_throttle_queries_not_using_indexes = 10 # 未使用索引查询记录频率 # ==================== 通用查询日志 ==================== general_log = 0 # 禁用通用查询日志 #general_log_file = /var/log/mysql/general.log # 通用日志路径 # ==================== 安全和审计 ==================== skip_name_resolve = 1 # 跳过DNS解析 #secure_file_priv = /var/lib/mysql-files # 安全文件目录 local_infile = 0 # 禁用本地文件加载 #default_authentication_plugin = mysql_native_password # 默认认证插件 # ==================== 时区设置 ==================== default_time_zone = '+08:00' # 设置时区为东八区 # ==================== 临时表设置 ==================== tmp_table_size = 32M # 内存临时表最大大小 max_heap_table_size = 32M # 内存表最大大小 #tmpdir = /tmp # 临时文件目录 # ==================== 表缓存设置 ==================== table_open_cache = 2000 # 表缓存大小 table_definition_cache = 1400 # 表定义缓存大小 open_files_limit = 65535 # 打开文件限制 # ==================== 排序和连接缓冲区 ==================== sort_buffer_size = 2M # 排序缓冲区大小 join_buffer_size = 2M # 连接缓冲区大小 read_buffer_size = 1M # 顺序读缓冲区大小 read_rnd_buffer_size = 2M # 随机读缓冲区大小 bulk_insert_buffer_size = 8M # 批量插入缓冲区大小 # ==================== 主从复制优化 ==================== # 如果启用主从复制才需要以下配置 # slave_parallel_type = DATABASE # slave_parallel_workers = 0 # slave_preserve_commit_order = 0 # ==================== 其他重要设置 ==================== ft_min_word_len = 4 # 全文索引最小词长度 innodb_ft_min_token_size = 3 # InnoDB全文索引最小词长度 innodb_ft_max_token_size = 84 # InnoDB全文索引最大词长度 performance_schema = 1 # 启用性能模式 innodb_print_all_deadlocks = 1 # 打印所有死锁信息 innodb_status_output = 0 # 关闭InnoDB状态输出 innodb_status_output_locks = 0 # 关闭锁状态输出 [mysql] default-character-set = utf8mb4 # MySQL客户端默认字符集 [client] default-character-set = utf8mb4 # 客户端默认字符集 port = 3306 # 客户端连接端口3. 一键安装脚本install_mysql5.7.sh3.1 脚本参数说明参数长选项说明默认值-p--packageMySQL 安装包的绝对路径./mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz-c--mycnf自定义my.cnf文件的绝对路径/etc/my.cnf-h--help显示帮助信息-3.2 执行安装# 1. 创建脚本文件viinstall_mysql5.7.sh# 2. 赋予执行权限chmod+x install_mysql5.7.sh# 3. 必须使用绝对路径执行(示例)./install_mysql5.7.sh--package/home/mysql/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz--mycnf/etc/my.cnf# 或使用简化参数./install_mysql5.7.sh-p/home/mysql/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz-c/etc/my.cnf3.3 安装脚本完整内容⚠️脚本内容已经过充分验证。#!/bin/bashSHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binset-e# 颜色定义RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'NC='\033[0m'# 默认参数(不要改)DEFAULT_MYSQL_PACKAGE="./mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz"DEFAULT_MYCNF_PATH="/etc/my.cnf"MYSQL_BASE_DIR="/usr/local/mysql"DATA_DIR="/data/mysql"# 显示用法usage(){echo"用法:$0[选项]"echo"选项:"echo" -p, --package PATH MySQL安装包路径 (默认:${DEFAULT_MYSQL_PACKAGE})"echo" -c, --mycnf PATH 自定义my.cnf路径 (默认:${DEFAULT_MYCNF_PATH})"echo" -h, --help 显示帮助信息"exit1}# 解析参数while[[$#-gt0]];docase$1in-p|--package)MYSQL_PACKAGE="$2"shift2;;-c|--mycnf)MYCNF_PATH="$2"shift2;;-h|--help)usage;;*)echo"未知参数:$1"usage;;esacdone# 设置默认值MYSQL_PACKAGE=${MYSQL_PACKAGE:-$DEFAULT_MYSQL_PACKAGE}MYCNF_PATH=${MYCNF_PATH:-$DEFAULT_MYCNF_PATH}# 日志函数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-ne0]];thenlog_error"请使用root权限运行此脚本"exit1fi}# 检测操作系统detect_os(){if[-f/etc/os-release];then./etc/os-releasecase"$ID"inkylin)# 麒麟系统:根据版本类型映射ifgrep-qi"server"/etc/os-release;thenOS="centos"# 服务器版基于 CentOSVER="8"# 对应 CentOS 8log_info"检测到麒麟服务器版,映射为 centos 8"elseOS="debian"# 桌面版基于 DebianVER=$(echo"$VERSION_ID"|cut-d.-f1)log_info"检测到麒麟桌面版,映射为 debian$VER"fi;;*)OS=$IDVER=$VERSION_ID;;esacelif[-f/etc/redhat-release];thenOS=$(cat/etc/redhat-release|awk'{print $1}'|tr'[:upper:]''[:lower:]')VER=$(cat/etc/redhat-release|awk'{print $4}'|cut-d.-f1)elseOS=$(uname-s|tr'[:upper:]''[:lower:]')VER=$(uname-r)filog_info"检测到操作系统:$OS$VER"case$OSinubuntu|debian)PACKAGE_MANAGER="apt-get"SERVICE_CMD="systemctl";;centos|rhel|rocky|almalinux)PACKAGE_MANAGER="yum"SERVICE_CMD="systemctl";;*)log_warn"未知操作系统,尝试使用systemctl"SERVICE_CMD="systemctl";;esac}# 卸载MariaDB和相关包remove_mariadb(){log_info"检查并卸载MariaDB..."# 停止MySQL/MariaDB服务ifsystemctl is-active--quietmysqld2/dev/null||systemctl is-active--quietmariadb2/dev/null;thensystemctl stop mysqld2/dev/null||systemctl stop mariadb2/dev/nullfi# Ubuntu/Debian系统ifcommand-vapt-get/dev/null;thenapt-getremove--purge-ymariadb-server mariadb-client mysql-server mysql-client2/dev/null||trueapt-getautoremove-y2/dev/null||trueapt-getautoclean-y2/dev/null||truefi# CentOS/RHEL系统ifcommand-vyum/dev/null;thenyum remove-ymariadb-server mariadb-client mariadb-common mysql-server mysql-client2/dev/null||trueyum clean all2/dev/null||truefi# 清理残留文件rm-rf/var/lib/mysql /var/lib/mariadb /etc/my.cnf /etc/mysql /var/log/mysql* log_info"MariaDB卸载完成"}# 检查安装包check_package(){if[!-f"$MYSQL_PACKAGE"];thenlog_error"MySQL安装包不存在:$MYSQL_PACKAGE"exit1fiif[[!"$MYSQL_PACKAGE"=~\.tar\.gz$]];thenlog_error"安装包必须是.tar.gz格式"exit1fi}# 安装系统依赖install_dependencies(){log_info"安装系统运行库依赖..."case$OSincentos|rhel|rocky|almalinux|fedora)log_info"安装RHEL/CentOS/Fedora依赖..."yuminstall-ylibaio numactl-libs ncurses-compat-libswgetcurlperl yuminstall-ylibstdc++-static2/dev/null