Câu trả lời:
Như Chealion đã đề cập, có một số cách mà mysql của bạn có thể đã được cài đặt. Mỗi trong số đó sẽ đặt thư mục dữ liệu của bạn và / hoặc nhật ký ở các vị trí khác nhau. Lệnh sau sẽ cung cấp cho bạn (và chúng tôi) một dấu hiệu tốt về nơi cần tìm.
ps auxww|grep [m]ysqld
# Putting brackets around the first char is a `grep`+`ps` trick
# to keep it from matching its own process.
# Note: For zsh compatibility put quotes around the grep regex
Bạn có thể gửi kết quả của lệnh đó ở đây không? Của tôi trông như thế này:
_mysql 101 0.0 0.3 112104 13268 ?? S 12:30AM 0:13.20 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql --user=mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid
root 76 0.0 0.0 600172 688 ?? S 12:30AM 0:00.02 /bin/sh /opt/local/lib/mysql/bin/mysqld_safe --datadir=/opt/local/var/db/mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid
Từ đó bạn có thể thấy rằng datadir của tôi là /opt/local/var/db/mysql
(vì tôi đã cài đặt qua MacPorts). Chúng ta hãy học bài học này một chút nữa ...
Từ dòng đầu tiên bạn có thể thấy daemon của tôi /opt/local/libexec/mysqld
. Có mysqld
thể gọi --verbose --help
để nhận danh sách tất cả các tùy chọn dòng lệnh (và đây là phần quan trọng / có giá trị!) Theo sau là các giá trị sẽ được sử dụng nếu bạn khởi chạy mysqld thay vì chỉ kiểm tra đầu ra trợ giúp. Các giá trị là kết quả của cấu hình thời gian biên dịch, my.cnf
tệp và bất kỳ tùy chọn dòng lệnh nào. Tôi có thể khai thác tính năng này để tìm hiểu CHÍNH XÁC nơi tệp nhật ký của tôi, như vậy:
/opt/local/libexec/mysqld --verbose --help|grep '^log'
Của tôi trông như thế này:
log /tmp/mysql.log
log-bin /tmp/mysql-bin
log-bin-index (No default value)
log-bin-trust-function-creators FALSE
log-bin-trust-routine-creators FALSE
log-error /tmp/mysql.error.log
log-isam myisam.log
log-queries-not-using-indexes FALSE
log-short-format FALSE
log-slave-updates FALSE
log-slow-admin-statements FALSE
log-slow-queries (No default value)
log-tc tc.log
log-tc-size 24576
log-update (No default value)
log-warnings 1
LO VÀ BEHOLD! tất cả các lời khuyên trên thế giới sẽ không giúp tôi vì tệp nhật ký của tôi được giữ ở một vị trí hoàn toàn không chuẩn! Tôi giữ /tmp/
máy của mình vì trên máy tính xách tay của tôi, tôi không quan tâm (thực sự tôi thích) để mất tất cả các bản ghi của tôi khi khởi động lại.
Chúng ta hãy kết hợp tất cả lại và biến bạn thành một oneliner:
$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'
Thực thi một lệnh đó và bạn sẽ nhận được một danh sách tất cả các bản ghi cho phiên bản đang chạy của mysql.
Thưởng thức!
Bash-Fu này mang đến cho bạn miễn phí theo cam kết của tôi đối với tất cả mọi thứ Nguồn mở.
Có 3 loại nhật ký MySQL / MariaDB:
log_error
cho nhật ký thông báo lỗi;general_log_file
cho tệp nhật ký truy vấn chung (nếu được bật bởi general_log
);slow_query_log_file
đối với tệp nhật ký truy vấn chậm (nếu được bật bởi slow_query_log
);Kiểm tra cài đặt và vị trí của các bản ghi trên bằng lệnh shell này:
mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
Theo mặc định, các bản ghi được lưu trữ trong thư mục dữ liệu của bạn, vì vậy hãy kiểm tra vị trí bằng lệnh shell này:
mysql -se "SELECT @@datadir"
Để xem nhật ký lỗi của bạn, bạn có thể chạy:
sudo tail -f $(mysql -Nse "SELECT @@log_error")
Nếu bạn đã bật nhật ký chung, để xem nó, hãy chạy:
sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")
Theo mặc định, tất cả các tệp nhật ký được tạo trong thư mục dữ liệu mysqld.
Nguồn: Tài liệu MySQL
Bạn có thể sử dụng mysqlbinlog
để đọc các tệp nhật ký nhị phân trong / usr / local / mysql / data / (trong cài đặt của tôi không phải tất cả đều là nhị phân). Một số lỗi chỉ đơn giản là hướng đến stderr vì vậy bạn cũng có thể muốn kiểm tra /var/log/system.log
.
Thư mục đang giữ nhật ký đó có thể không truy cập được với bạn mà không sử dụng sudo
:
sudo ls -l "/usr/local/mysql-5.0.51a-osx10.5-x86"
[..]
drwxr-x--- 4 _mysql wheel 136 Jul 10 23:06 data
Nếu bạn tình cờ tìm thấy một tệp nhật ký lớn và khi bạn đang sử dụng Time Machine, bạn có thể muốn đọc Time Machine đang làm gì? trên Lỗi máy chủ.
Theo mặc định, tất cả các tệp nhật ký được tạo trong thư mục dữ liệu mysqld. Thật không may, nhiều người không đặt các tệp nhật ký (và chương trình) của họ vào các vị trí điển hình của họ. Tôi là một trông số chúng!
Tôi đã tự mình trải qua thói quen này với MySQL cho đến khi tôi dùng thử Navicat cho MySQL . Sau này tôi nâng cấp lên Navicat Premium . Cả hai đều có một công cụ Giám sát chứa một tab với tất cả các biến máy chủ trong một danh sách toàn diện. Đây là một ảnh chụp màn hình với biến máy chủ log_error:
biến máy chủ log_error trong Công cụ giám sát máy chủ Navicat
Bạn cũng có thể đặt các biến ngay trong danh sách.
Chúc mừng!
/ L Library / Logs / MyQuery.log
mysqladmin variables
hiện là lệnh ưa thích để nhận giá trị hiện tại thay vì sử dụng trực tiếpmysqld