Di mana log mysql saya di OS X?

74

Saya memeriksa / var / log dan / usr / local / mysql dan sepertinya saya tidak dapat menemukan log. Saya mencoba memecahkan masalah saat membuat koneksi database dengan fungsi php.

Tony
sumber

Jawaban:

95

Seperti yang disebutkan Chealion, ada beberapa cara yang bisa diinstal mysql Anda. Masing-masing akan menempatkan data dir dan / atau log Anda di lokasi yang berbeda. Perintah berikut akan memberi Anda (dan kami) indikasi yang baik tentang ke mana harus mencari.

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

Bisakah Anda memposting hasil dari perintah itu di sini? Milik saya terlihat seperti ini:

_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

Dari itu Anda dapat melihat bahwa datadir saya /opt/local/var/db/mysql(karena saya menginstal melalui MacPorts). Mari kita mengambil pelajaran ini sedikit lebih jauh ...

Dari baris pertama Anda dapat melihat dasmon saya /opt/local/libexec/mysqld. The mysqldbisa disebut dengan --verbose --helpuntuk mendapatkan daftar semua opsi baris perintah (dan di sini adalah / bagian yang berharga penting!) Diikuti oleh nilai-nilai yang akan digunakan jika Anda meluncurkan mysqld bukan hanya memeriksa bantuan output. Nilai adalah hasil dari konfigurasi waktu kompilasi, my.cnffile, dan opsi baris perintah apa pun. Saya dapat memanfaatkan fitur ini untuk mencari tahu PERSIS di mana file-file log saya, seperti:

/opt/local/libexec/mysqld --verbose --help|grep '^log'

Milik saya terlihat seperti ini:

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 DAN MELIHAT! semua saran di dunia tidak akan membantu saya karena file log saya disimpan di lokasi yang sepenuhnya tidak standar! Saya menyimpan milik saya /tmp/karena di laptop saya, saya tidak peduli (sebenarnya saya lebih suka) kehilangan semua log saya saat reboot.

Mari kita selesaikan semuanya dan menjadikan Anda oneliner:

$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'

Jalankan perintah itu dan Anda akan mendapatkan daftar semua log untuk instance mysql Anda yang sedang berjalan.

Nikmati!

Bash-Fu ini dibawakan kepada Anda secara gratis oleh komitmen saya untuk semua hal Open Source.

Bruno Bronosky
sumber
2
mysqladmin variablessekarang perintah yang disukai untuk mendapatkan nilai saat ini daripada langsung menggunakanmysqld
John Cummings
@JohnCummings, Sumber?
Pacerier
Hari ini saya mendapat suara tanpa komentar. Saya mempertahankan semua jawaban saya. Bahkan yang berusia 10 tahun. Anda tidak membantu siapa pun dengan memilih. Tinggalkan komentar!
Bruno Bronosky
@ jm3 peduli untuk menjelaskan? Saya tidak lagi memiliki akses ke MacOS.
Bruno Bronosky
12

Ada 3 jenis log MySQL / MariaDB:

Periksa pengaturan dan lokasi log di atas dengan perintah shell ini:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

Secara default, log disimpan di dir data Anda, jadi periksa lokasi dengan perintah shell ini:

mysql -se "SELECT @@datadir"

Untuk melihat log kesalahan Anda, Anda dapat menjalankan:

sudo tail -f $(mysql -Nse "SELECT @@log_error")

Jika Anda sudah mengaktifkan log umum, untuk melihatnya, jalankan:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")
kenorb
sumber
10

Cara lain untuk menemukan informasi ini adalah menggunakan lsof.

  1. Gunakan Monitor Aktivitas untuk menemukan PID mysql, atau gunakan ps -ef | grep mysqlduntuk menemukannya.

  2. sudo lsof -p PID_OF_MYSQLD dan lihat file mana yang telah dibuka MySQL.

tobym
sumber
6

Butuh waktu beberapa saat untuk menemukan ini ... coba lokasi ini: '

sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
Mark Shust
sumber
3
Punyaku ada di/usr/local/var/mysql/<USERNAME>.local.err
jonnysamps
3

Secara default, semua file log dibuat di direktori data mysqld.

Sumber: Dokumentasi MySQL

Anda dapat menggunakan mysqlbinloguntuk membaca file log biner di / usr / local / mysql / data / (dalam instalasi saya tidak semua biner). Beberapa kesalahan hanya diarahkan ke stderr sehingga Anda mungkin ingin memeriksanya /var/log/system.logjuga.

Chealion
sumber
saya tidak memiliki direktori data di direktori mysql. Saya telah melihat seluruh direktori / usr / local / mysql / dan tidak dapat menemukan log. tidak ada cara untuk melihat konfigurasi mysql? seperti phpinfo ()
Tony
Bagaimana Anda menginstal MySQL? MySQL yang sudah diinstal sebelumnya dengan Mac OS X Server, MacPorts, atau paket MySQL resmi?
Chealion
0

Folder yang menyimpan log itu mungkin tidak dapat diakses oleh Anda tanpa menggunakan sudo:

sudo ls -l "/usr/local/mysql-5.0.51a-osx10.5-x86"
[..]
drwxr-x---   4 _mysql  wheel    136 Jul 10 23:06 data

Jika Anda menemukan file log besar dan ketika Anda menggunakan Time Machine, Anda mungkin ingin membaca Apa yang dilakukan Time Machine? pada Kesalahan Server.

Arjan
sumber
saya tidak punya dir data di / usr / local / mysql
Tony
0

Secara default, semua file log dibuat di direktori data mysqld. Sayangnya, banyak orang tidak meletakkan file log mereka (dan program) di lokasi khas mereka. Saya salah satu dari mereka!

Saya melalui rutinitas ini sendiri dengan MySQL sampai saya mencoba Navicat untuk MySQL . Kemudian saya meningkatkan ke Navicat Premium . Keduanya memiliki alat Pemantauan yang berisi tab dengan semua variabel server dalam satu daftar lengkap. Berikut screenshot dengan variabel server log_error:

variabel server log_error di Alat Pemantau Server Navicat

variabel server log_error di Alat Pemantau Server Navicat

Anda juga dapat mengatur variabel di sana dalam daftar.

Tepuk tangan!

Rob Gravelle
sumber
-2

/Library/Logs/MySQL.log

bermoral
sumber
saya melihat log lain di sana, tetapi tidak mysql
Tony
Versi apa dari Mac OS X Server ini? Secara umum, Anda ingin melihat / var / log / & / Library / Logs / di bawah Mac OS X Server. Lebih spesifik untuk masalah ini, lihat /var/log/system.log, mungkin ada sesuatu yang digunakan di / var / mysql (seperti file log .err), tetapi saya (pada konfigurasi default Server Leopard) juga memiliki / Library / Logs / MySQL.log. Apakah Anda mencoba terhubung melalui soket atau koneksi jaringan? Jika yang terakhir, apakah Anda "Mengaktifkan koneksi jaringan" di Server Admin (di Leopard; Di Tiger itu adalah aplikasi terpisah di / Aplikasi / Utilitas)?
morgant