データベースの作成で問題が発生し、次のエラーが発生します。
mysql> show grants for 'admin'@'%';
+---------------------------------------------------------------------------------------------------------------------------------+
| Grants for admin@% |
+---------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> create database abc;
ERROR 1006 (HY000): Can't create database 'abc' (errno: 13)
これが私のユーザーテーブルです。
mysql> select Host, user from mysql.user;
+-------------+-------+
| Host | user |
+-------------+-------+
| % | admin |
| 127.0.0.1 | root |
| ::1 | root |
| IVM-MMC-DGW | root |
| localhost | admin |
| localhost | root |
+-------------+-------+
6 rows in set (0.00 sec)
mysql> show grants;
+-----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for admin@localhost |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' WITH GRANT OPTION |
+-----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
既存のデータベースでテーブルを作成および削除できます。
データディレクトリにはすでにmysql:mysql特権があり、ログインしているユーザーには新しいデータベースを作成する特権もあります。
ここで不足している構成は何ですか?
MySQLデータディレクトリに権限の問題がある可能性があります。次のように権限を設定してみてください(データディレクトリへのパスを調整します)
chown -R mysql:mysql /usr/local/mysql/data
これはおそらく、MySQLによって許可が拒否されたために発生します。 datadir=/drbd0/mysql/data
、ただしデフォルトではMySql set socket = /var/lib/mysql/mysql.sock
なので、そのディレクトリに対する権限が必要です。
less /etc/group
その後
less /etc/passwd
mysqlユーザーとグループ名を検索します。デフォルトでは、mysqlグループのmysqlユーザーです。
mysqlディレクトリに変更します。おそらく/var/lib/mysql
を入力してからcd ..
1つのディレクトリに移動します。
chown -R mysql:mysql ./mysql/
置換mysql:mysql
グループとユーザーの特権が異なると呼ばれる場合、何か異なるもの
スペースに問題がある可能性があります。これに従ってください
ログに「[エラー]サーバーを起動できません:PIDファイルを作成できません:デバイスに空き容量がありません」のようなメッセージが表示された場合
Df -hk/varによる/ varサイズの確認
使用率が100%の場合、ファイルがいっぱいになるのを見つける必要があります。
find/var/-type f -size + 100000k -exec ls -lh {} \; | awk '{print $ 9 ":" $ 5}'
削除できるファイルを確認してから、mysqlプロセスを再起動します
それがうまくいったかどうか教えてください:)
Mac OSの場合、このコマンドを使用します
Sudo chown -R mysql:mysql /usr/local/mysql*
ユーザーmysql
には、mysqlデータディレクトリへの書き込みアクセスが必要です。
Sudo chown -R mysql:mysql/var/lib/mysql /
WAMPとiを実行すると同じ問題が発生し、従来のすべてのサービスの停止と開始を選択しました。その後、データベースを作成することができました。スペースや権限に問題がなかったため、最初にデータベースを作成できなかった理由が本当にわかりません。まあ、これがWAMPユーザーの助けになることを願っています
同じ問題、私の場合、my.cfのデフォルトディレクトリを変更しましたが、selinuxがそれをブロックしています。
テストするには:
setenforce 0
(CentOS)を修正するには
コンテキストを追加して永続的にする
semanage fcontext -a -s system_u -t mysqld_db_t "/var/data/mysql(/.*)?" restorecon -Rv /var/data/mysql
ソース: https://naveensnayak.wordpress.com/2016/01/14/changing-mysql-data-directory-centos-7/
特にCentOSを使用している場合は、SELinuxをオフにしてください。
SELinuxをオフまたは無効にする を確認します。
mysqlフォルダーを移動してmysqlを再起動すると、動作します
/etc/mysql/my.cnfで、datadir =/home/mysql_dataを設定します。これは、データベースファイルが実際にマシン上にある場所です。
Mysqlデータディレクトリの権限を確認してください。
データディレクトリはデフォルトで「/etc/my.conf」に設定されています。
またはmysqladmin -uroot -p variables | grep datadir
でディレクトリを見つけます。
そうかも知れない /var/lib/mysql/
はデフォルトで、所有者のユーザーとグループがmysqlであることを確認します。 chown -R mysql:mysql /usr/local/mysql/data
手順1で解決されていない場合は、SELinux
が原因である可能性があります。 オフにする を試してください。
selinuxenabled && echo enabled || echo disabled
echo 0 > /selinux/enforce
SELINUX=disabled
、再起動します。OSによっては、SELinux
の設定ディレクトリが異なる場合があります。
私の場合、これはMySQLデータディレクトリの所有者の問題でした。しかし、私のサーバーでのセットアップは非常に一般的ではなく、異なるディレクトリを使用しているため、より詳細なソリューションを以下に示します。
grep 'datadir' $(find /etc -iname my.cnf 2>/dev/null) | awk '{print $3}'
MySQL構成が正しい場所にある場合、例えば_/var/lib/mysql
_
結果が返されない場合は、次を使用してファイルシステム全体を検索してください。
grep 'datadir' $(find / -iname my.cnf 2>/dev/null) | awk '{print $3}'
(これには時間がかかる場合があります)
壊す:
_find /etc -iname my.cnf 2>/dev/null
_は、エラーを無視して_/etc
_でmy.cnfという名前のファイルを見つけます
_grep 'datadir' /etc/mysql/my.cnf
_は、前のステップで見つかったファイルでdatadirを見つけます
_awk '{print $3}'
_は、標準入力から3番目の列を出力します
_Sudo chown -R mysql:mysql MYSQLDIR
_ MYSQLDIR
をステップ1で返されたディレクトリへのパスに置き換えます