Ubuntu 20.04下执行mysqld设置系统变量时出现权限拒绝(errno:13)的问题求助
Ubuntu 20.04下执行mysqld设置系统变量时出现权限拒绝(errno:13)的问题求助
看起来你遇到的是手动执行mysqld命令时的权限上下文不匹配问题——虽然MySQL服务本身能正常启动、处理请求,但直接手动启动mysqld进程时,没有匹配到系统服务运行时的权限配置,才触发了权限报错。
核心原因
在Ubuntu 20.04上,MySQL默认通过systemd服务管理,启动时会以mysql用户身份运行,同时Ubuntu的AppArmor安全模块会限制mysqld进程的访问路径和权限范围。而你直接执行mysqld命令时,哪怕用了sudo,进程的运行上下文和systemd管理的服务完全不一样,自然会触发权限限制,导致无法创建测试文件。
推荐解决方案(持久化修改)
不要手动执行mysqld来修改参数,正确的做法是修改MySQL配置文件并重启服务:
- 打开Ubuntu上MySQL的主配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- 在
[mysqld]区块下添加或修改以下参数:
innodb_buffer_pool_size = 16G innodb_buffer_pool_instances = 32
- 保存文件后,重启MySQL服务让配置生效:
sudo systemctl restart mysql
- 验证参数是否生效:登录MySQL命令行执行
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; SHOW VARIABLES LIKE 'innodb_buffer_pool_instances';
临时测试方案(不持久化)
如果你只是想临时测试这个参数(不想修改配置文件),可以先停止正在运行的MySQL服务,然后以mysql用户身份手动启动:
# 先停止systemd管理的MySQL服务 sudo systemctl stop mysql # 以mysql用户身份启动mysqld并加载指定参数 sudo -u mysql mysqld --innodb-buffer-pool-size=16G --innodb-buffer-pool-instances=32
注意:这种方式启动的MySQL不会被systemd管理,关闭终端或者进程退出后服务就会停止,仅适合临时测试使用。
备注:内容来源于stack exchange,提问作者sedge99
相关产品推荐
相关产品推荐

