背景介绍:为什么选择手动安装 GLIBC 版 MySQL?
在 CentOS 系统中,通过 YUM 安装 MySQL 虽然便捷,但存在版本锁定(如默认安装 MySQL 8.0 或 MariaDB)、配置固化等问题。对于需要特定版本(如 MySQL 5.6)、自定义安装路径或精细控制配置的场景,手动下载 GLIBC 压缩包安装是更灵活的选择:
- 可自由选择 MySQL 版本(适配老旧业务系统兼容性);
- 数据目录与安装目录分离,便于备份和迁移;
- 完全自定义配置参数,针对服务器硬件优化性能;
- 无依赖冲突风险(避免 YUM 源版本不一致问题)。
本文从 “环境准备→官网下载→手动配置→服务运维” 全流程讲解,保留所有手动操作细节,适合需要深度掌控 MySQL 部署的运维人员。
核心关键词解释
- GLIBC 版 MySQL:基于 GNU C 库编译的 MySQL 二进制包,无需编译源码,直接解压即可使用,适配 Linux 系统(区别于源码编译版或 RPM 包);
- mysql_install_db:MySQL 初始化工具,用于生成系统数据库(如
mysql库)、创建 root 账号和权限表,是手动安装的必需步骤; - mysqld_safe:MySQL 守护进程启动脚本,负责监控
mysqld进程,崩溃时自动重启,提供日志管理功能; - systemd 服务:Linux 系统服务管理器,用于统一管理 MySQL 启停、开机自启和状态监控;
- Socket 文件:MySQL 本地连接的 UNIX 域套接字文件,比 TCP 连接更高效,默认路径需与配置文件一致。
一、环境准备(基础依赖与用户配置)
1. 安装系统依赖库
GLIBC 版 MySQL 运行依赖libaio库(用于异步 I/O 操作),缺少会导致启动失败:
bash
# 以root用户执行,安装libaio及开发包(包含头文件)
yum install -y libaio libaio-devel
# 验证依赖是否安装成功(输出libaio-xxx即为成功)
rpm -qa | grep libaio
2. 创建 MySQL 专用用户和组
避免使用 root 用户运行 MySQL(降低权限泄露风险),创建独立的mysql用户:
bash
# 创建mysql组(-r表示系统组,不用于登录)
groupadd -r mysql
# 创建mysql用户(-r系统用户,-g归属mysql组,-s禁止登录,-d指定家目录)
useradd -r -g mysql -s /sbin/nologin -d /home/mysql mysql
# 验证用户创建结果(显示uid、gid信息)
id mysql
3. 创建核心目录(规范路径结构)
提前规划目录结构,避免后续权限混乱:
| 目录用途 | 路径 | 作用说明 |
|---|---|---|
| 安装目录 | /usr/local/mysql-glibc | 存放 MySQL 二进制文件、配置模板和工具 |
| 数据目录 | /data/mysql-glibc | 存放数据库文件(独立目录便于备份和扩容) |
| 日志目录 | /var/log/mysql-glibc | 存放错误日志、慢查询日志(与系统日志分离) |
| PID 目录 | /var/run/mysql-glibc | 存放 MySQL 进程 PID 文件(便于系统管理) |
bash
# 批量创建目录(-p自动创建父目录)
mkdir -p /usr/local/mysql-glibc \
/data/mysql-glibc \
/var/log/mysql-glibc \
/var/run/mysql-glibc
# 设置目录权限(所有目录归属mysql用户,避免启动时权限不足)
chown -R mysql:mysql /usr/local/mysql-glibc
chown -R mysql:mysql /data/mysql-glibc
chown -R mysql:mysql /var/log/mysql-glibc
chown -R mysql:mysql /var/run/mysql-glibc
# 数据目录设置严格权限(仅mysql用户可读写,防止数据泄露)
chmod 700 /data/mysql-glibc
chmod 700 /var/log/mysql-glibc
二、手动访问官网下载 MySQL 5.6 GLIBC 压缩包
1. 访问 MySQL 官网下载页面
打开浏览器,进入 MySQL 归档版本下载页:MySQL 5.6 Archive Downloads筛选条件:
- Product Version:选择
5.6.35(或其他稳定版,如 5.6.51); - Operating System:选择
Linux-GLIBC 2.5(适配 CentOS 7); - OS Version:选择
x86_64(64 位系统,主流服务器架构)。
找到文件名类似mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz的压缩包,点击Download按钮。
2. 处理下载验证(跳过登录)
点击下载后,页面会提示 “登录 / 注册 Oracle 账号”,直接点击下方的No thanks, just start my download跳过,开始下载压缩包。
3. 上传压缩包到服务器
通过 FTP 工具(如 FileZilla)或scp命令,将压缩包上传到服务器的/tmp目录(临时目录,避免占用安装空间):
bash
# 本地终端执行(将本地文件上传到服务器)
scp ~/Downloads/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz root@你的服务器IP:/tmp
4. 验证压缩包完整性(可选)
计算压缩包 MD5 值,与官网提供的校验值对比,确保文件未损坏:
bash
cd /tmp
md5sum mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
三、解压压缩包到安装目录
bash
cd /tmp
# 解压压缩包(-z处理gzip格式,-x解压,-v显示过程,-f指定文件)
tar -zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
# 查看解压后的目录(生成mysql-5.6.35-linux-glibc2.5-x86_64目录)
ls -ld mysql-5.6.35-linux-glibc2.5-x86_64
# 将解压后的文件移动到安装目录(避免多一层目录)
mv mysql-5.6.35-linux-glibc2.5-x86_64/* /usr/local/mysql-glibc/
# 验证文件是否到位(检查核心二进制文件)
ls -l /usr/local/mysql-glibc/bin/ | grep -E "mysqld|mysqld_safe"
- 输出类似
-rwxr-xr-x 1 mysql mysql 78613510 Nov 28 2016 mysqld即为成功。
四、初始化 MySQL 数据目录(生成系统表)
GLIBC 版 MySQL 无默认数据文件,需通过mysql_install_db工具初始化(生成系统库和 root 账号):
bash
# 切换到mysql用户(必须用mysql用户初始化,否则数据文件权限错误)
su - mysql -s /bin/bash
# 执行初始化命令(参数必须完整,指定安装目录、数据目录和日志路径)
/usr/local/mysql-glibc/scripts/mysql_install_db \
--basedir=/usr/local/mysql-glibc \
--datadir=/data/mysql-glibc \
--user=mysql \
--log-error=/var/log/mysql-glibc/mysql-error.log
# 初始化成功标志:输出"Two all-privilege accounts were created"
# 退出mysql用户,回到root身份
exit
初始化失败排查
- 提示 “mysql_install_db: command not found”:检查路径是否正确(确认
/usr/local/mysql-glibc/scripts/下是否有该文件); - 提示 “error while loading shared libraries: libaio.so.1”:重新安装
libaio-devel; - 提示 “Cannot create directory '/data/mysql-glibc'”:检查目录权限(执行
chown -R mysql:mysql /data/mysql-glibc)。
五、手动配置 MySQL 主配置文件(my.cnf)
创建/etc/my.cnf文件,指定核心路径和性能参数(覆盖默认配置):
bash
vim /etc/my.cnf
写入完整配置(根据服务器硬件调整参数,示例为 2GB 内存配置):
ini
[mysqld]
# 核心路径配置(必须与实际目录一致)
basedir = /usr/local/mysql-glibc # 安装目录
datadir = /data/mysql-glibc # 数据目录
socket = /var/run/mysql-glibc/mysql.sock # Socket文件路径
pid-file = /var/run/mysql-glibc/mysql.pid # PID文件路径
log-error = /var/log/mysql-glibc/mysql-error.log # 错误日志路径
# 基础服务配置
port = 3306 # 服务端口(默认3306,可修改避免冲突)
user = mysql # 运行用户(必须为mysql)
character-set-server = utf8 # 默认字符集(避免中文乱码)
skip-name-resolve # 禁用DNS解析(加快客户端连接)
lower_case_table_names = 1 # 表名不区分大小写(适配Windows迁移)
# 性能优化配置(2GB内存示例)
max_connections = 100 # 最大连接数(避免连接耗尽)
innodb_buffer_pool_size = 512M # InnoDB缓存(内存的50%-70%最佳)
query_cache_size = 64M # 查询缓存(小内存可设为32M)
tmp_table_size = 64M # 临时表大小(避免磁盘临时表)
max_allowed_packet = 64M # 最大数据包大小(支持大字段)
[mysql]
# 客户端配置(与服务端Socket路径一致)
default-character-set = utf8
socket = /var/run/mysql-glibc/mysql.sock
[mysqld_safe]
# 守护进程配置(与服务端日志、PID路径一致)
log-error = /var/log/mysql-glibc/mysql-error.log
pid-file = /var/run/mysql-glibc/mysql.pid
保存后设置配置文件权限:
bash
chmod 644 /etc/my.cnf # 仅root可修改,其他用户只读
chown root:root /etc/my.cnf
六、修复 mysqld_safe 脚本硬编码路径(关键步骤)
GLIBC 版mysqld_safe脚本默认硬编码路径为/usr/local/mysql,需替换为实际安装目录:
bash
# 搜索脚本中的旧路径
grep -n "/usr/local/mysql" /usr/local/mysql-glibc/bin/mysqld_safe
# 全局替换旧路径为实际安装目录(/usr/local/mysql-glibc)
sed -i 's#/usr/local/mysql#/usr/local/mysql-glibc#g' /usr/local/mysql-glibc/bin/mysqld_safe
# 验证替换结果(输出为空则成功)
grep -n "/usr/local/mysql" /usr/local/mysql-glibc/bin/mysqld_safe
七、配置 systemd 服务(管理 MySQL 启停)
通过 systemd 统一管理 MySQL 服务(支持开机自启、状态监控):
bash
vim /usr/lib/systemd/system/mysql-glibc.service
写入服务配置:
ini
[Unit]
Description=MySQL 5.6 (GLIBC Install) # 服务描述
After=network.target syslog.target # 依赖网络和日志服务启动后再启动
[Service]
Type=simple # 启动类型(适配mysqld_safe前台运行)
User=mysql # 运行用户
Group=mysql # 运行组
PIDFile=/var/run/mysql-glibc/mysql.pid # PID文件路径
# 启动命令(调用mysqld_safe,参数与配置文件一致)
ExecStart=/usr/local/mysql-glibc/bin/mysqld_safe \
--basedir=/usr/local/mysql-glibc \
--datadir=/data/mysql-glibc \
--pid-file=/var/run/mysql-glibc/mysql.pid \
--log-error=/var/log/mysql-glibc/mysql-error.log
# 停止命令(通过mysqladmin优雅停止,避免数据损坏)
ExecStop=/usr/local/mysql-glibc/bin/mysqladmin \
-u root \
-S /var/run/mysql-glibc/mysql.sock \
shutdown
# 重载配置(发送HUP信号)
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure # 失败时自动重启
RestartSec=3 # 重启间隔3秒
[Install]
WantedBy=multi-user.target # 多用户模式下启动(开机自启)
重载 systemd 配置并验证:
bash
systemctl daemon-reload
systemctl list-unit-files | grep mysql-glibc # 输出"loaded"即为成功
八、启动 MySQL 服务并验证完整性
1. 启动服务并查看状态
bash
systemctl start mysql-glibc
systemctl status mysql-glibc -l # 显示"active (running)"即为成功
2. 解决启动超时问题
若提示 “Job for mysql-glibc.service failed because a timeout was exceeded”,但ps aux | grep mysqld能看到进程,执行以下命令:
bash
systemctl daemon-reexec # 刷新systemd状态判断
systemctl start mysql-glibc
systemctl status mysql-glibc -l
3. 验证 MySQL 功能正常
(1)本地连接测试(初始化后 root 无密码)
bash
# 连接MySQL客户端(-S指定Socket路径,-p后直接回车)
/usr/local/mysql-glibc/bin/mysql -u root -S /var/run/mysql-glibc/mysql.sock -p
进入mysql>命令行后执行验证 SQL:
sql
-- 查看MySQL版本(确认与安装版本一致)
SELECT VERSION();
-- 查看系统数据库(确认初始化成功)
SHOW DATABASES;
-- 退出客户端
EXIT;
(2)设置 root 密码(安全必需)
bash
# 设置root密码(替换为实际强密码)
/usr/local/mysql-glibc/bin/mysqladmin \
-u root \
-S /var/run/mysql-glibc/mysql.sock \
password 'YourStrongPassword@2024'
# 验证密码生效(连接时需输入新密码)
/usr/local/mysql-glibc/bin/mysql -u root -p -S /var/run/mysql-glibc/mysql.sock
(3)配置远程访问(可选)
默认 root 仅允许本地访问,如需远程连接,执行授权:
sql
-- 本地连接MySQL后执行
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'YourStrongPassword@2024' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
开放防火墙 3306 端口:
bash
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
(4)设置开机自启
bash
systemctl enable mysql-glibc
systemctl is-enabled mysql-glibc # 输出"enabled"即为成功
九、日常维护操作(必备)
1. 服务启停与状态查看
bash
# 启动服务
systemctl start mysql-glibc
# 停止服务(优雅停止)
systemctl stop mysql-glibc
# 重启服务
systemctl restart mysql-glibc
# 查看状态
systemctl status mysql-glibc -l
# 查看日志(实时跟踪)
journalctl -u mysql-glibc -f
2. 数据备份(mysqldump 全量备份)
bash
# 创建备份目录
mkdir -p /data/mysql_backup
# 备份所有数据库(文件名含日期)
/usr/local/mysql-glibc/bin/mysqldump \
-u root \
-p \
-S /var/run/mysql-glibc/mysql.sock \
--all-databases \
--single-transaction \ # 避免锁表(InnoDB适用)
--master-data=2 \ # 记录二进制日志位置
> /data/mysql_backup/$(date +%Y%m%d)_all_db.sql
3. 日志管理(定期清理)
bash
# 查看日志大小
du -sh /var/log/mysql-glibc/mysql-error.log
# 清空日志(测试环境)
> /var/log/mysql-glibc/mysql-error.log
# 生产环境:配置logrotate自动轮转
yum install -y logrotate
vim /etc/logrotate.d/mysql-glibc
写入 logrotate 配置:
ini
/var/log/mysql-glibc/mysql-error.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 640 mysql mysql
}
十、常见问题排查(汇总)
| 问题现象 | 可能原因 | 解决方案 | |
|---|---|---|---|
| 启动提示 “The file /usr/local/mysql/bin/mysqld does not exist” | mysqld_safe 脚本硬编码旧路径 | 重新执行步骤六,替换路径为/usr/local/mysql-glibc | |
| 启动提示 “ERROR! The server quit without updating PID file” | 数据目录权限错误 / 未初始化 / 端口被占用 | 1. chown -R mysql:mysql /data/mysql-glibc;2. 重新初始化;3. `netstat -tulpn | grep 3306` 查看占用进程 |
| 连接提示 “Can't connect to local MySQL server through socket” | Socket 文件不存在 / 路径不匹配 | 1. 启动服务;2. 确认配置文件与连接命令的 Socket 路径一致 | |
| 远程连接提示 “Access denied” | 未授权远程访问 / 密码错误 / 防火墙未开放 | 1. 授权root@%;2. 重置密码;3. 开放 3306 端口 |
十一、附加问题解答
1. 如何查看 MySQL 的版本信息?
bash
# 方法1:通过mysql客户端查看
/usr/local/mysql-glibc/bin/mysql -u root -p -e "SELECT VERSION();"
# 方法2:通过mysqld二进制文件查看
/usr/local/mysql-glibc/bin/mysqld --version
# 方法3:查看进程信息
ps aux | grep mysqld | grep -v grep
2. 如何修改 root 用户的密码?
bash
# 方法1:使用mysqladmin(已知旧密码)
/usr/local/mysql-glibc/bin/mysqladmin -u root -p旧密码 password '新密码'
# 方法2:MySQL客户端修改(忘记密码时需跳过权限表启动)
# 1. 停止MySQL服务
systemctl stop mysql-glibc
# 2. 跳过权限表启动
/usr/local/mysql-glibc/bin/mysqld_safe --skip-grant-tables &
# 3. 无密码登录
/usr/local/mysql-glibc/bin/mysql -u root
# 4. 修改密码
USE mysql;
UPDATE user SET password=PASSWORD('新密码') WHERE user='root';
FLUSH PRIVILEGES;
EXIT;
# 5. 重启服务
systemctl restart mysql-glibc
3. 如何备份和恢复 MySQL 数据库?
备份(全量):
bash
/usr/local/mysql-glibc/bin/mysqldump -u root -p --all-databases > backup.sql
恢复:
bash
# 方法1:通过mysql客户端恢复
/usr/local/mysql-glibc/bin/mysql -u root -p < backup.sql
# 方法2:指定数据库恢复
/usr/local/mysql-glibc/bin/mysql -u root -p 目标数据库名 < backup.sql
总结
手动安装 GLIBC 版 MySQL 的核心步骤为:环境准备→官网下载→解压安装→初始化数据→配置文件→修复脚本→systemd 管理→验证功能。关键注意事项包括:
- 数据目录与安装目录分离,便于维护;
- 修复 mysqld_safe 脚本路径,避免启动失败;
- 严格控制目录权限,使用 mysql 用户运行服务;
- 初始化后立即设置 root 密码,保障安全。
通过本文步骤,可完成 MySQL 5.6 的生产级部署,兼顾灵活性和稳定性。
5670

被折叠的 条评论
为什么被折叠?



