Link simbólico para o banco de dados mysql

4

Eu tive que fazer um link simbólico em um dos bancos de dados para outro local no MySQL (Debian 6.0). Então, /var/lib/mysql/dbname aponta para /home/user/dbname , mas o MySQL fornece

Erro no MySQL: 1017 (não é possível encontrar o arquivo: './dbname/tbl201206.frm' (errno: 13))

Eu li alguns manuais sobre como criar links simbólicos em diretórios de dados ou arquivos de tabelas, mas o mysqld também pode ler este tipo de links?

    
por John 02.07.2012 / 11:01

2 respostas

4

O código de erro (errno: 13) significa permissão negada. Verifique se o usuário mysql tem permissão para ler e escrever /home/user/dbname e todos os arquivos abaixo dele.

Você pode fazer isso com sudo su mysql e, em seguida, algum comando que acessa o arquivo, como file /home/user/dbname/tbl201206.frm .

Para corrigir isso, você provavelmente deseja fazer chown -R mysql:mysql /home/user/dbname . Você também pode precisar de chmod +x /home/user .

    
por 02.07.2012 / 11:09
3

Se você estiver executando o Ubuntu (e possivelmente outras versões recentes do Linux), pode acontecer que o MySQL tenha acesso negado ao local do seu arquivo, mesmo que as permissões do arquivo estejam corretas. Isso é causado pelo AppArmor , um módulo de segurança do Linux que implementa controles de acesso obrigatórios baseados em nome. Para verificar se você está executando o AppArmor, tente o comando:

$ sudo apparmor_status

Se isso funcionar e incluir o mysqld, você provavelmente precisará alterar sua configuração. Isso foi descrito em um post útil por andol em AskUbuntu , mas isso resolveu o problema para mim apenas à primeira vista (eu reproduzo o post de andol abaixo por conveniência, e no caso da outra página mudar).

Após mover o arquivo de banco de dados e colocar um link simbólico, o arquivo não cresceu mais e o arquivo principal do InnoDB foi gravado (embora eu use innodb_file_per_table para ter arquivos DB individuais). Presumo agora que as mudanças sugeridas no post por andol (e muitos outros lugares na web) não são de fato suficientes. Eu finalmente mudei todo o meu diretório de dados do MySQL e editei o arquivo do AppArmor /etc/apparmor.d/tunables/alias (e nenhum outro arquivo) para fazer a mudança (a documentação está no arquivo). Isso funcionou corretamente no Ubuntu 12.4 (preciso).

Aqui está o que andol escreveu - como eu disse acima, isso não funcionou para mim.

Vamos supor que seu novo datadir seja / home / data / mysql .

Se você abrir o arquivo /etc/apparmor.d/usr.sbin.mysqld , você encontrará, entre as regras, essas duas linhas.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

Assumindo nosso exemplo acima, eles terão que ser substituídos ou (provavelmente preferíveis) complementados por essas duas linhas.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

Antes de podermos iniciar nosso servidor MySQL, com seu novo datadir, também teremos que recarregar explicitamente nosso novo perfil apparmor.

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
por 03.06.2013 / 18:39