修改MySQL离线安装的数据存储目录
在离线环境下安装MySQL后,若需更改默认数据目录(如从
/var/lib/mysql改为自定义路径),必须手动配置并确保权限正确。以下是完整操作步骤。
1. 停止MySQL服务
在修改数据目录前,先停止正在运行的MySQL服务。
命令:
systemctl stop mysqld(适用于使用systemd的系统) 或
service mysqld stop
2. 创建新的数据目录并设置权限
选择目标路径(例如
/data/mysql),创建目录并赋予权限。
操作示例:
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql
3. 复制原有数据文件
将原目录中的所有内容复制到新目录。
命令:
cp -a /var/lib/mysql/* /data/mysql/
注意: 使用
-a参数保留权限和符号链接。
4. 修改MySQL配置文件
编辑MySQL的主配置文件
my.cnf,通常位于
/etc/my.cnf或
/etc/mysql/my.cnf。
在
[mysqld]段落下添加或修改以下两项:
datadir = /data/mysql
socket = /data/mysql/mysql.sock
如果存在
tmpdir或其他路径相关配置,也应一并更新。
若
my.cnf中引用了其他配置文件(如
!includedir),确认没有其他配置覆盖
datadir。
5. 修改启动脚本或服务文件(如需要)
某些系统中,MySQL的socket路径在启动脚本中硬编码。检查以下文件:
/etc/init.d/mysqld或 systemd 的 service 文件:
/usr/lib/systemd/system/mysqld.service
如有
--socket或
--datadir参数,需同步修改为新路径。
修改systemd服务后,执行:
systemctl daemon-reexec重新加载配置。
6. 更新AppArmor或SELinux策略(如启用)
Linux安全模块可能阻止MySQL访问新目录。
SELinux: 使用semanage fcontext添加上下文,并执行
restoreconAppArmor: 修改
/etc/apparmor.d/usr.sbin.mysqld,添加新路径权限
临时测试可关闭SELinux:
setenforce 0,但不建议生产环境长期关闭。
7. 启动MySQL并验证
尝试启动服务并检查状态。
systemctl start mysqld
systemctl status mysqld
查看错误日志定位问题:
tail -f /var/log/mysqld.log或对应error log路径。
登录MySQL执行
SHOW VARIABLES LIKE 'datadir';确认路径已变更。
基本上就这些。关键点是权限、配置一致性与安全策略适配,每一步都不能遗漏。
