ฉันตรวจสอบ / var / log และ / usr / local / mysql และฉันไม่พบบันทึกการค้นหา ฉันพยายามแก้ไขข้อผิดพลาดในการสร้างการเชื่อมต่อฐานข้อมูลด้วยฟังก์ชั่น php
ฉันตรวจสอบ / var / log และ / usr / local / mysql และฉันไม่พบบันทึกการค้นหา ฉันพยายามแก้ไขข้อผิดพลาดในการสร้างการเชื่อมต่อฐานข้อมูลด้วยฟังก์ชั่น php
คำตอบ:
Chealion ดังกล่าวมีหลายวิธีที่ mysql ของคุณอาจถูกติดตั้ง ซึ่งแต่ละแห่งจะวางข้อมูลของคุณและ / หรือบันทึกในสถานที่ที่แตกต่างกัน คำสั่งต่อไปนี้จะช่วยให้คุณ (และเรา) เป็นตัวบ่งชี้ที่ดีว่าควรมองที่ไหน
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
คุณช่วยโพสต์ผลลัพธ์ของคำสั่งนั้นที่นี่ได้ไหม? ฉันมีลักษณะเช่นนี้:
_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
จากนั้นคุณจะเห็นว่าข้อมูลของฉันคือ/opt/local/var/db/mysql
(เพราะฉันติดตั้งผ่าน MacPorts) มาเรียนบทเรียนนี้กันต่อไป ...
/opt/local/libexec/mysqld
จากบรรทัดแรกที่คุณสามารถดูภูตของฉันคือ mysqld
สามารถเรียกว่ามี--verbose --help
จะได้รับรายการของตัวเลือกบรรทัดคำสั่งทั้งหมด (และนี่เป็นสิ่งที่สำคัญ / ส่วนที่มีคุณค่า!) ตามด้วยค่าที่จะใช้ถ้าคุณได้รับการเปิดตัว mysqld แทนเพียงการตรวจสอบการส่งออกช่วยเหลือ ค่าเป็นผลลัพธ์ของการกำหนดค่าเวลาคอมไพล์my.cnf
ไฟล์และตัวเลือกบรรทัดคำสั่งใด ๆ ฉันสามารถใช้ประโยชน์จากคุณสมบัตินี้เพื่อค้นหาว่าไฟล์บันทึกของฉันอยู่ตรงไหน:
/opt/local/libexec/mysqld --verbose --help|grep '^log'
ฉันมีลักษณะเช่นนี้:
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
แท้จริงและความเป็นอยู่! คำแนะนำทั้งหมดในโลกไม่ช่วยฉันเพราะไฟล์บันทึกของฉันถูกเก็บไว้ในตำแหน่งที่ไม่ได้มาตรฐานอย่างสมบูรณ์! ฉันเก็บไว้/tmp/
เพราะในแล็ปท็อปของฉันฉันไม่สนใจ (จริง ๆ แล้วฉันชอบ) เพื่อหลวมล็อกของฉันทั้งหมดเมื่อรีบูต
มารวมกันและทำให้คุณเป็นผู้ประกอบการแบบออนไลน์:
$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'
ดำเนินการที่หนึ่งคำสั่งและคุณจะได้รับรายการบันทึกทั้งหมดสำหรับอินสแตนซ์ที่ใช้งานของคุณของ mysql
สนุก!
Bash-Fu นี้มอบให้คุณฟรีโดยความมุ่งมั่นของฉันต่อทุกสิ่งที่โอเพนซอร์ส
บันทึก MySQL / MariaDB มี 3 ประเภท:
log_error
สำหรับบันทึกข้อความแสดงข้อผิดพลาด;general_log_file
สำหรับไฟล์บันทึกการสืบค้นทั่วไป (ถ้าเปิดใช้งานโดยgeneral_log
);slow_query_log_file
สำหรับไฟล์บันทึกการสืบค้นที่ช้า (ถ้าเปิดใช้งานโดยslow_query_log
);ตรวจสอบการตั้งค่าและตำแหน่งของบันทึกด้านบนโดยคำสั่ง shell นี้:
mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
โดยค่าเริ่มต้นบันทึกจะถูกเก็บไว้ในข้อมูลของคุณดังนั้นตรวจสอบตำแหน่งด้วยคำสั่งเชลล์นี้:
mysql -se "SELECT @@datadir"
ในการดูบันทึกข้อผิดพลาดคุณสามารถเรียกใช้:
sudo tail -f $(mysql -Nse "SELECT @@log_error")
หากคุณเปิดใช้งานบันทึกทั่วไปแล้วให้เรียกดู:
sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")
lsof
วิธีการหาข้อมูลเหล่านี้ก็คือการใช้
ใช้การตรวจสอบกิจกรรมเพื่อค้นหา PID mysql
หรือใช้ps -ef | grep mysqld
เพื่อค้นหา
sudo lsof -p PID_OF_MYSQLD
และดูว่าไฟล์ MySQL เปิดอะไร
ใช้เวลาสักครู่เพื่อค้นหาสิ่งนี้ ... ลองใช้ตำแหน่งนี้: '
sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
/usr/local/var/mysql/<USERNAME>.local.err
โดยค่าเริ่มต้นไฟล์บันทึกทั้งหมดจะถูกสร้างขึ้นในไดเรกทอรีข้อมูล mysqld
ที่มา: เอกสาร MySQL
คุณสามารถใช้mysqlbinlog
เพื่ออ่านไฟล์บันทึกไบนารีใน / usr / local / mysql / data / (ในการติดตั้งของฉันไม่ใช่ทั้งหมดเป็นไบนารี) ข้อผิดพลาดบางอย่างจะถูกนำไปยัง stderr โดยตรงดังนั้นคุณอาจต้องการตรวจสอบ/var/log/system.log
เช่นกัน
โฟลเดอร์ที่เก็บบันทึกนั้นอาจไม่สามารถเข้าถึงได้โดยไม่ต้องใช้sudo
:
sudo ls -l "/usr/local/mysql-5.0.51a-osx10.5-x86"
[..]
drwxr-x--- 4 _mysql wheel 136 Jul 10 23:06 data
หากคุณพบไฟล์บันทึกขนาดใหญ่และเมื่อคุณใช้ Time Machine คุณอาจต้องการอ่านTime Machine ทำอะไร บน Server Fault
โดยค่าเริ่มต้นไฟล์บันทึกทั้งหมดจะถูกสร้างขึ้นในไดเรกทอรีข้อมูล mysqld น่าเสียดายที่หลายคนไม่ได้ใส่ไฟล์บันทึก (และโปรแกรม) ไว้ในตำแหน่งปกติ ฉันเป็นหนึ่งในนั้น!
ฉันเดินผ่านประจำวันนี้ตัวเองกับ MySQL จนกว่าฉันจะพยายามออกNavicat สำหรับ MySQL ต่อมาผมอัพเกรดNavicat พรีเมี่ยม ทั้งสองมีเครื่องมือการตรวจสอบที่มีแท็บที่มีตัวแปรเซิร์ฟเวอร์ทั้งหมดในรายการที่ครอบคลุมหนึ่งรายการ นี่คือภาพหน้าจอพร้อมตัวแปรเซิร์ฟเวอร์ log_error:
ตัวแปรเซิร์ฟเวอร์ log_error ในเครื่องมือตรวจสอบสถานะเซิร์ฟเวอร์ Navicat
นอกจากนี้คุณยังสามารถตั้งค่าตัวแปรได้ในรายการ
ไชโย!
/Library/Logs/MySQL.log
mysqladmin variables
ขณะนี้เป็นคำสั่งที่ต้องการสำหรับรับค่าปัจจุบันแทนการใช้โดยตรงmysqld