it-swarm-vi.tech

Nhật ký mysql của tôi trên OS X ở đâu?

Tôi đã kiểm tra/var/log và/usr/local/mysql và dường như tôi không thể tìm thấy nhật ký. Tôi đang cố gắng khắc phục lỗi thiết lập kết nối cơ sở dữ liệu với chức năng php.

74
Tony

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 là /opt/local/libexec/mysqld. mysqld có thể được gọi bằng --verbose --help để có 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 của bạn, my.cnf tập tin và bất kỳ tùy chọn dòng lệnh. 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ữ của tôi trong /tmp/ bởi 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ở.

94
Bruno Bronosky

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 cho 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)")
13
kenorb

Một cách khác để tìm thông tin này là sử dụng lsof.

  1. Sử dụng Trình giám sát hoạt động để tìm PID của mysql hoặc sử dụng ps -ef | grep mysqld để tìm thấy nó.

  2. Sudo lsof -p PID_OF_MYSQLD và xem tập tin nào MySQL đã mở.

10
tobym

Mất một lúc để tìm cái này ... hãy thử vị trí này: '

Sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
6
Mark Shust

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 được chuyển đến stderr để bạn có thể muốn kiểm tra /var/log/system.log cũng.

3
Chealion

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 Server Fault.

0
Arjan

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 for 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

log_error server variable in Navicat Server Monitoring Tool

Bạn cũng có thể đặt các biến ngay trong danh sách.

Chúc mừng!

0
Rob Gravelle