web-dev-qa-db-ja.com

Mysqlエラー1005(HY000):テーブル 'tmp'を作成できません(errno:13)

私はubuntu9.10でMysqlを実行しています、Mysqlのプロセスはrootとして実行されています、Mysqlにログインするときにrootアカウントを使用しています、これはすべての特権を与えました、私は自分のdb(mysqlではない)を使用しています、私は作成できますテーブルには、私は一時テーブルを作成しようとすると、私はこのエラーを取得します:

エラー1005(HY000):テーブル 'tmp'を作成できません(errno:13)

このクエリの場合:

CREATE TEMPORARY TABLE tmp(id int);

ハードドライブに十分なスペースがあり、すべての権限が付与されています(var/lib/mysqlにもmysql権限があります)。

何か案が?ありがとう、コビー

15
koby

ええと.../etc/mysql/my.cnfには、使用するための「tmp」フォルダがあります。これはデフォルトで/ tmp(ルートから)です。mysql権限はありません。 chmod 0777/tmpがトリックを実行します

4
koby

私は数週間前に同じ問題を抱えていました。ファイルシステム上のデータベースフォルダは、間違ったユーザーによって所有されていました。シンプルな chown -R mysql:mysql /var/lib/mysql/database_nameトリックをしました!

ここですべてが説明されています: http://www.dinosources.eu/2010/10/mysql-cant-create-table (イタリア語ですが、かなり明確です)

乾杯

31
Marchino

/ tmpの正しい権限、正しいコンテキスト、Fedora16の十分なディスク容量で上記のエラーが発生しました。

髪の毛をはぎ取った1日後、MySQLサービスのsystemd構成の設定まで問題を追跡しました。

/etc/systemd/system/multi-user.target.wants/mysqld.service設定があるかどうかを確認しますPrivateTmp=true。この変更により、MySQLはファイルを/ tmpに直接配置する代わりに、/ tmp/systemd-namespace-XXXXXサブディレクトリを使用するように強制されます。どうやらMySQLはそれを嫌い、一時ファイルの作成を必要とするクエリに対して許可拒否エラー(13)で失敗します。

この設定は次のようにオーバーライドできます。

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

次に、次のコマンドを実行して構成をリロードします。systemctl daemon-reloadそしてMySQLを再起動します。

2
Oleg Barshay

私はこれらの(errno:13)エラーを抱えていて、/ var/log/syslogを調べた後でしかそれらを理解できなかったので、私のアドバイスは次のとおりです。

tail -f /var/log/syslog

データベースにアクセスしようとした後、それがデータベースファイルと関係があるかどうかを確認してください。私の場合は

apparmor=[DENIED]

つまり、apparmorに対処する必要がありますが、あなたの場合は別のものである可能性があります。

1
inkredibl

今日、Amazon RedHatインスタンスで同じ問題が発生しました。 (mysql Shellからの)mysqldecribeを実行することもmysqldumpを実行することもできませんでした。これを解決するために、私は最も明白な解決策を試しました:

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

しかし、これは役に立ちませんでした。 /var/log/mysqld.logで、私はまだ見ました:

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.

MySQLデーモンが/ tmpに書き込むことを許可しなかったのはSELinuxであることが判明しました。したがって、私がしたことは次のとおりでした。

# getenforce 
Enforcing

SELinuxが強制モードで実行されているかどうかを確認するには(これについて詳しくは、 ここ を参照してください)。これに対する迅速かつ迅速な解決策は、SELinuxパーミッシブモードに切り替えることでした。

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

上記は私の問題を解決しました。

強化された生産に取り組んでいる場合は、強制から許容に切り替えるときに非常に注意する必要があることに注意してください。この特定の設定は、再起動後にリセットされることにも注意してください。

1
Bartosz Firyn

config.iniで属性MaxNoOfOrderedIndexesを設定しますか?デフォルト値は128であるため、作成するテーブルがたくさんある場合、最後のテーブルは作成できません。参照: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-maxnooforderedindexes

1
songjiesdnu

私の場合:

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

私の問題を解決しました。

0
Robin LI