ไม่สามารถเริ่มเซิร์ฟเวอร์ MySQL หากไฟล์ .ock มีการเปลี่ยนแปลงใน /etc/mysql/my.cnf


8

ฉันติดตั้ง MySQL server 5.5 บน Ubuntu 12.04 แล้ว ฉันพยายามเริ่มต้นเซิร์ฟเวอร์ MySQL บนไฟล์ถุงเท้าอื่น โดยค่าเริ่มต้น MySQL ทำงานบน /var/run/mysqld/mysqld.sock

ฉันพยายามเรียกใช้เซิร์ฟเวอร์เดียวกันใน /var/run/mysqld/mysqld1.sock

สำหรับเรื่องนี้ฉันได้ทำการเปลี่ยนแปลงต่อไปนี้:

  1. เปลี่ยนเป็น /etc/mysql/my.cnf
[ลูกค้า]
    พอร์ต = 3306
    socket = /var/run/mysqld/mysqld1.sock

[mysqld_safe]
    socket = /var/run/mysqld/mysqld1.sock
    ดี = 0

[mysqld]
    user = mysql
    pid-file = /var/run/mysqld/mysqld.pid
    ** ซ็อกเก็ต = /var/run/mysqld/mysqld1.sock**
    พอร์ต = 3306
    basedir = / usr
    datadir = / var / lib / mysql
    tmpdir = / tmp
    lc-messages-dir = / usr / share / mysql
  1. ฉันยังเพิ่มบรรทัดต่อไปนี้ใน /etc/apparmor.d/usr/sbin.mysqld

    /var/run/mysqld/mysqld1.sock w,

    /var/run/mysqld/mysqlduty1-9 เหมือน.sock w,

  2. ฉันยังเปลี่ยนความเป็นเจ้าของสำหรับไดเรกทอรี / var / run / mysqld เป็นผู้ใช้ mysql

    ls -lA / var / run / | grep mysqld

    drwxrwxrwx 2 mysql mysql 40 Dec 31 17:24 mysqld

อย่างไรก็ตามเมื่อฉันพยายามที่จะเริ่มต้นเซิร์ฟเวอร์ MySQL ฉันได้รับข้อผิดพลาดดังต่อไปนี้ (ในฐานะผู้ใช้รูท)

    $ mysqld --user = mysql --verbose
    121231 18:40:56 [หมายเหตุ] ปลั๊กอิน 'FEDERATED' ถูกปิดใช้งาน
    121231 18:40:56 InnoDB: ฮีปหน่วยความจำ InnoDB ถูกปิดใช้งาน
    121231 18:40:56 InnoDB: Mutexes และ rw_locks ใช้ GCC อะตอมในตัว
    121231 18:40:56 InnoDB: ตารางที่บีบอัดใช้ zlib 1.2.3.4
    121231 18:40:56 InnoDB: การเตรียมใช้งานบัฟเฟอร์พูลขนาด = 128.0M
    121231 18:40:56 InnoDB: การเริ่มต้นบัฟเฟอร์พูลเสร็จสมบูรณ์
    121231 18:40:56 InnoDB: รูปแบบไฟล์ที่รองรับสูงสุดคือ Barracuda
    121231 18:40:57 InnoDB: รอให้เธรดพื้นหลังเริ่มต้น
    121231 18:40:58 InnoDB: 1.1.8 เริ่ม; หมายเลขลำดับการบันทึก 1595685
    121231 18:40:58 [หมายเหตุ] ชื่อโฮสต์เซิร์ฟเวอร์ (ที่อยู่ผูก): '127.0.0.1'; พอร์ต: 3306
    121231 18:40:58 [หมายเหตุ] - '127.0.0.1' แก้ไขเป็น '127.0.0.1';
    121231 18:40:58 [หมายเหตุ] ซ็อกเก็ตเซิร์ฟเวอร์ที่สร้างบน IP: '127.0.0.1'
   ** `121231 18:40:58 [ข้อผิดพลาด] ไม่สามารถเริ่มเซิร์ฟเวอร์: ผูกกับซ็อกเก็ตยูนิกซ์: การอนุญาตถูกปฏิเสธ` **

    121231 18:40:58 [ข้อผิดพลาด] คุณมีเซิร์ฟเวอร์ mysqld อื่นที่ทำงานบนซ็อกเก็ตแล้ว 
    /var/run/mysqld/mysqld1.sock?
    121231 18:40:58 [ข้อผิดพลาด] การยกเลิก **
    121231 18:40:58 InnoDB: เริ่มปิด ...
    121231 18:40:58 InnoDB: การปิดระบบเสร็จสิ้น; หมายเลขลำดับการบันทึก 1595685
    121231 18:40:58 [หมายเหตุ] mysqld: ปิดการทำงานเสร็จสมบูรณ์

ถ้าฉันเริ่มต้นเซิร์ฟเวอร์ด้วยไฟล์ซ็อกเก็ตเริ่มต้นฉันสามารถเริ่มต้นเซิร์ฟเวอร์ได้ ฉัน googled เกี่ยวกับปัญหานี้ แต่พบวิธีแก้ปัญหาที่แนะนำให้เป็นปัญหาสิทธิ์เท่านั้น อย่างไรก็ตามการอนุญาตดูเหมือนดี บางคนแนะนำว่า AppArmor อาจเป็นสาเหตุ แต่ฉันได้ตรวจสอบแล้วเช่นกัน - มีการวางข้อมูลโค้ดด้านบน

บางคนสามารถให้เบาะแสได้บ้าง

[แก้ไข]

/var/log/syslogผมเห็นการส่งออกต่อไปนี้ใน

2 มกราคม 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [หมายเหตุ] ปลั๊กอิน 'FEDERATED' ถูกปิดใช้งาน
2 มกราคม 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: ฮีปหน่วยความจำ InnoDB ถูกปิดใช้งาน
2 มกราคม 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Mutexes และ rw_locks ใช้ GCC atomic builtins
2 มกราคม 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: ตารางที่บีบอัดใช้ zlib 1.2.3.4
2 มกราคม 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: การเตรียมใช้งานบัฟเฟอร์พูลขนาด = 128.0M
2 มกราคม 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: การเริ่มต้นของบัฟเฟอร์พูลเสร็จสมบูรณ์
2 มกราคม 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: รูปแบบไฟล์ที่รองรับสูงสุดคือ Barracuda
2 มกราคม 12:09:35 praveshp-lt mysqld: 130102 12:09:35 InnoDB: รอให้เธรดพื้นหลังเริ่มต้น
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: 1.1.8 เริ่ม; หมายเลขลำดับการบันทึก 1595685
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [หมายเหตุ] ชื่อโฮสต์เซิร์ฟเวอร์ (ผูกที่อยู่): '127.0.0.1'; พอร์ต: 3307
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [หมายเหตุ] - '127.0.0.1' เปลี่ยนเป็น '127.0.0.1';
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [หมายเหตุ] ซ็อกเก็ตเซิร์ฟเวอร์ที่สร้างบน IP: '127.0.0.1'
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ข้อผิดพลาด] ไม่สามารถเริ่มเซิร์ฟเวอร์: ผูกกับซ็อกเก็ตยูนิกซ์: ปฏิเสธการอนุญาต
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ข้อผิดพลาด] คุณมีเซิร์ฟเวอร์ mysqld ตัวอื่นที่ทำงานบนซ็อกเก็ตอยู่แล้ว: /var/run/mysqld/mysqld1.sock?
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ข้อผิดพลาด] ยกเลิก
2 มกราคม 12:09:36 praveshp-lt mysqld: 
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: เริ่มปิด ...
ม.ค. 2 12:09:36 เคอร์เนล praveshp-lt: [7060.098580] type = 1,600 audit (1357108776.036: 33): apparmor = "DENIED" การดำเนินการ = "mknod" parent = 6702 โปรไฟล์ = "/ usr / sbin / mysqld" "/run/mysqld/mysqld1.sock" pid = 7039 comm = "mysqld" ร้องขอ_mask = "c" ปฏิเสธ _mask = "c" fsuid = 116 ouid = 116
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: ปิดการทำงานแล้ว; หมายเลขลำดับการบันทึก 1595685
2 มกราคม 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [หมายเหตุ] / usr / sbin / mysqld: ปิดเครื่องเสร็จสมบูรณ์

มีข้อความระบุว่าการอนุญาตถูกปฏิเสธ แต่ดูเหมือนว่าฉันได้กำหนดสิทธิ์ที่ถูกต้องแล้ว


1. ตรวจสอบสิทธิ์และ/usr/local/mysql /tmpต้องมีอย่างน้อย 775 2. การอนุญาตสำหรับไดเรกทอรีฐานข้อมูล mysql ใน/var/lib/โฟลเดอร์ควรเป็นmysql:root ( chown mysql:root mysql)
Rinzwind

1
ฉันตรวจสอบการอนุญาตแล้วและดูเหมือนว่าใช้ได้
user117844

ตรวจสอบว่า/etc/apparmor.d/usr.sbin.mysqldมีการเปรียบเทียบระหว่างรุ่นเก่าและใหม่ที่นี่: bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/…
Rinzwind

คำตอบ:


5

โดยดูที่บรรทัดนี้ในบรรทัดต่อไปนี้ในบันทึกปรากฏว่า Apparmor ปฏิเสธการเข้าถึง

Jan  2 12:09:36 praveshp-lt kernel: [ 7060.098580] type=1400 audit(1357108776.036:33):
     apparmor="DENIED" operation="mknod" parent=6702 profile="/usr/sbin/mysqld" 
     name="/run/mysqld/mysqld1.sock" pid=7039 comm="mysqld" requested_mask="c"
     denied_mask="c" fsuid=116 ouid=116

หากต้องการอนุญาตให้เพิ่มไฟล์ที่/etc/apparmor.d/local/usr.sbin.mysqldมีรายการด้านล่างและเริ่ม MySQL ใหม่

/var/run/mysqld/mysqld1.sock w,

ขอบคุณRinzwind ที่ชี้เรื่องนี้ออกมา


ฮา! : D เอาการค้นหาเล็กน้อย)
Rinzwind

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