Không thể tạo tệp /var/lib/mysql/user.lower-test


11

Cơ sở dữ liệu MySQL đã có vấn đề miễn phí trong một vài tháng. Hôm nay khi tôi kiểm tra các gói có thể nâng cấp bằng Trình quản lý gói Synaptic, nó đã tìm ra các thành phần MySQL khác nhau (-common, -client, -server, v.v.). Do đó, tôi đã quyết định nâng cấp (tôi quên lưu ý phiên bản đã cài đặt nhưng nghĩ rằng đó là 5.6,21) thành 5.6.25-1-ub Ubuntu2.0. Sau đó, khi tôi truy vấn cơ sở dữ liệu, tôi nhận được thông báo: -

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

Sau đó tôi thấy máy chủ không chạy. Trong tệp nhật ký tôi thích rằng thông báo: -

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

Tôi đã dành khoảng một giờ để tìm kiếm trực tuyến và mặc dù vấn đề đã được báo cáo trước đây nhưng tôi không thấy vấn đề này trong bối cảnh của vấn đề 'hậu cập nhật' nên không chắc chắn về bước tiếp theo của tôi.

Câu trả lời:


5

Vấn đề này dường như có vấn đề về quyền hoặc thay đổi thư mục dữ liệu mysql sang vị trí khác sau đó / var / lib / mysql.

Cố gắng chạy với sudo

Có vẻ như / var / lib / mysql được sở hữu bởi người dùng mysql và nhóm cũng được đặt thành mysql.

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

Bạn đã kiểm tra xem thư mục / var / lib / mysql có thực sự tồn tại và tương ứng với thư mục dữ liệu của bạn không? Nếu không, thì có lẽ bạn phải chỉ định khác tham số datadir trong phần mysqld

[mysqld]
datadir=/var/lib/mysql

Sau đó, bạn có thể chọn giữa việc định cấu hình apparmor để cho phép MySQL đọc \ exec \ sửa đổi thư mục dữ liệu mới và thư mục con hoặc, có nguy cơ, bạn có thể xóa apparmor. Bạn có thể cần phải root để làm như sau:

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

Tôi đã trải qua tất cả điều này nhưng vô ích. Có bản sao lưu, tôi quyết định cài đặt lại và mọi thứ đều gặp vấn đề. Nhưng vấn đề là Linux hay là MySQL ...
MichaelJohn

@MichaelJohn không thể nói bất cứ điều gì. đó có thể là sự tham nhũng của gói apparmor hoặc mysql
Hitesh Mundra

Trên Ubuntu Xenial: apparmorđược tự động cài đặt và kích hoạt khi bạn cài đặt mysql-server-5.6. Ngay cả khi trước đây bạn đã tắt nó. Bạn không thể xóa apparmorgói vì nó phụ thuộc vào mysql-server-5.6. Bạn có thể giải quyết lỗi "Không thể tạo tệp /var/lib/mysql/user.lower-test" bằng cách thực hiệnservice apparmor stop; service apparmor teardown; update-rc.d -f apparmor remove
Jeroen Vermeulen - Magehost

5

Tôi gặp phải vấn đề này khi cố gắng chạy nhiều phiên bản của MySQL, nhưng thay vì xóa apparmor, tôi đã cập nhật tệp usr.sbin.mysqld:

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

Ví dụ, đây là tệp của tôi trông như thế nào và một khi tôi đã thêm các thư mục cần quyền ghi, tất cả đều hoạt động như bình thường.

/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
Điều này làm việc cho tôi quá. Tôi đã phải khởi động lại máy chủ để làm việc này - chỉ dừng và khởi động lại AppArmour không hoạt động.
MikeHoss

2

Vấn đề xảy ra với tôi khi tôi cố di chuyển / var / lib / mysql sang đĩa khác và thay thế thư mục gốc bằng symlink.

Apparmor sẽ từ chối quyền truy cập trong cấu hình này xem

tại sao điều này được coi là không phải là một lỗi của các nhà phát triển Apparmor. Công việc xung quanh là sử dụng một liên kết gắn kết. Xem

cho một lời giải thích.

Vì thế

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

khắc phục sự cố cho tôi


1

Tôi đã có một vấn đề tương tự. Tôi đã cài đặt lại Ubuntu Server trên máy của mình, sao lưu toàn bộ / etc / trên ổ cứng, sau khi cài đặt lại, tôi đã tạo một bản sao của tất cả các tệp quan trọng từ / drive / etc / vào hệ thống của tôi / etc.

Trong khi thực hiện điều này, tôi đã tạo một bak cho tệp usr.sbin.mysqld có tên usr.sbin.mysqld.bak và giữ nó trong cùng thư mục /etc/apparmor.d/.

Khi tìm kiếm thêm, tôi tìm thấy bài đăng trên blog này: https://bloss.oracle.com/jsmyth/apparmor-and-mysql

Đã cài đặt apparmor-utils và cố gắng khiếu nại trên / usr / sbin / mysqld và nó nói rằng tôi có 2 cấu hình apparmor được xác định (cả hai tệp của tôi).

Tôi biết đó có thể không phải là vấn đề mà bạn đang gặp phải, nhưng chỉ vì mục đích rõ ràng, đừng ngu ngốc như tôi, tạo một tệp sao lưu trong cùng thư mục của thư mục sarm của apparmor.


0

Ngoài ra kiểm tra xem phân vùng của bạn không đầy đủ, đó là trường hợp của tôi.

Vì một lý do không xác định, việc di chuyển dữ liệu sang phân vùng khác cũng không hoạt động.

Vì vậy, để khắc phục nhanh chóng, thay vì nhắn tin với llvm hoặc gparted, tôi đã giảm /swapfilekích thước của mình .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.