ฉันติดตั้ง MySQL server 5.5 บน Ubuntu 12.04 แล้ว ฉันพยายามเริ่มต้นเซิร์ฟเวอร์ MySQL บนไฟล์ถุงเท้าอื่น โดยค่าเริ่มต้น MySQL ทำงานบน /var/run/mysqld/mysqld.sock
ฉันพยายามเรียกใช้เซิร์ฟเวอร์เดียวกันใน /var/run/mysqld/mysqld1.sock
สำหรับเรื่องนี้ฉันได้ทำการเปลี่ยนแปลงต่อไปนี้:
- เปลี่ยนเป็น /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
ฉันยังเพิ่มบรรทัดต่อไปนี้ใน /etc/apparmor.d/usr/sbin.mysqld
/var/run/mysqld/mysqld1.sock w,
/var/run/mysqld/mysqlduty1-9 เหมือน.sock w,
ฉันยังเปลี่ยนความเป็นเจ้าของสำหรับไดเรกทอรี / 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: ปิดเครื่องเสร็จสมบูรณ์
มีข้อความระบุว่าการอนุญาตถูกปฏิเสธ แต่ดูเหมือนว่าฉันได้กำหนดสิทธิ์ที่ถูกต้องแล้ว
/etc/apparmor.d/usr.sbin.mysqld
มีการเปรียบเทียบระหว่างรุ่นเก่าและใหม่ที่นี่: bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/…
/usr/local/mysql
/tmp
ต้องมีอย่างน้อย 775 2. การอนุญาตสำหรับไดเรกทอรีฐานข้อมูล mysql ใน/var/lib/
โฟลเดอร์ควรเป็นmysql:root
(chown mysql:root mysql
)