本文记录了在 Ubuntu 20.04 系统下安装 MySQL 8.0、进行安全配置以及修改数据存储目录时遇到的权限问题与解决方案。

参考来源: CSDN
1. 安装 MySQL 8.0
使用 apt 包管理器进行快速安装:
1 | sudo apt update |
2. 安全初始化
安装完成后,执行安全脚本以移除默认的不安全设置(如匿名用户、远程 root 登录等)。
1 | sudo mysql_secure_installation |
按照提示操作,建议:
- 启用密码强度验证
- 移除匿名用户
- 禁止 root 远程登录
- 移除测试数据库
3. 修改数据存储目录(避坑重点)
默认情况下,MySQL 的数据存放在 /var/lib/mysql。如果需要迁移到独立的硬盘(例如 /mysql/data),需要修改配置文件。
3.1 修改配置文件
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf (或 /etc/my.cnf):
1 | [mysqld] |
3.2 解决 AppArmor 权限报错
修改目录并重启 MySQL 后,可能会遇到启动失败,查看状态 (systemctl status mysql) 发现报错:Error: 13 (Permission denied)。
即使你已经将文件夹权限赋予了 mysql:mysql,依然无法启动。这是因为 Ubuntu 的 AppArmor 安全模块限制了 MySQL 进程对文件系统的访问。
解决方法:
编辑 AppArmor 的 MySQL 配置文件:
1 | sudo vi /etc/apparmor.d/usr.sbin.mysqld |
找到关于 /var/lib/mysql/ 的规则,将其修改为你的新目录,或者新增规则:
1 | # 允许访问新的数据目录 |
重启 AppArmor 和 MySQL 服务:
1 | sudo /etc/init.d/apparmor restart |
或者(不推荐)临时关闭 AppArmor:
1 | systemctl stop apparmor |
4. 密码重置与初始化 troubleshooting
如果忘记 root 密码,可以通过跳过权限表方式重置。
- 编辑配置文件,在
[mysqld]下添加:1
skip-grant-tables
- 重启服务。
- 无密码登录 MySQL:
1
mysql -u root
- 执行重置 SQL:
1
2
3
4
5flush privileges;
use mysql;
-- MySQL 8.0 修改密码语法
alter user 'root'@'localhost' identified by '你的新密码';
flush privileges; - 移除
skip-grant-tables并重启服务。
注意:如果是 Systemd 管理的服务,修改用户或目录后,需确保 /lib/systemd/system/mysql.service 中的 User 和 Group 设置正确。
本文作者: NUK
最后更新: 2026年01月08日 17:59:45
本文链接: http://www.uilucky.com/post/991102e6.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!