Mysql. Ràng buộc trên ổ cắm unix: Quyền bị từ chối


12

Không thể khởi động mysql bằng:

130408 11:31:22 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/usr/libexec/mysqld: Table 'plugin' is read only
130408 11:31:22 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130408 11:31:22  InnoDB: Initializing buffer pool, size = 8.0M
130408 11:31:22  InnoDB: Completed initialization of buffer pool
130408 11:31:23  InnoDB: Started; log sequence number 0 19514977
130408 11:31:23 [ERROR] Can't start server : Bind on unix socket: Permission denied
130408 11:31:23 [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
130408 11:31:23 [ERROR] Aborting

130408 11:31:23  InnoDB: Starting shutdown...
130408 11:31:28  InnoDB: Shutdown completed; log sequence number 0 19514977
130408 11:31:28 [Note] /usr/libexec/mysqld: Shutdown complete
130408 11:31:28 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Một mysql khác không phải là runnig:

[root@triton667 etc]# ps ax | grep mysql
 9195 pts/1    S+     0:00 grep mysql

my.cnf:

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    tmpdir=/tmp
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    max_allowed_packet=256M

    [mysqld_safe]

    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

Quyền trên "/ tmp" và "/ var / lib / mysql" là 777 /

Bất kỳ đề xuất?

CẬP NHẬT1 :

[root@triton667 etc]# mysql_upgrade
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) trying to connect
FATAL ERROR: Upgrade failed

CẬP NHẬT : plugin.MYD, plugin.MYI và plugin.frm đang tồn tại trong / var / lib / mysql / mysql /.

Không có gì chạy trên cổng 3306.

mysql.sock không tồn tại. Tôi đã cố gắng tự tạo nó, nhưng sau khi khởi động lại nó đã bị gỡ bỏ.

gắn kết (tất cả rw):

[root@triton667 mysql]# mount
/dev/md1 on / type ext4 (rw,noatime,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/md0 on /boot type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

Vấn đề này xuất hiện ngày hôm nay khi tôi cố gắng sao chép trang web của mình trên một tên miền phụ.


chạy mysql_upgradenhư đề nghị?
NickW

Số touch /var/lib/mysql/mysql.sock - Cũng không hoạt động
Aldwin

Có một tập tin plugin.MYD, plugin.MYI và plugin.frm dưới / var / lib / mysql / mysql không?
NickW

Ngoài ra, tập tin mysql.sock có tồn tại trong thư mục / var / lib / mysql không?
NickW

Có cái gì đó đã chạy trên cổng 3306?
aardvark

Câu trả lời:


15

1) Trước tiên hãy đảm bảo bạn xóa tệp ổ cắm hiện có bằng lệnh rm.

rm /var/lib/mysql/mysql.sock

2) Giết tất cả các quy trình MySQL hiện có thông qua lệnh sau.

service mysql stop

3) Rất quan trọng: Đảm bảo rằng quyền cho /var/lib/thư mục cơ sở dữ liệu MySQL trong thư mục phải là mysql: root

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

4) Với thông tin trên, bạn sẽ có thể khởi động MySQL thành công và tệp ổ cắm sẽ được tạo thành công trong thư mục cơ sở dữ liệu.

service mysql start

Tôi sử dụng máy chủ Ubuntu và điều này không hiệu quả.
Vitor Mazuco

6

Nhờ câu trả lời của @ Abhishek kết hợp với đầu ra mysqld (Không thể sử dụng /var/run/mysqld/mysqld.sock) Tôi đã giải quyết vấn đề này bằng một lệnh:

chown -R mysql:root /var/run/mysqld

Sau đó, nó bắt đầu đúng:

root@***:~# service mysql start
df: Warning: cannot read table of mounted file systems: No such file or directory
[ ok ] Starting MySQL database server: mysqld ..
[info] Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly..

1
Chào

3

Vấn đề của bạn có thể được gây ra bởi bất kỳ điều kiện nào ngăn trình nền của MySQL ghi tệp ổ cắm vào đường dẫn /var/lib/mysql. Các câu trả lời khác, chẳng hạn như hệ thống tệp chỉ đọc hoặc quyền sở hữu thư mục không chính xác, giải quyết các lý do khác nhau mà MySQL có thể không thể ghi vào ổ cắm.

Một lý do khác có thể là /var/lib/mysqlcó thể có bối cảnh SELinux không chính xác. Bạn có thể chẩn đoán tình trạng này bằng cách kiểm tra các từ chối của Selinux AVC gần đây sau khi thử khởi động trình nền MySQL:

ausearch -m avc --start recent

Nếu SELinux từ chối quyền truy cập để tạo tệp ổ cắm, bạn sẽ thấy một thông báo lỗi như thế này:

time->Thu Feb  2 03:46:27 2017
type=SYSCALL msg=audit(1566106187.784:152): arch=c000004e syscall=49 success=no exit=-13 a0=4f a1=7ff3fd652e80 a2=6e a3=7fcd2d6523d40 items=0 ppid=1 pid=1820 auid=4294967295 uid=996 gid=994 euid=996 suid=996 fsuid=996 egid=994 sgid=994 fsgid=994 tty=(none) ses=4294967295 comm="mysqld" exe="/usr/sbin/mysqld" subj=system_u:system_r:mysqld_t:s0 key=(null)
type=AVC msg=audit(1566106187.784:152): avc:  denied  { create } for  pid=1820 comm="mysqld" name="mysql.sock" scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:var_log_t:s0 tclass=sock_file

Để giải quyết từ chối SELinux, hãy thử khôi phục ngữ cảnh mặc định của thư mục (bản phân phối của bạn phải đặt đúng ngữ cảnh mysqld_db_tkhi bạn cài đặt MySQL hoặc MariaDB):

restorecon -R -v -f /var/lib/mysql

Nếu bạn đã tùy chỉnh các bối cảnh trên hệ thống của mình, việc khắc phục sự cố nằm ngoài phạm vi của bài đăng này.


Trên CentOS 7 với SELinux, đây là những gì tôi đã phải đối mặt và khôi phục bối cảnh đã sửa nó.
Ken J

1

Dựa trên những gì bạn viết, tôi sẽ đề nghị bạn kiểm tra xem hệ thống tập tin của bạn có được gắn ở chế độ chỉ đọc không.

130408 ​​11:31:22 mysqld_safe Bắt đầu trình nền mysqld với cơ sở dữ liệu từ / var / lib / mysql / usr / libexec / mysqld: Bảng 'plugin' chỉ được đọc


0

Tôi đã thử tất cả các câu trả lời khác để giải quyết vấn đề. Có vẻ như khi tôi đặt selinux thành cho phép: setenforce 0tôi có thể khởi động máy chủ.

Sau đó tôi đã sửa đổi thư mục sock /var/lib/mysqlcấp quyền selinux cho thư mục:

semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
restorecon -R -v -f /var/lib/mysql

Sau khi hoàn thành, tôi kích hoạt selinux bằng cách sử dụng setenforce 1dịch vụ mysql và tất cả đều ổn.

Hy vọng điều này sẽ giúp những người khác.

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.