ไม่สามารถสร้างไฟล์ /var/lib/mysql/user.lower-test


12

ฐานข้อมูล MySQL มีปัญหาฟรีสองสามเดือน วันนี้เมื่อฉันตรวจสอบแพ็กเกจที่สามารถอัพเกรดได้โดยใช้ Synaptic Package Manager มันมาพร้อมกับส่วนประกอบ MySQL ต่างๆ (-common, -client, -server, etc) ฉันจึงตัดสินใจอัพเกรด (ฉันลืมที่จะทราบรุ่นที่ติดตั้ง แต่คิดว่ามันเป็น 5.6.21) เป็น 5.6.25-1-ubuntu2.0 หลังจากนั้นเมื่อฉันไปสอบถามฐานข้อมูลที่ฉันได้รับข้อความ: -

Error occured: Can't connect to MySQL server on '127.0.0.1' (111)

ฉันพบว่าเซิร์ฟเวอร์ไม่ทำงาน ในล็อกไฟล์ฉันชอบข้อความ: -

Can't create file /var/lib/mysql/user.lower-test

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

คำตอบ:


6

ปัญหานี้ดูเหมือนว่าจะได้รับอนุญาตปัญหาหรือเปลี่ยนข้อมูล mysql ไปยังตำแหน่งอื่นแล้ว / var / lib / mysql

ลองวิ่งด้วย sudo

ดูเหมือนว่า / var / lib / mysql เป็นของผู้ใช้ mysql และกลุ่มถูกตั้งค่าเป็น mysql เช่นกัน

$ sudo chown -R mysql /var/lib/mysql
$ sudo chgrp -R mysql /var/lib/mysql
$ sudo chmod 755 /var/lib/mysql

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

[mysqld]
datadir=/var/lib/mysql

จากนั้นคุณสามารถเลือกระหว่างการกำหนดค่า apparmor เพื่อให้ MySQL อ่าน \ execute \ แก้ไขไดเรกทอรีข้อมูลใหม่และไดเรกทอรีย่อยหรือภายใต้ความเสี่ยงของคุณเองคุณสามารถลบ apparmor ได้ คุณอาจต้องรูทเพื่อทำสิ่งต่อไปนี้:

/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot

ฉันผ่านทุกสิ่งนี้ไป แต่ก็ไม่มีประโยชน์ มีการสำรองข้อมูลฉันตัดสินใจที่จะติดตั้งใหม่และทุกอย่างทำงานแถบปัญหาฉันมีปัญหา แต่เป็นปัญหาของลินุกซ์หรือมันคือ MySQL ...
Michaeljohn

@MichaelJohn พูดอะไรไม่ออก มันอาจจะเป็น AppArmor หรือความเสียหายแพคเกจ MySQL
Hitesh Mundra

บน Ubuntu Xenial: ติดตั้งโดยอัตโนมัติและเปิดใช้งานเมื่อคุณติดตั้งapparmor mysql-server-5.6แม้ว่าคุณจะปิดการใช้งานก่อนหน้านี้ คุณไม่สามารถลบแพคเกจเพราะมันเป็นขึ้นของapparmor mysql-server-5.6คุณสามารถแก้ไขข้อผิดพลาด "ไม่สามารถสร้างไฟล์ /var/lib/mysql/user.lower-test" โดยทำservice apparmor stop; service apparmor teardown; update-rc.d -f apparmor remove
Jeroen Vermeulen - MageHost

6

ฉันพบปัญหานี้เมื่อพยายามเรียกใช้ MySQL หลายอินสแตนซ์ แต่แทนที่จะลบ apparmor ฉันได้อัปเดตไฟล์ usr.sbin.mysqld:

vim /etc/apparmor.d/usr.sbin.mysqld

ตัวอย่างเช่นนี่คือลักษณะของไฟล์ของฉันและเมื่อฉันเพิ่มโฟลเดอร์ที่จำเป็นต้องมีสิทธิ์ในการเขียนทั้งหมดจะทำงานตามที่ควรจะเป็น

/usr/sbin/mysqld {

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/lib/mysql1/ r,
  /var/lib/mysql1/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /var/run/mysqld/mysqld1.pid rw,
  /var/run/mysqld/mysqld1.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,

}

1
มันก็ใช้ได้กับฉันเช่นกัน ฉันต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อให้ใช้งานได้ - เพียงแค่หยุดและรีสตาร์ท AppArmour ไม่ทำงาน
MikeHoss

3

ปัญหาเกิดขึ้นกับฉันเมื่อฉันพยายามย้าย / var / lib / mysql ไปยังดิสก์อื่นและแทนที่ไดเรกทอรีเดิมด้วย symlink

Apparmor จะปฏิเสธการเข้าถึงในการกำหนดค่านี้ดู

เหตุใดจึงถือว่าไม่เป็นข้อผิดพลาดโดยผู้พัฒนา Apparmor การหลีกเลี่ยงคือการใช้การผูกติด ดู

สำหรับคำอธิบาย

ดังนั้น

mount --bind /newmysqldatadir /var/lib/mysql
service mysql start

แก้ไขปัญหาให้ฉัน


1

ฉันมีปัญหาที่คล้ายกัน ฉันติดตั้งเซิร์ฟเวอร์ Ubuntu ใหม่บนเครื่องของฉันทำการสำรองข้อมูลเต็มรูปแบบของ / etc / บนฮาร์ดไดรฟ์หลังจากติดตั้งใหม่ฉันได้ทำสำเนาไฟล์สำคัญทั้งหมดจาก / drive / etc / ไปยังระบบ / etc ของฉัน

ขณะทำสิ่งนี้ฉันสร้าง bak สำหรับไฟล์ usr.sbin.mysqld ชื่อ usr.sbin.mysqld.bak และเก็บไว้ในไดเรกทอรี /etc/apparmor.d/ เดียวกัน

เมื่อทำการค้นหาเพิ่มเติมฉันพบบล็อกโพสต์นี้: https://blogs.oracle.com/jsmyth/apparmor-and-mysql

ติดตั้ง apparmor-utils และพยายามที่จะ aa-บ่นบน / usr / sbin / mysqld และมันบอกว่าฉันมี 2 apparmor configs กำหนดไว้ (ทั้งไฟล์ของฉัน)

ฉันรู้ว่าอาจไม่ใช่ปัญหาที่คุณเผชิญ แต่เพียงเพื่อความชัดเจนไม่ต้องโง่เหมือนฉันสร้างไฟล์สำรองข้อมูลในไดเรกทอรีเดียวกันของไดเรกทอรี sarm apparmor


0

ตรวจสอบว่าพาร์ติชันของคุณไม่เต็มซึ่งเป็นกรณีของฉัน

ด้วยเหตุผลที่ไม่รู้จักการย้ายข้อมูลไปยังพาร์ติชันอื่นไม่ทำงานเช่นกัน

ดังนั้นสำหรับการแก้ไขอย่างรวดเร็วแทนที่จะยุ่งกับ llvm หรือ gparted ฉันลด/swapfileขนาดลง

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