Vì vậy, đây là một vấn đề rất phức tạp.
Bởi vì từ những gì bạn mô tả (rất chi tiết) , vẫn có nhiều nguyên nhân có thể gây ra sự cố này.
CÂU HỎI: Vì vậy, đây là một số câu hỏi được tóm tắt cho bạn (từ kinh nghiệm của tôi):
-
MySQL not running
đã xảy ra trong lần khởi động đầu tiên của bạn (xampp start / xampp startmysql)? - Sau khi cài đặt xampp trong Linux, bạn đã tùy chỉnh cấu hình MySQL (mặc định etc / my.cnf) chưa?
- NẾU TÙY CHỈNH Bạn có tùy chỉnh thư mục cơ sở dữ liệu của mình sang một vị trí khác (mặc định / opt / lampp / var / mysql) không?
- NẾU KHÔNG TÙY CHỈNH Như bạn đã đề cập, bạn có quyền truy cập vào dòng lệnh mysql, bạn đã cố gắng truy cập cơ sở dữ liệu của bạn SQL hay cơ sở dữ liệu thậm chí không thể truy cập được (có nghĩa là máy chủ mysql, được đặt tên là mysqld, không khởi động đúng cách)?
- Bạn đã tự mình khởi tạo / cài đặt cơ sở dữ liệu mysql (bin / mysql_install_db mặc định) chưa? Được rồi, những câu hỏi trên sẽ cung cấp ý tưởng xử lý sự cố cơ bản.
GIẢI PHÁP:
1. sự cố nhật ký lỗi
Vì vậy, vấn đề này sẽ là vấn đề đơn giản nhất và nó có thể giúp chúng tôi xác định tốt hơn các nguyên nhân gây ra lỗi.
Kiểm tra
a) trong cấu hình MySQL (my.cnf) người dùng đang chạy của bạn là gì? đây phải là một tham số trong [mysqld] user =... (mysql mặc định), chúng tôi giả sử cấu hình của chúng tôi được đặt thành mysql
b) bạn có tài khoản để chạy lệnh người dùng thử terminal id -u mysql
không , nếu nó trả về một số id, thì tài khoản đó tồn tại, nếu không nó sẽ cho bạn biết no such user
. Bạn cần có người dùng này để chạy máy chủ mysql và ghi nhật ký lỗi (bằng cách xem phần thứ hai của bản ghi đầu cuối của bạn, tài khoản của bạn sẽ tồn tại)
c) kiểm tra vị trí nhật ký lỗi cấu hình MySQL (my.cnf) của bạn, nó phải nằm dưới [mysqld] dưới dạng tham số log-error =... nếu điều này không được ghi, hãy thêm vào nó (phải ở dưới [mysqld]).
d) kiểm tra mọi thư mục trong đường dẫn đầy đủ nhật ký của bạn (ví dụ:/var/log/mysql/error.log)
- / var phải có
read
vàexecute
quyền cho người dùng mysql (ít nhất là ****** r-x) vượt qua quyền tạo tệp (thực thi) - / var / log phải có
read
vàexecute
quyền cho người dùng mysql (ít nhất là ****** r-x) vượt qua quyền tạo tệp (thực thi) - / var / log / mysql phải có
read
,write
vàexecute
thẩm quyền cho người dùng mysql (là ****** rwx) tạo và ghi thẩm quyền tệp
Để tệp error.log của bạn có thể được tạo ở đây, nếu vẫn không hoạt động, hãy thử tạo nó theo cách thủ công với chủ sở hữu là mysql, nhóm là mysql và quyền của 660.
2. Trạng thái chạy máy chủ MySQL
có một số cách tiếp cận để kiểm tra điều này
a) sử dụng mysql.server (bin / mysql.server mặc định) để thực hiện mysql.server status
yêu cầu. Nếu máy chủ MySQL của bạn đang chạy, nó sẽ hiển thị THÀNH CÔNG! MariaDB đang chạy.
b) sử dụng top
để kiểm tra xem dịch vụ có đang chạy hay không, hoặc sử dụng top | grep "mysqld"
. mysqld
và mysqld_safe
nên trong đó.
c) đăng nhập vào dòng lệnh mysql giống như bạn đã làm trong bản ghi đầu cuối 4 (phần này hoạt động) và thực hiện lệnh SHOW DATABASES;
điều này cũng sẽ hoạt động.
3. Vị trí cơ sở dữ liệu được tùy chỉnh gây ra tình trạng Xampp mysql không chạy Đây là một vấn đề sâu hơn nhiều, vì tôi đã xác nhận rằng máy chủ MySQL đang chạy đúng cách.
Tôi đã làm
[[email protected] ~]# /opt/lampp/xampp status
Version: XAMPP for Linux 7.4.1
Apache is running.
MySQL is not running.
ProFTPD is running.
[[email protected] ~]# /opt/lampp/bin/mysql.server status
SUCCESS! MariaDB running (xxxx)
Vì vậy, điều này cho thấy xampp đang tìm nạp trạng thái dịch vụ không chính xác (chẳng hạn như một bài đăng khác Cơ sở dữ liệu MySQL bắt đầu trên Terminal nhưng không bắt đầu trên XAMPP )
Tôi có thể truy tìm chi tiết cách xampp hoạt động, nhưng trong /opt/lampp/xampp
tệp script, tôi đã tìm thấy /opt/lampp/share/xampp/status
và /opt/lampp/share/statusraw
Đi sâu hơn vào nó (cả /opt/lampp/share/xampp/status
và /opt/lampp/share/statusraw
tệp),
/opt/lampp/var/mysql/` /bin/hostname`.pid mysqld
Vì cơ sở dữ liệu của tôi đã được tùy chỉnh thành thư mục bản địa hóa, điều này có nghĩa là tệp pid sẽ không nằm trong /opt/lampp/var/mysql
và trạng thái này sẽ luôn trả về không chính xác.
Vì vậy, việc thay đổi vị trí này thành vị trí pid cơ sở dữ liệu của riêng tôi đã giải quyết được vấn đề.