Bạn không thể tìm thấy tập tin mysql / plugin.frm khi khởi động MySQL


17

Khi tôi khởi động máy chủ MySQL của mình, tôi gặp lỗi này:

/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

Tôi đã chạy mysql_upgradeđể xây dựng lại nó, và nó hoạt động để xây dựng lại. Trước khi tôi làm điều đó, tôi đã gỡ bỏ và cài đặt MySQL. Tuy nhiên, khi tôi cố gắng khởi động lại, tôi cũng gặp lỗi tương tự. Tôi chắc chắn đó không phải là vấn đề về quyền, vì tất cả các tệp và thư mục được tạo bởi mysqlngười dùng.

Bạn có thể tư vấn cho tôi cách khắc phục lỗi này?


selinux cũng có thể gây ra vấn đề này.
Ross

Câu trả lời:


16

Nếu bạn có thư mục dữ liệu mysql ở vị trí không chuẩn và hệ thống của bạn có apparmor, hãy đảm bảo rằng /etc/apparmor.d/usr.sbin.mysqldthư mục dữ liệu của bạn được liệt kê trong danh sách trắng. Cấu hình sẽ giống như:

/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,

Trình nền Apparmor phải được khởi động lại sau khi bạn thực hiện bất kỳ thay đổi nào đối với cấu hình.


1
apparmorthỉnh thoảng quay lại để đánh thức chúng tôi dậy, để chúng tôi không quên anh ấy ...
Ring Ø

1
Ồ Rất nhiều thời gian tìm kiếm câu trả lời này. Cảm ơn!
Diego Andrés Díaz Espinoza

Trong trường hợp của tôi, tôi cũng sử dụng một thư mục temp tùy chỉnh và tôi thấy tôi cần phải bắt chước một số dòng từ đó /etc/apparmor.d/abstractions/user-tmp. Khi tôi đưa owner /mysql-tmp/** rwkl, /mysql-tmp/ r,vào, /etc/apparmor.d/local/usr.sbin.mysqldnó bắt đầu làm việc với tôi trên Ubuntu 14.04.
amoryod

12

Bạn có chắc chắn rằng đó không phải là về quyền? sai: 13 :

$ perror 13
OS error code  13:  Permission denied

Điều đầu tiên cần thử là thay đổi quyền sở hữu datadir của MySQL , ví dụ, nếu bạn chạy MySQL với người dùng mysql :

chown -R mysql:mysql /path/to/datadir

Một điều cần kiểm tra là nếu chủ sở hữu quy trình mysqld (có lẽ là mysql ) có các đặc quyền cần thiết cho đích được xác định là tmpdir . Và nếu vì bất kỳ lý do nào, những điều trên không hoạt động, hãy thử theo dõi quá trình mysqld để xem nơi nào và tại sao nó bị từ chối :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log

Tôi gặp vấn đề tương tự khi nâng cấp từ MySQL 5.1 lên 5.7. Dường như người dùng mysql mất quyền sở hữu thư mục / var / lib / mysql .
Rob

1

Tôi đồng ý với Dimitre. Vấn đề này phát sinh chủ yếu là do không đủ quyền. Thay đổi quyền sở hữu thư mục gốc MySql thành mysql.

chown -R mysql:mysql [mysql root folder]

Bạn có thể muốn thay đổi sự cho phép của tập lệnh Mysql cho người dùng tùy chỉnh của bạn.

chown my_mysql:my_mysql [mysqld etc]

Điều này làm việc cho tôi.


1

Trong trường hợp của tôi, tôi cần đặt ibdata1thư mục dữ liệu MySQL bao gồm thư mục vào một phân vùng khác vì tôi ibdata1đang phát triển quá nhanh và xảy ra sự cố bộ nhớ. Vì thế, tôi đã phải thay đổi tập tin my.cnf như bên dưới.

my.cnf là:

datadir         =  /var/lib/mysql

my.cnf bây giờ:

datadir         = /home/ubuntu/data/mysql

Tôi đã thử

sudo chown -R mysql:mysql  /home/ubuntu/data/mysql

nhưng vẫn nhận được lỗi tương tự ở trên. Sau đó, tôi đã cố gắng thay đổi /etc/apparmor.d/usr.sbin.mysqldtập tin. Nó làm việc tốt cho tôi.

Chúng ta nên đưa danh sách trắng vào thư mục mới của chúng tôi usr.sbin.mysqld.

 # /var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,

Thay vì thêm các dòng trên,

 /home/ubuntu/data/mysql/ r,
 /home/ubuntu/data/mysql/** rwk,

Sau đó khởi động lại máy chủ MySQL.


1

Nếu bạn đang chạy SELinux, những điều sau đây cũng có thể giúp ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa

Đối với tôi, việc này restorecon -R /var/lib/mysqlđã giúp khôi phục chính xác các cài đặt SELinux cho thư mục.
Sebi

0

Tôi gặp vấn đề này sau khi nâng cấp từ 5.5 lên 5.6.

Kỳ lạ thay, có vẻ như mysqlngười dùng đã bị xóa và tạo lại, điều này đã khiến tất cả các tệp mysql về cơ bản 'mất' quyền của họ ...

Tôi đã tìm ra điều này bằng cách truy cập thư mục mysql (trong trường hợp của tôi không phải là thư mục mặc định, vì tôi đã di chuyển nó) và thấy rằng chủ sở hữu chỉ là một số uuid và hướng dẫn ... Vì vậy, tôi chỉ chạy chown mysql:mysqltrên tất cả thư mục và tập tin, và thì đấy


-1

Đơn giản này cũng chownlàm việc cho tôi, không có quá trình sụp đổ nữa:

sudo chown -R mysql:mysql  /var/lib/mysql

Rất may, chơi với apparmor trở nên phức tạp và khó chỉnh sửa.

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.