Ubuntu源码编译安装MySQL多实例配置指南

Cora
Cora
发布时间:2026-10-14| 6人浏览过
原创

本文详细介绍在Ubuntu环境下通过源码编译方式安装MySQL并配置多实例的流程。内容涵盖CMake编译参数设置、用户权限处理及初始化过程,重点解析字符集不匹配和权限拒绝等常见错误的排查方法。

准备条件与环境清理

由于目标服务器(Ubuntu)之前已通过 apt-get 自动安装了MySQL,这会干扰后续的多实例配置。因此,第一步是彻底清理原有的系统级MySQL环境,避免配置文件和服务冲突。

  1. 创建基础目录与用户组: 为源码安装准备专用的用户和组。
# 创建mysql用户组
groupadd mysql
# 创建mysql系统用户并加入mysql组
useradd -r -g mysql mysql
  1. 清理残留文件: 防止旧的配置文件(如 /etc/my.cnf)影响新实例的加载。
# 进入源码解压后的顶层目录
make clean
rm -f CMakeCache.txt
rm -rf /etc/my.cnf

第1步:配置并编译MySQL源码

使用CMake工具进行源码配置,关键在于指定安装路径、数据目录以及字符集,以避免后续的乱码或兼容性问题。

  • 目的: 生成Makefile文件并准备编译环境。
  • 入口: MySQL源码解压后的根目录。
  • 动作: 执行 cmake 命令,传入关键参数。
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1
  • 参数说明:
    • -DCMAKE_INSTALL_PREFIX: 指定MySQL的安装主目录。
    • -DDEFAULT_CHARSET: 设置为 utf8,避免默认 latin1 导致的多语言兼容问题。
    • -DEXTRA_CHARSETS=all: 支持所有扩展字符集(可选,视需求而定)。

执行编译与安装:

make
make install

第2步:初始化单实例并验证成功状态

MySQL 5.7及以上版本推荐使用 mysqld --initialize,但在较早版本或特定源码环境中,常使用 scripts/mysql_install_db。多实例的核心在于为每个实例提供独立的配置文件和数据目录。

2.1 设置基本权限

在安装目录下,将根目录所有者设为 root,data 目录所有者设为 mysql 用户。

cd /usr/local/mysql
chown -R root:mysql .
chown -R mysql:mysql data

2.2 复制并修改配置文件 (以端口 3307 为例)

首先需要为第一个额外实例创建一个配置文件。假设我们将数据存放在 /usr/local/mysql/data_3307。

# 复制模板到指定位置作为新实例的my.cnf
cp support-files/my-medium.cnf /usr/local/mysql/data_3307/my.cnf

注意:需确保 /usr/local/mysql/data_3307/my.cnf 中的 port 设置为 3307,且 datadir 指向正确路径。

2.3 执行数据库初始化(关键点:--user=mysql)

这是最容易出错的环节。如果忽略 --user=mysql 参数,生成的文件将归属 root,导致后续启动失败。

错误场景演示: 若未加 --user=mysql,可能会遇到如下错误:

[ERROR] COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
[ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/host.frm' (errno: 13)

原因分析: 1. 字符集配置冲突(上文已在 CMake 阶段解决)。 2. 权限不足(Errno 13),因为初始化时以 root 身份运行,生成的库文件归 root 所有,而 mysqld_safe 以 mysql 用户运行时无法读取。

正确操作:

cd /usr/local/mysql
./scripts/mysql_install_db \
--user=mysql \
--defaults-file=/usr/local/mysql/data_3307/my.cnf \
--datadir=/usr/local/mysql/data_3307/

完成判断: 命令行输出 "Installing MySQL system tables... OK" 且无 ERROR 日志,即表示该实例初始化成功。

第3步:启动MySQL多实例服务

分别针对不同的端口启动 mysqld_safe 进程。以下以 3307 端口为例。

3.1 启动单个实例

  • 目的: 后台启动指定配置的MySQL服务。
  • 动作: 使用 mysqld_safe 调用对应的配置文件。
mysqld_safe --defaults-file=/usr/local/mysql/data_3307/my.cnf &

3.2 验证启动状态

检查进程是否存活,以及监听是否正常:

ps -ef | grep mysql
netstat -tlnp | grep 3307

常见问题排查与总结

连接被拒或Socket找不到

在启动了多个实例后,直接输入 mysql 可能仍然连接到默认的 3306 端口(如果存在),或者出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock' 错误。

解决方法: 必须明确指定主机地址和端口进行登录:

mysql -h127.0.0.1 -P3307 -u root -p

排错清单回顾

  1. 权限错误 (Errno 13): 初始化时必须添加 --user=mysql 参数。
  2. 字符集错误: 编译时需统一指定 DDEFAULT_CHARSET=utf8。
  3. 旧环境干扰: 务必清理 /etc/my.cnf 和已存在的 systemd/apt 服务。

以上就是基于Ubuntu源码编译安装MySQL多实例的详细流程。通过严格把控初始化阶段的权限与字符集参数,可以有效规避大部分部署陷阱。更多关于MySQL高级配置的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。