MySQL 5.5.62 已经停止官方维护,Ubuntu 22.04 官方 APT 软件源也没有这个版本。因此不能直接使用 apt install mysql-server=5.5.62。
可采用以下方案:
-
从 MySQL 官方历史归档获取 5.5.62 源码。
-
在 Ubuntu 22.04 上编译安装。
-
安装到
/usr/local/mysql。 -
数据目录使用
/var/lib/mysql。 -
配置文件使用
/etc/my.cnf。 -
使用 systemd 管理服务。
-
配置本机和受限 IP 的远程访问。
注意: MySQL 5.5 的源码与现代 OpenSSL、GCC、CMake 等工具链存在兼容性问题,编译过程可能需要针对性补丁。如果是必须保持 5.5.62 的旧项目,建议使用独立虚拟机隔离运行。
一、检查系统环境
以下教程以 Ubuntu 22.04 x86_64 为例。
先执行:
uname -m
cat /etc/os-release
ldd --version | head -1
预期架构:
x86_64
检查是否已经安装其他 MySQL 或 MariaDB:
dpkg -l | grep -Ei 'mysql|mariadb'
检查端口:
ss -lntp | grep 3306
如果已经有数据库服务运行,不要直接覆盖或删除数据目录。先确认现有数据库是否需要保留。
二、安装依赖
更新软件源:
apt update
安装运行依赖和管理工具:
apt install -y \
wget \
curl \
tar \
gzip \
libaio1 \
libncurses5 \
libtinfo5 \
libnuma1 \
openssl \
ca-certificates \
vim \
ufw
如果某个兼容库在当前软件源中不存在,可以先检查:
apt-cache policy libncurses5 libtinfo5
三、下载 MySQL 5.5.62
这里采用 Linux Generic 二进制发行包,而不是源码编译。
这样可以避免在 Ubuntu 22.04 上使用现代 GCC 和 OpenSSL 3 编译旧版 MySQL 所产生的兼容问题。
MySQL 官方 5.5 手册支持通过通用二进制压缩包安装。
MySQL Community Downloads+1
创建下载目录:
mkdir -p /usr/local/src
cd /usr/local/src
下载:
wget -O mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz \
'https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz'
如果下载失败,可以进入:
选择:
-
Product Version:5.5.62
-
Operating System:Linux – Generic
-
OS Version:Linux – Generic (glibc 2.12)
-
Architecture:x86, 64-bit
下载对应的 TAR 包。
检查文件:
ls -lh mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz
解压:
tar -xzf mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz
移动安装目录:
mv mysql-5.5.62-linux-glibc2.12-x86_64 \
/usr/local/mysql-5.5.62
建立软链接:
ln -s /usr/local/mysql-5.5.62 /usr/local/mysql
检查:
ls -l /usr/local/mysql
四、创建 MySQL 用户和目录
创建专用运行用户:
groupadd mysql
useradd -r -g mysql -s /usr/sbin/nologin mysql
创建数据目录:
mkdir -p /var/lib/mysql
mkdir -p /var/log/mysql
mkdir -p /var/run/mysqld
设置权限:
chown -R mysql:mysql /var/lib/mysql
chown -R mysql:mysql /var/log/mysql
chown mysql:mysql /var/run/mysqld
chown -R root:root /usr/local/mysql-5.5.62
安装目录保持 root 所有,MySQL 运行用户只需要读取程序文件和访问数据、日志目录。
五、配置 MySQL
创建配置文件:
vim /etc/my.cnf
写入以下内容:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set = utf8
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /var/lib/mysql
port = 3306
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
bind-address = 0.0.0.0
character-set-server = utf8
collation-server = utf8_general_ci
default-storage-engine = InnoDB
max_connections = 200
skip-name-resolve
innodb_file_per_table = 1
innodb_buffer_pool_size = 128M
log-error = /var/log/mysql/error.log
[mysql]
default-character-set = utf8
注意:
-
bind-address = 0.0.0.0表示监听所有 IPv4 网卡。 -
skip-name-resolve表示不使用 DNS 反向解析,远程授权应使用 IP 或%。 -
innodb_buffer_pool_size可以根据服务器实际内存调整。
六、初始化数据库
执行:
cd /usr/local/mysql
scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/var/lib/mysql
如果初始化成功,应该看到类似:
OK
Filling help tables...
检查数据目录:
ls -lah /var/lib/mysql
确保数据库文件已经生成。
如果初始化失败,先检查依赖:
ldd /usr/local/mysql/bin/mysqld | grep "not found"
如果有缺失的动态库,需要先解决依赖,再继续启动服务。
七、配置 MySQL 环境变量
创建 PATH 配置:
vim /etc/profile.d/mysql.sh
写入:
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
生效:
source /etc/profile.d/mysql.sh
检查:
mysql --version
预期:
mysql Ver 14.14 Distrib 5.5.62
八、配置 systemd 服务
创建服务文件:
vim /etc/systemd/system/mysql.service
写入:
[Unit]
Description=MySQL 5.5.62 Database Server
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
RuntimeDirectory=mysqld
RuntimeDirectoryMode=0755
ExecStart=/usr/local/mysql/bin/mysqld \
--defaults-file=/etc/my.cnf
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载 systemd:
systemctl daemon-reload
启动:
systemctl start mysql
设置开机自启:
systemctl enable mysql
查看状态:
systemctl status mysql
Active: active (running)
查看日志:
tail -f /var/log/mysql/error.log
九、设置 root 密码
首次启动后,执行:
mysql_secure_installation
按照交互提示:
-
输入当前 root 密码(首次通常为空)。
-
设置新的 root 密码。
-
删除匿名用户。
-
禁止 root 远程登录。
-
删除 test 数据库。
-
重新加载权限表。
如果该脚本无法正常运行,也可以手动设置:
mysql -uroot
执行:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的强密码');
DELETE FROM mysql.user WHERE User = '';
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;
退出:
EXIT;
再次验证:
mysql -uroot -p
十、创建数据库和远程账户
登录:
mysql -uroot -p
创建数据库:
CREATE DATABASE appdb
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;
创建远程账户。
例如允许公网 IP 203.0.113.10 连接:
CREATE USER 'appuser'@'203.0.113.10'
IDENTIFIED BY '替换为强密码';
授权:
GRANT ALL PRIVILEGES ON appdb.*
TO 'appuser'@'203.0.113.10';
刷新权限:
FLUSH PRIVILEGES;
查看用户:
SELECT User, Host FROM mysql.user;
如果你需要多个客户端连接,可以分别创建多个 IP 对应的账户。
如果确实需要允许任意 IP:
CREATE USER 'appuser'@'%'
IDENTIFIED BY '替换为强密码';
GRANT ALL PRIVILEGES ON appdb.*
TO 'appuser'@'%';
FLUSH PRIVILEGES;
但不建议在公网直接使用 %。
十一、配置防火墙
假设:
-
SSH 端口:22
-
MySQL 端口:3306
-
远程客户端 IP:
203.0.113.10
首先放行 SSH,避免启用防火墙后断开远程管理:
ufw allow 22/tcp
只允许指定 IP 连接 MySQL:
ufw allow from 203.0.113.10 to any port 3306 proto tcp
启用:
ufw enable
查看:
ufw status numbered
如果有多个客户端,分别添加规则。
不要执行 ufw allow 3306/tcp,否则会向所有来源开放 MySQL 端口。
如果你的服务器还有云平台安全组,也要同步限制 3306 的来源 IP。
十二、连接测试
1. 本机测试
mysql -h 127.0.0.1 -P 3306 -u appuser -p appdb
2. 远程测试
在另一台服务器执行:
mysql -h 服务器公网IP \
-P 3306 \
-u appuser \
-p appdb
3. 查看监听状态
ss -lntp | grep 3306
预期:
LISTEN 0 80 0.0.0.0:3306
4. 检查数据库版本
SELECT VERSION();
预期:
5.5.62
十三、数据库备份
创建备份目录:
mkdir -p /var/backups/mysql
备份所有数据库:
mysqldump -uroot -p \
--all-databases \
--single-transaction \
> /var/backups/mysql/all.sql
备份指定数据库:
mysqldump -uroot -p appdb \
> /var/backups/mysql/appdb.sql
恢复:
mysql -uroot -p appdb \
< /var/backups/mysql/appdb.sql
建议定期将备份复制到另一台服务器或对象存储,不要只保存在数据库所在磁盘。
十四、日常管理命令
|
操作 |
命令 |
|---|---|
|
启动 |
|
|
停止 |
|
|
重启 |
|
|
状态 |
|
|
开机自启 |
|
|
取消自启 |
|
|
查看日志 |
|
|
查看端口 |
|
|
查看版本 |
|
|
登录 |
|
十五、最终目录结构
安装完成后,目录结构如下:
/usr/local/
├── mysql -> mysql-5.5.62/
└── mysql-5.5.62/
├── bin/
├── include/
├── lib/
├── share/
└── scripts/
/etc/
├── my.cnf
├── systemd/system/
│ └── mysql.service
└── profile.d/
└── mysql.sh
/var/lib/mysql/ # 数据文件
/var/log/mysql/ # 日志文件
/var/run/mysqld/ # 运行文件
/var/backups/mysql/ # 备份文件
十六、建议进一步确认的服务器环境
MySQL 5.5.62 的通用二进制包虽然比源码编译更省事,但仍需要检查实际运行依赖,尤其是 libaio、ncurses 等动态库。官方手册也明确指出 libaio 是运行依赖。
MySQL Community Downloads+1
在正式安装之前,可以先执行下面的命令,把结果发给我:
echo "===== OS ====="
cat /etc/os-release | grep -E 'PRETTY_NAME|VERSION='
echo "===== ARCH ====="
uname -m
echo "===== GLIBC ====="
ldd --version | head -1
echo "===== MEMORY ====="
free -h
echo "===== DISK ====="
df -h /
echo "===== MYSQL ====="
dpkg -l | grep -Ei 'mysql|mariadb'
echo "===== PORT ====="
ss -lntp | grep 3306 || true
