kin*_*nak 7 linux startup file-permissions mysql5.1
我有一个 Web 服务器,其中 mysql 的默认安装将其所有数据库文件放在/var/lib/mysql. 分区所在/var挂载只有2GB的空间,所以在运行出现空间问题后,我决定重新定位mysql的数据目录。
我天真的方法是将/var/lib/mysql目录完全复制到/web/dbs/mysql,然后更改/etc/mysql/my.cnf以使其读取
datadir = /web/dbs/mysql
Run Code Online (Sandbox Code Playgroud)
但是,重启后,我在mysql错误日志中得到以下错误,并且服务器无法启动。
130130 9:59:23 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130130 9:59:23 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130130 9:59:23 InnoDB: Initializing buffer pool, size = 8.0M
130130 9:59:23 InnoDB: Completed initialization of buffer pool
130130 9:59:23 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
Run Code Online (Sandbox Code Playgroud)
所有文件和目录都属于mysql:mysql. 为了测试,我甚至改变了访问权限/web/dbs/mysql是rwxrwxrwx现在。
是的, /web/dbs/mysql/mysql/plugin.frm确实存在。
这里可能有什么问题?我错过了什么吗?是否有更详细的输出日志可用?
更新:
更多信息:
我使用以下命令重试了所有内容:
stop mysqlrm -r /web/dbs/mysqlcp -p -r /var/lib/mysql/ /web/dbs/datadir = /web/dbs/mysql特权:
drwxr-xr-x 4 mysql mysql 34 2013-01-30 15:55 /web/dbs
drwx------ 19 mysql mysql 4096 2013-01-30 15:44 /web/dbs/mysql
drwx------ 2 mysql mysql 4096 2012-10-11 11:25 /web/dbs/mysql/mysql
-rw-rw---- 1 mysql mysql 8586 2012-08-14 19:15 /web/dbs/mysql/mysql/plugin.frm
Run Code Online (Sandbox Code Playgroud)
当我将 datadir 重置为 时datadir = /var/lib/mysql,服务器启动没有问题。
尝试了以下方法:
root:/# su - mysql
mysql:~$ /usr/sbin/mysqld --verbose
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test
mysql:~$ touch /web/dbs/mysql/s15800994.lower-test
mysql:~$ ls -l /web/dbs/mysql/s15800994.lower-test
-rw-r--r-- 1 mysql mysql 0 2013-01-30 16:01 /web/dbs/mysql/s15800994.lower-test
Run Code Online (Sandbox Code Playgroud)
所以数据目录设置正确。mysql 用户具有写入权限,但 mysql 进程无法创建文件。
可能有什么问题?
USD*_*att 12
添加我们在评论中提出的解决方案作为完整性的完整答案......
使用 su/sudo 测试表明,虽然 mysqld 抱怨权限错误,但 mysql 用户确实可以成功写入文件夹,这表明这不是文件系统权限问题。(如果遇到类似问题,这是有用的第一步)
某些 Linux 发行版(如果不是全部?)现在带有 AppArmor,它限制了允许可执行文件访问的文件/文件夹。
这种情况下的解决方案是简单地将新路径添加到/etc/apparmor.d/usr.sbin.mysqld策略文件。
| 归档时间: |
|
| 查看次数: |
13790 次 |
| 最近记录: |