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


74

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.

Câu trả lời:


95

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ó mysqldthể 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.cnftệ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ở.


2
mysqladmin variableshiện là lệnh ưa thích để nhận giá trị hiện tại thay vì sử dụng trực tiếpmysqld
John Cummings

@JohnCummings, Nguồn?
Pacerier

Hôm nay tôi đã bỏ phiếu xuống mà không có ý kiến. Tôi duy trì tất cả các câu trả lời của tôi. Ngay cả những người 10 tuổi. Bạn không giúp đỡ ai bằng cách bỏ phiếu. Để lại một bình luận!
Bruno Bronosky

@ jm3 quan tâm đến công phu? Tôi không còn có quyền truy cập vào MacOS.
Bruno Bronosky

12

Có 3 loại nhật ký MySQL / MariaDB:

  • log_error cho nhật ký thông báo lỗi;
  • general_log_filecho 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)")

10

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 mysqlhoặc sử dụng ps -ef | grep mysqldđể tìm nó.

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


6

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

3
Của tôi đã ở/usr/local/var/mysql/<USERNAME>.local.err
jonnysamp

3

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.


Tôi không có một thư mục dữ liệu trong thư mục mysql. tôi đã xem tất cả các thư mục / usr / local / mysql / và không thể tìm thấy nhật ký. không có cách nào để xem cấu hình mysql? như một phpinfo ()
Tony

Bạn đã cài đặt MySQL như thế nào? MySQL được cài đặt sẵn với Mac OS X Server, MacPorts hoặc gói MySQL chính thức?
Chealion

0

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ủ.


tôi không có thư mục dữ liệu trong / usr / local / mysql
Tony

0

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

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!


-2

/ L Library / Logs / MyQuery.log


tôi thấy các bản ghi khác trong đó, nhưng không phải là mysql
Tony

Phiên bản Mac OS X Server này là gì? Nói chung, bạn sẽ muốn tìm trong / var / log / & / Library / Logs / trong Mac OS X Server. Cụ thể hơn về vấn đề này, xem /var/log/system.log, có thể có một cái gì đó được sử dụng trong / var / mysql (như tệp nhật ký .err), nhưng tôi (trên cấu hình mặc định của Leopard Server) cũng đã nói ở trên / Thư viện / Nhật ký / MySQL.log. Bạn đang cố gắng kết nối qua ổ cắm hoặc kết nối mạng? Nếu sau này, bạn đã "Kích hoạt kết nối mạng" trong Quản trị viên máy chủ (trên Leopard; Trong Tiger, đó là một ứng dụng riêng biệt trong / Ứng dụng / Tiện ích)?
Nhà xá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.