Ubuntu 22.04下MySQL 8.0.33只读副本目录权限问题求助
解决Ubuntu 22.04上MySQL只读副本初始化权限拒绝问题
1. 修正目录权限与归属
你之前将目录归属设为ubuntu:mysql是错误的,mysqld进程以mysql用户运行,必须确保数据目录完全归mysql用户所有:
sudo chown -R mysql:mysql /var/lib/mysql_replica sudo chmod -R 700 /var/lib/mysql_replica
700权限是MySQL数据目录的标准配置,既能避免其他用户访问,又能保证mysql用户拥有完整操作权限。
2. 修正初始化命令的--basedir参数
你当前使用的--basedir=/var/lib/mysql是错误的——Ubuntu通过apt安装的MySQL,basedir应为程序安装目录/usr,而非默认数据目录。正确的初始化命令:
sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql_replica
也可以直接以mysql用户身份执行,避免sudo环境变量干扰:
sudo -u mysql mysqld --initialize --basedir=/usr --datadir=/var/lib/mysql_replica
3. 确认AppArmor规则配置正确
如果之前修改AppArmor规则后问题依旧,检查/etc/apparmor.d/usr.sbin.mysqld是否添加了以下规则(确保覆盖数据目录的读写权限):
/var/lib/mysql_replica/ r, /var/lib/mysql_replica/** rwk,
添加后重新加载AppArmor:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
4. 排查SELinux(若启用)
Ubuntu默认使用AppArmor,但部分场景可能会启用SELinux,先检查状态:
sestatus
若显示SELinux status: enabled,临时关闭测试:
sudo setenforce 0
如果初始化成功,再配置SELinux永久规则允许MySQL访问该目录。
5. 查看详细错误日志定位问题
若以上步骤无效,查看系统日志获取更具体的权限拒绝信息:
tail -f /var/log/syslog | grep mysqld # 或查看MySQL专属错误日志 tail -f /var/log/mysql/error.log
日志会明确指出被拒绝访问的具体文件或目录,帮助进一步排查。
内容的提问来源于stack exchange,提问作者Ryan Dorn
相关产品推荐
相关产品推荐

