mysql ผูกบนซ็อกเก็ตยูนิกซ์: การอนุญาตถูกปฏิเสธ


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 ไม่มีอยู่จริง ฉันพยายามสร้างมันเอง แต่หลังจากรีสตาร์ทมันก็ถูกลบ

เมานท์ (all 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

มีไฟล์ plugin.MYD, plugin.MYI และ plugin.frm ภายใต้ / var / lib / mysql / mysql หรือไม่?
NickW

นอกจากนี้ไฟล์ mysql.sock ยังมีอยู่ในไดเรกทอรี / var / lib / mysql หรือไม่
NickW

มีบางสิ่งที่ทำงานอยู่บนพอร์ต 3306 หรือไม่
aardvark

คำตอบ:


15

1) อันดับแรกตรวจสอบให้แน่ใจว่าคุณลบไฟล์ซ็อกเก็ตที่มีอยู่โดยใช้คำสั่ง rm

rm /var/lib/mysql/mysql.sock

2) ฆ่ากระบวนการ MySQL ที่มีอยู่ทั้งหมดด้วยคำสั่งต่อไปนี้

service mysql stop

3) สำคัญมาก: ตรวจสอบให้แน่ใจว่าการอนุญาตสำหรับไดเรกทอรีฐานข้อมูล MySQL ภายใต้/var/lib/โฟลเดอร์ควรเป็น mysql: root

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

4) จากข้อมูลข้างต้นคุณควรจะสามารถเริ่ม MySQL ได้สำเร็จและไฟล์ซ็อกเก็ตควรถูกสร้างขึ้นภายใต้ไดเรกทอรีฐานข้อมูล

service mysql start

ฉันใช้เซิร์ฟเวอร์ Ubuntu และนี่ไม่ได้ผล
Vitor Mazuco

6

ขอบคุณที่คำตอบของ @ Abhishek รวมกับเอาต์พุต mysqld (ไม่สามารถใช้ /var/run/mysqld/mysqld.sock) ฉันจัดการเพื่อแก้ปัญหานี้ด้วยคำสั่งเดียว:

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
การต้อนรับของคุณจากอนาคต :)
Daniel Kmak

3

ปัญหาของคุณอาจเกิดจากเงื่อนไขใด ๆ ที่ป้องกันไม่ให้ภูต MySQL /var/lib/mysqlจากการเขียนไฟล์ซ็อกเก็ตไปยังเส้นทาง คำตอบอื่น ๆ เช่นระบบไฟล์แบบอ่านอย่างเดียวหรือเป็นเจ้าของไดเรกทอรีที่ไม่ถูกต้องระบุสาเหตุต่างๆที่ MySQL อาจไม่สามารถเขียนไปยังซ็อกเก็ต

อีกสาเหตุที่เป็นไปได้คือ/var/lib/mysqlอาจมีบริบท SELinux ไม่ถูกต้อง คุณสามารถวินิจฉัยเงื่อนไขนี้ได้โดยตรวจสอบการปฏิเสธ SELinux AVC ล่าสุดหลังจากพยายามเริ่ม MySQL daemon:

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_tเมื่อคุณติดตั้ง MySQL หรือ MariaDB):

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

หากคุณได้กำหนดบริบทในระบบของคุณเองการแก้ไขปัญหาอยู่นอกเหนือขอบเขตของโพสต์นี้


บน CentOS 7 ด้วย SELinux นี่คือสิ่งที่ฉันกำลังเผชิญและกู้คืนบริบทที่แก้ไข
เคน J

1

จากสิ่งที่คุณเขียนฉันขอแนะนำให้คุณตรวจสอบว่าระบบไฟล์ของคุณติดตั้งเป็นแบบอ่านอย่างเดียว

130408 ​​11:31:22 mysqld_safe เริ่มต้น mysqld daemon กับฐานข้อมูลจาก / var / lib / mysql / usr / libexec / mysqld: ตาราง 'plugin' อ่านอย่างเดียว


0

ฉันลองคำตอบอื่น ๆ ทั้งหมดเพื่อแก้ไขปัญหา ปรากฏว่าเมื่อฉันตั้งค่า selinux เป็นอนุญาต: setenforce 0ฉันสามารถเริ่มเซิร์ฟเวอร์

ฉันแล้วแก้ไขไดเรกทอรีถุงเท้า/var/lib/mysqlให้สิทธิ์ selinux ไปยังไดเรกทอรี:

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

เมื่อเสร็จแล้วฉันเปิดใช้งาน selinux โดยใช้setenforce 1บริการ mysql และทุกอย่างก็ดี

หวังว่านี่จะช่วยผู้อื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.