Não é possível iniciar o servidor MySQL se o arquivo .sock for alterado em /etc/mysql/my.cnf

8

Eu instalei o servidor MySQL 5.5 no Ubuntu 12.04. Estou tentando iniciar o servidor MySQL em um arquivo de meia diferente. Por padrão, o MySQL roda em /var/run/mysqld/mysqld.sock.

Estou tentando executar o mesmo servidor em /var/run/mysqld/mysqld1.sock.

Para isso, fiz as seguintes alterações:

  1. Alterações para /etc/mysql/my.cnf
[cliente]
    port = 3306
    socket = /var/run/mysqld/mysqld1.sock

[mysqld_safe]
    socket = /var/run/mysqld/mysqld1.sock
    nice = 0

[mysqld]
    usuário = mysql
    pid-file = /var/run/mysqld/mysqld.pid
    ** socket = /var/run/mysqld/mysqld1.sock**
    port = 3306
    basedir = / usr
    datadir = / var / lib / mysql
    tmpdir = / tmp
    lc-messages-dir = / usr / share / mysql
  1. Também adicionei a seguinte linha ao /etc/apparmor.d/usr/sbin.mysqld

    /var/run/mysqld/mysqld1.sock w,

    /var/run/mysqld/mysqld[1-9,95.sock w,

  2. Também mudei a propriedade do diretório / var / run / mysqld para usuário mysql.

    ls -lA / var / run / | grep mysqld

    drwxrwxrwx 2 mysql mysql 40 dez 31 17:24 mysqld

No entanto, quando tento iniciar o servidor MySQL, recebo o seguinte erro (como usuário root)

    $ mysqld --user = mysql --verbose
    121231 18:40:56 [Nota] O plug-in 'FEDERATED' está desativado.
    121231 18:40:56 InnoDB: o heap de memória InnoDB está desativado
    121231 18:40:56 InnoDB: Mutexes e rw_locks usam built-in atômicos do GCC
    121231 18:40:56 InnoDB: As tabelas compactadas usam o zlib 1.2.3.4
    121231 18:40:56 InnoDB: inicializando o buffer pool, tamanho = 128.0M
    121231 18:40:56 InnoDB: inicialização concluída do buffer pool
    121231 18:40:56 InnoDB: o formato de arquivo mais alto suportado é o Barracuda.
    121231 18:40:57 InnoDB: aguardando o início dos encadeamentos em segundo plano
    121231 18:40:58 InnoDB: 1.1.8 iniciado; número de sequência do log 1595685
    121231 18:40:58 [Nota] Nome do host do servidor (endereço de ligação): '127.0.0.1'; porto: 3306
    121231 18:40:58 [Nota] - '127.0.0.1' resolve para '127.0.0.1';
    121231 18:40:58 [Nota] Soquete do servidor criado no IP: '127.0.0.1'.
   ** `121231 18:40:58 [ERRO] Não é possível iniciar o servidor: vincular no soquete unix: permissão negada` **

    121231 18:40:58 [ERRO] Você já tem outro servidor mysqld em execução no soquete: 
    /var/run/mysqld/mysqld1.sock?
    121231 18:40:58 [ERRO] Interrompendo **
    121231 18:40:58 InnoDB: Iniciando o desligamento ...
    121231 18:40:58 InnoDB: Encerramento concluído; número de sequência do log 1595685
    121231 18:40:58 [Nota] mysqld: Encerramento completo

Se eu iniciar o servidor com o arquivo de soquete padrão, posso iniciar o servidor. Eu pesquisei no Google sobre esse problema, mas só encontrei soluções sugerindo que seja um problema de permissão. No entanto, as permissões parecem boas. Alguns sugeriram que o AppArmor pode ser uma causa, mas também verifiquei - o snippet está colado acima.

Alguém pode fornecer algumas pistas?

[EDITAR]

Eu vejo a seguinte saída em /var/log/syslog.

2 de janeiro 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [Nota] O plug-in 'FEDERATED' está desativado.
2 de janeiro 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: O heap de memória do InnoDB está desativado
2 de janeiro 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Mutexes e rw_locks usam built-in atômicos do GCC
2 de janeiro 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: As tabelas compactadas usam o zlib 1.2.3.4
2 de janeiro 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Inicializando buffer pool, tamanho = 128.0M
2 de janeiro 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Inicialização concluída do buffer pool
2 de janeiro 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: o formato de arquivo mais alto suportado é o Barracuda.
2 de janeiro 12:09:35 praveshp-lt mysqld: 130102 12:09:35 InnoDB: Aguardando o início dos threads em segundo plano
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: 1.1.8 iniciado; número de sequência do log 1595685
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] Nome do host do servidor (endereço de ligação): '127.0.0.1'; porto: 3307
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] - '127.0.0.1' resolve para '127.0.0.1';
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] Soquete do servidor criado no IP: '127.0.0.1'.
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERRO] Não é possível iniciar o servidor: vincular no soquete unix: permissão negada
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERRO] Você já tem outro servidor mysqld em execução no soquete: /var/run/mysqld/mysqld1.sock?
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERRO] Interrompendo
2 de janeiro às 12:09:36 praveshp-lt mysqld: 
Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: Iniciando o desligamento ...
2 de janeiro 12:09:36 kernel praveshp-lt: [7060.098580] type = 1400 audit (1357108776.036: 33): apparmor = "DENIED" operation = "mknod" parent = 6702 profile = "/ usr / sbin / mysqld" name = "/run/mysqld/mysqld1.sock" pid = 7039 comm = "mysqld" request_mask = "c" denied_mask = "c" fsuid = 116 ouid = 116
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: Encerramento concluído; número de sequência do log 1595685
2 de janeiro 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] / usr / sbin / mysqld: Encerramento completo

Diz permissão negada, no entanto, parece que eu defini as permissões corretas.

user117844
fonte
1. Verifique as permissões em /usr/local/mysqle /tmp. A necessidade de ser 775 no mínimo. 2. A permissão para o diretório do banco de dados mysql na /var/lib/pasta deve ser mysql:root ( chown mysql:root mysql)
Rinzwind 31/12/12
1
Eu verifiquei as permissões e elas parecem estar bem.
precisa saber é o seguinte
verifique também /etc/apparmor.d/usr.sbin.mysqldExiste uma comparação entre a versão antiga e a nova aqui: bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/…
Rinzwind

Respostas:

5

Observando esta linha na linha a seguir no log, parece que o Apparmor está negando acesso.

Jan  2 12:09:36 praveshp-lt kernel: [ 7060.098580] type=1400 audit(1357108776.036:33):
     apparmor="DENIED" operation="mknod" parent=6702 profile="/usr/sbin/mysqld" 
     name="/run/mysqld/mysqld1.sock" pid=7039 comm="mysqld" requested_mask="c"
     denied_mask="c" fsuid=116 ouid=116

Para permitir isso, adicione um arquivo /etc/apparmor.d/local/usr.sbin.mysqldcom a entrada abaixo e reinicie o MySQL.

/var/run/mysqld/mysqld1.sock w,

Obrigado a Rinzwind por apontar isso.

user117844
fonte
Ha! : D Tomou um pouco de pesquisa;)
Rinzwind
Melhorei sua resposta para usar o diretório de alterações locais do Apparmor. Ao evitar o gerenciamento de pacotes, é menos provável que ocorra mais tarde ao fazer atualizações e coisas do tipo.
precisa saber é o seguinte