Eu realmente não entendo como todos esses privilégios funcionam em Linuxes.
Para iniciar o servidor MySQL, o programa mysqld tem que gravar seus arquivos .pid no diretório /var/run/mysqld/ . Mas sabemos de FHS (Filesystem Hierarchy Standard) que:
Os arquivos nesse diretório devem ser limpos (removidos ou truncados, conforme apropriado) no início do processo de inicialização.
Portanto, mysqld tem que criar o diretório /mysqld sob /var/run/ todas as vezes servidor MySQL é iniciado.
O proprietário e o grupo de /var são root e /var is:
drwxr-xr-x 13 root root 4096 may 20 23:41 var.
E também sabemos do FHS (Filesystem Hierarchy Standard) que:
/ var / run deve ser regravável para usuários sem privilégios (root ou usuários executando daemons); é um grande problema de segurança se qualquer usuário puder escrever nesse diretório.
Portanto, mysqld não pode gravar no diretório. De fato, quando eu executo mysqld para iniciar o servidor MySQL, sempre recebo um erro:
user@user-desktop:~$ sudo mysqld --console
130720 23:43:02 [ERROR] Can't start server : Bind on unix socket: Permission denied
130720 23:43:02 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
130720 23:43:02 [ERROR] Aborting
A pergunta é: como mysqld pode gravar .pid arquivos em /var/run/mysqld/ se o padrão proibir abrir este diretório para gravação? Esta é uma clara contradição, não é?
Minha pergunta é: como deixar mysqld criar e gravar seus arquivos em /var/run/mysqld/ sem alterar as permissões do diretório /var/run ? Por enquanto eu vejo a única maneira:
user@user-desktop:$ sudo chmod a+w /var
Mas é proibido pelo padrão.