Mysql。UNIXソケットでバインド:許可が拒否されました


12

次のものでmysqlを起動できません。

130408 11:31:22 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/usr/libexec/mysqld: Table 'plugin' is read only
130408 11:31:22 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130408 11:31:22  InnoDB: Initializing buffer pool, size = 8.0M
130408 11:31:22  InnoDB: Completed initialization of buffer pool
130408 11:31:23  InnoDB: Started; log sequence number 0 19514977
130408 11:31:23 [ERROR] Can't start server : Bind on unix socket: Permission denied
130408 11:31:23 [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
130408 11:31:23 [ERROR] Aborting

130408 11:31:23  InnoDB: Starting shutdown...
130408 11:31:28  InnoDB: Shutdown completed; log sequence number 0 19514977
130408 11:31:28 [Note] /usr/libexec/mysqld: Shutdown complete
130408 11:31:28 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

別のmysqlは実行されていません:

[root@triton667 etc]# ps ax | grep mysql
 9195 pts/1    S+     0:00 grep mysql

my.cnf:

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    tmpdir=/tmp
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    max_allowed_packet=256M

    [mysqld_safe]

    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

「/ tmp」および「/ var / lib / mysql」の権限は777 /

助言がありますか?

UPD1

[root@triton667 etc]# mysql_upgrade
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) trying to connect
FATAL ERROR: Upgrade failed

UPD2:plugin.MYD、plugin.MYIおよびplugin.frmは/ var / lib / mysql / mysql /に存在します。

ポート3306で実行されているものはありません。

mysql.sockは存在しません。自分で作成しようとしましたが、再起動後に削除されました。

マウント(すべてのrw):

[root@triton667 mysql]# mount
/dev/md1 on / type ext4 (rw,noatime,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/md0 on /boot type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

この問題は、サブドメインでサイトを複製しようとしたときに今日発生しました。


mysql_upgrade提案どおりに実行しますか?
NickW

いいえ。/var/lib/mysql/mysql.sockに触れてください-また動作しません
-Aldwin

/ var / lib / mysql / mysqlの下にplugin.MYD、plugin.MYI、およびplugin.frmファイルがありますか?
NickW

また、mysql.sockファイルは/ var / lib / mysqlディレクトリにありますか?
NickW

すでに3306ポートで何かが実行されていますか?
aardvark

回答:


15

1)まず、rmコマンドを使用して既存のソケットファイルを削除することを確認します。

rm /var/lib/mysql/mysql.sock

2)次のコマンドを使用して、既存のすべてのMySQLプロセスを強制終了します。

service mysql stop

3)非常に重要:/var/lib/フォルダーの下のMySQLデータベースディレクトリの権限がmysql:rootであることを確認してください

chown -R mysql:root /var/lib/mysql

4)上記の情報を使用すると、MySQLを正常に起動でき、データベースディレクトリの下にソケットファイルが正常に作成されます。

service mysql start

私はUbuntuサーバーを使用していますが、これはうまくいきませんでした。
ビトーマズコ

6

@Abhishekの回答とmysqldの出力(/var/run/mysqld/mysqld.sockは使用できません)のおかげで、1つのコマンドでこれを解決できました。

chown -R mysql:root /var/run/mysqld

その後、適切に起動します。

root@***:~# service mysql start
df: Warning: cannot read table of mounted file systems: No such file or directory
[ ok ] Starting MySQL database server: mysqld ..
[info] Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly..

1
未来からの歓迎:)
ダニエルKmak

3

問題は、MySQLデーモンがパスにソケットファイルを書き込むことを妨げるあらゆる条件によって発生する可能性があります/var/lib/mysql。読み取り専用ファイルシステムや誤ったディレクトリ所有権などの他の回答は、MySQLがソケットに書き込むことができないさまざまな理由に対処します。

別の考えられる理由は、/var/lib/mysqlSELinuxコンテキストが正しくない可能性があることです。MySQLデーモンを起動しようとした後、最近のSELinux AVC拒否をチェックすることで、この状態を診断できます。

ausearch -m avc --start recent

SELinuxがソケットファイルを作成するアクセスを拒否している場合、次のようなエラーメッセージが表示されます。

time->Thu Feb  2 03:46:27 2017
type=SYSCALL msg=audit(1566106187.784:152): arch=c000004e syscall=49 success=no exit=-13 a0=4f a1=7ff3fd652e80 a2=6e a3=7fcd2d6523d40 items=0 ppid=1 pid=1820 auid=4294967295 uid=996 gid=994 euid=996 suid=996 fsuid=996 egid=994 sgid=994 fsgid=994 tty=(none) ses=4294967295 comm="mysqld" exe="/usr/sbin/mysqld" subj=system_u:system_r:mysqld_t:s0 key=(null)
type=AVC msg=audit(1566106187.784:152): avc:  denied  { create } for  pid=1820 comm="mysqld" name="mysql.sock" scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:var_log_t:s0 tclass=sock_file

SELinuxの拒否を解決するには、ディレクトリのデフォルトのコンテキストを復元してみてください(ディストリビューションはmysqld_db_tMySQLまたはMariaDBをインストールしたときの正しいコンテキストを設定する必要があります)。

restorecon -R -v -f /var/lib/mysql

システムのコンテキストをカスタマイズしている場合、問題の修正はこの投稿の範囲外です。


SELinuxを備えたCentOS 7では、これが私が直面していた問題であり、コンテキストを復元すると修正されました。
ケンJ

1

記述内容に基づいて、ファイルシステムが読み取り専用でマウントされているかどうかを確認することをお勧めします。

130408 11:31:22 mysqld_safe / var / lib / mysql / usr / libexec / mysqldのデータベースを使用してmysqldデーモンを開始する:テーブル 'plugin'は読み取り専用


0

問題を解決するために、他のすべての回答を試しました。selinuxをpermissiveに設定すると、次のように表示されます。setenforce 0、サーバーを起動できたようです。

次に、sockディレクトリ/var/lib/mysqlを修正して、ディレクトリにselinuxのアクセス許可を付与しました。

semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
restorecon -R -v -f /var/lib/mysql

完了したらsetenforce 1、mysqlサービスを開始してselinuxを有効にしましたが、すべてうまくいきました。

これが他の人に役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.