解决方法:停止MySQL服务,检查my.cnf配置文件中的datadir路径是否正确且存在权限,使用chown -R mysql:mysql /new/datadir 赋予目录权限,然后mysqld --initialize --datadir=/new/datadir 初始化数据目录,重启服务即可。远程处理时,确保SSH以root登录,修改SELinux上下文chcon -Rt mysqld_db_t /new/datadir。
来源1
ER_CANT_SET_DATA_DIR (MY-013276)错误通常发生在尝试设置数据目录时,常见原因是目录权限不足或SELinux策略阻止。首先停止mysqld服务:systemctl stop mysqld。然后设置目录所有者:chown -R mysql:mysql /var/lib/mysql-new。移动旧数据:mv /var/lib/mysql /var/lib/mysql-old。创建软链接:ln -s /var/lib/mysql-new /var/lib/mysql。重启:systemctl start mysqld。
来源2
远程服务器上遇到这个错误,登录服务器后编辑/etc/my.cnf,确认datadir=/data/mysql路径存在。然后执行setenforce 0临时关闭SELinux,chown -R mysql.mysql /data/mysql,chmod -R 755 /data/mysql。初始化如果需要:mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir=/data/mysql。systemctl restart mysqld。
来源3
故障代码HY000 MY-013276表示不能设置数据目录。解决步骤:1. 检查my.cnf中datadir设置。2. mkdir -p /new/mysql/data。3. chown mysql:mysql /new/mysql/data。4. semanage fcontext -a -t mysqld_db_t "/new/mysql/data(/.*)?"。5. restorecon -Rv /new/mysql/data。6. systemctl restart mysqld。
来源4
在远程处理时,先备份my.cnf。停止服务后,验证目录:ls -ld /custom/datadir,应显示drwx------. mysql mysql。然后mysqld_safe --datadir=/custom/datadir --user=mysql &测试启动。如果SELinux问题,ausearch -m avc -ts recent查看日志,setsebool -P httpd_can_network_connect_db 1如果相关。
来源5
数据目录设置失败修复:如果是从旧目录迁移,rsync -av /old/datadir/ /new/datadir/同步数据。然后net stop mysql,net start mysql在Windows远程,但Linux用systemctl。确保my.cnf路径无误,datadir = /new/datadir无尾随斜杠。
来源6
常见原因是AppArmor或SELinux。Ubuntu上:aa-status检查,aa-complain /usr/sbin/mysqld。CentOS:setenforce 0测试,重启后永久编辑/etc/selinux/config SELINUX=permissive。目录权限必须mysql用户可写。
FAQ
Q: 为什么会出现ER_CANT_SET_DATA_DIR错误?
A: 通常是数据目录权限不对、SELinux/AppArmor阻止或路径不存在。
Q: 远程怎么快速修复权限?
A: SSH root,chown -R mysql:mysql /datadir,chmod 750 /datadir。
Q: 初始化新目录怎么做?
A: mysqld --initialize --datadir=/newdir --user=mysql。
Q: SELinux永久修复?
A: semanage fcontext -a -t mysqld_db_t /newdir,restorecon -R /newdir。
Q: 重启后还报错?
A: 检查my.cnf语法,systemctl status mysqld查看日志。