Tidak dapat membuat file /var/lib/mysql/user.lower-test

11

Basis data MySQL telah bebas masalah selama beberapa bulan. Hari ini ketika saya memeriksa paket yang dapat diupgrade menggunakan Synaptic Package Manager, muncul berbagai komponen MySQL (-common, -client, -server, dll). Karena itu saya memutuskan untuk memutakhirkan (saya lupa untuk mencatat versi yang diinstal tetapi saya pikir itu 5.6.21) menjadi 5.6.25-1-ubuntu2.0. Setelah itu ketika saya pergi ke query database saya mendapat pesan: -

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

Saya kemudian menemukan server tidak berjalan. Dalam file log saya suka pesan itu: -

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

Saya telah menghabiskan satu jam atau lebih mencari on line dan meskipun masalah ini telah dilaporkan sebelumnya, saya belum melihatnya dalam konteks masalah 'pasca-pembaruan' sehingga tidak yakin dengan langkah saya selanjutnya.

MichaelJohn
sumber

Jawaban:

6

Masalah ini tampaknya menyebabkan masalah atau mengubah direktori data mysql ke lokasi lain lalu / var / lib / mysql.

Coba jalankan dengan sudo

Sepertinya / var / lib / mysql dimiliki oleh pengguna mysql dan grup diatur ke mysql juga.

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

Sudahkah Anda memeriksa bahwa direktori / var / lib / mysql benar-benar ada dan sesuai dengan direktori data Anda? Jika tidak, maka Anda mungkin harus menentukan parameter datadir di bawah bagian mysqld

[mysqld]
datadir=/var/lib/mysql

Kemudian Anda dapat memilih antara mengkonfigurasi apparmor untuk memungkinkan MySQL membaca \ mengeksekusi \ memodifikasi direktori data baru dan sub direktori atau, dengan risiko Anda sendiri, Anda dapat menghapus apparmor. Anda mungkin perlu root untuk melakukan hal berikut:

/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot
Hitesh Mundra
sumber
Saya mengalami semua ini tetapi tidak berhasil. Memiliki cadangan saya memutuskan untuk menginstal ulang dan semuanya berfungsi bar masalah yang saya punya masalah. Tetapi apakah masalahnya Linux atau bukankah itu MySQL ...
MichaelJohn
@MichaelJohn tidak bisa mengatakan apa-apa. bisa jadi apparmor atau mysql package corruption
Hitesh Mundra
Di Ubuntu Xenial: apparmordiinstal dan diaktifkan secara otomatis saat Anda menginstal mysql-server-5.6. Bahkan jika Anda sebelumnya menonaktifkannya. Anda tidak dapat menghapus apparmorpaket karena itu adalah ketergantungan mysql-server-5.6. Anda dapat memecahkan kesalahan "Tidak dapat membuat file /var/lib/mysql/user.lower-test" dengan melakukanservice apparmor stop; service apparmor teardown; update-rc.d -f apparmor remove
Jeroen Vermeulen - MageHost
5

Saya mengalami masalah ini ketika mencoba menjalankan beberapa instance MySQL, tetapi alih-alih menghapus apparmor, saya memperbarui file usr.sbin.mysqld:

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

Misalnya, inilah tampilan file saya, dan begitu saya menambahkan folder yang perlu izin tulis, semuanya berfungsi sebagaimana mestinya.

/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,

}
Jubair
sumber
1
Ini juga berhasil bagi saya. Saya harus memulai ulang server untuk membuatnya berfungsi - hanya berhenti dan memulai ulang AppArmour tidak berfungsi.
MikeHoss
3

Masalah terjadi pada saya ketika saya mencoba untuk memindahkan / var / lib / mysql ke disk lain dan mengganti direktori asli dengan symlink.

Apparmor akan menolak akses dalam konfigurasi ini, lihat

mengapa ini dianggap bukan bug oleh pengembang Apparmor. Cara mengatasinya adalah menggunakan bind mount. Lihat

untuk penjelasan.

Begitu

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

memperbaiki masalah untuk saya.

Wolfgang Fahl
sumber
1

Saya punya masalah serupa. Saya menginstal ulang Server Ubuntu pada mesin saya, membuat cadangan penuh dari / etc / pada hard drive, setelah menginstal ulang saya membuat salinan semua file penting dari / drive / etc / ke sistem saya / etc.

Saat melakukan ini, saya membuat bak untuk file usr.sbin.mysqld bernama usr.sbin.mysqld.bak dan menyimpannya di direktori /etc/apparmor.d/ yang sama.

Setelah mencari lebih lanjut, saya menemukan posting blog ini: https://blogs.oracle.com/jsmyth/apparmor-and-mysql

Menginstal apparmor-utils dan mencoba untuk mengeluh pada / usr / sbin / mysqld dan dikatakan bahwa saya memiliki 2 konfigurasi apparmor yang telah ditentukan (kedua file saya).

Saya tahu itu mungkin bukan masalah yang Anda hadapi, tetapi hanya demi kejelasan, jangan sebodoh saya, membuat file cadangan di direktori yang sama dari direktori apparmor sbin.

Radu Galan
sumber
0

Periksa juga apakah partisi Anda tidak penuh, yang merupakan kasus saya.

Untuk alasan yang tidak diketahui, memindahkan data ke partisi lain juga tidak berhasil.

Jadi untuk perbaikan cepat, alih-alih mengacaukan llvm atau gparted, saya mengurangi /swapfileukuran saya .

Daishi
sumber