Pergunta

Estou Executando o Mysql no ubuntu 9.10, o processo de Mysql está sendo executado como root, estou usando a conta de root, quando o registro em log do Mysql, que me deu todos os privilégios, eu estou usando o meu próprio banco de dados(mysql não), eu posso criar uma tabela, mas quando eu tento criar a tabela Temporária recebo este erro:

ERRO 1005 (HY000):Não pode criar tabela 'tmp' (errno:13)

Para esta consulta:

CRIAR a TABELA TEMPORÁRIA tmp (id int);

Eu tenho muito espaço no meu disco rígido, todas as permissões são concedidas(também var/lib/mysql tem permissões do mysql).

Alguma idéia?Obrigado, Koby

Foi útil?

Solução 2

Bem ... in /etc/mysql/my.cnf Há a pasta "tmp" para uso que é /tmp (de root) como padrão .. e não possui privilégios MySQL. chmod 0777 /tmp fará o truque

Outras dicas

Eu tive o mesmo problema há algumas semanas. A pasta do banco de dados no sistema de arquivos era de propriedade do usuário errado. Um simples chown -R mysql:mysql /var/lib/mysql/database_name fez o truque!

Tudo é explicado aqui: http://www.dinosources.eu/2010/10/mysql-cant-create-table (é italiano, mas é bem claro)

Felicidades

Eu tive o erro acima com permissões corretas em /tmp, contexto correto e espaço de disco suficiente no Fedora 16.

Depois de um dia arrancando meu cabelo, rastreei o problema até uma configuração na configuração do Systemd para o serviço MySQL.

Dentro /etc/systemd/system/multi-user.target.wants/mysqld.service Verifique se há uma configuração PrivateTmp=true. Essa alteração força o MySQL a usar o subdiretório A /TMP /Systemd-Namespace-XXXXX em vez de colocar arquivos diretamente em /tmp. Aparentemente, o MySQL não gosta disso e falha com um erro negado de permissão (13) para qualquer consulta que exigisse a criação de um arquivo temp.

Você pode substituir esta configuração da seguinte maneira:

cat >> /etc/systemd/system/mysqld.service << END_CONFIG
.include /lib/systemd/system/mysqld.service
[Service]
PrivateTmp=false
END_CONFIG

Em seguida, recarregue a configuração em execução: systemctl daemon-reload e reinicie o mysql.

Você define o atributo maxnooforderedIndexes em sua configuração? O valor padrão é 128; portanto, se você tiver muitas tabelas para criar, as últimas não poderão ser criadas. Vejo:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-maxnooforderdexes

Eu tive o mesmo problema hoje na minha instância do Amazon Red Hat. Não consegui realizar o MySQL Dimbrine (do MySQL Shell) nem executar o MySqldump. Para resolver isso, tentei a solução mais óbvia:

# chown root:root /tmp -v
# chmod 1777 /tmp -v
# /etc/init.d/mysqld restart

Mas isso não ajudou. No /var/log/mysqld.log eu ainda vi:

141022 10:23:35  InnoDB: Error: unable to create temporary file; errno: 13
141022 10:23:35 [ERROR] Plugin 'InnoDB' init function returned error.
141022 10:23:35 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

Foi divulgado que foi o Selinux que não permitiu que o MySQL Daemon escrevesse para /TMP. Portanto, o que eu fiz foi:

# getenforce 
Enforcing

Para verificar se o Selinux está em execução no modo de aplicação (você pode ler mais sobre isso aqui). A solução rápida e rápida para isso foi mudar para o Modo Permissivo de Selinux:

# setenforce 0
# getenforce 
Permissive
# /etc/init.d/mysqld restart

O acima resolveu meu problema.

Observe que, se você estiver trabalhando na produção endurecida, terá muito cuidado ao mudar de aplicação para permissivo. Observe também que esta configuração específica será redefinida após a reinicialização.

Eu estava tendo esses erros (errno: 13) e só os descobri depois de procurar/var/log/syslog, então meu conselho é o seguinte:

tail -f /var/log/syslog

Veja se isso tem algo a ver com arquivos de banco de dados depois de tentar acessar o banco de dados, no meu caso foi

apparmor=[DENIED]

O que significa que você precisa lidar com o Appmor, mas, no seu caso, pode ser outra coisa.

Com o meu caso:

    # semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
    # restorecon -Rv /datadir
    #chcon -R -t mysqld_db_t /datadir

resolveu meu problema.

Se instalado o PhpMyAdmin com o XAMPP no Linux, o usuário pode ser definida neste caminho:

sudo chown -R mysql:mysql /opt/lampp/var/mysql/my_database

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top