ตรวจสอบว่ามีการใช้ไฟล์กำหนดค่า MySQL ใด


คำตอบ:


60

ถ้าคุณอยู่ในลินุกซ์แล้วเริ่มต้น 'mysqld ด้วยสำหรับเช่นstrace strace ./mysqld

ในทุกสายระบบอื่น ๆ คุณจะพบสิ่งที่ชอบ:

stat64("/etc/my.cnf", 0xbfa3d7fc)       = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4227, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3

ดังนั้นอย่างที่คุณเห็น .. มันแสดงรายการไฟล์. cnf ซึ่งมันจะพยายามใช้และใช้งานในที่สุด


9
และวิธีการทำเช่นนั้นในระบบที่ใช้งานโดยไม่ทำให้เกิดความวุ่นวายอะไรขึ้น?
Milan Babuškov

5
@ MilanBabuškovคุณควรเรียกใช้ps auxfและค้นหาคำสั่งที่เรียกใช้งานสำหรับ MySQL โดยทั่วไปแล้วดูเหมือนว่าบางสิ่งเช่นmysqld --basedir=/usr/local/mysql ...(โปรดทราบว่า ... เพียงหมายความว่าอาจมีการตั้งค่าสถานะเพิ่มเติมในคำสั่ง แต่ฉันจะไม่แสดงรายการทั้งหมด) เมื่อคุณพบแล้วให้คัดลอกสิ่งทั้งหมดแล้วปิด MySQL หากคุณอยู่ในลินุกซ์มันเป็นหรือ/etc/init.d/mysqld stop mysqladmin -u root -p shutdownจากนั้นเรียกใช้straceด้วยคำสั่ง mysql ที่คุณคัดลอก ดังนั้นมันจะเป็นดังนี้:strace mysqld --basedir=/usr/local/mysql
Hengjie

ฉันไม่มีopen(...เส้น แต่ฉันมี 4 = -1 Err#2สายที่จบลงด้วยการ ฉันจะรู้ได้อย่างไรว่าไฟล์ไหนที่ถูกโหลด?
mgPePe

4
fwiiw บน Mac คุณสามารถใช้ dtruss แทน strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe ผลลัพธ์นั้นน่าจะหมายความว่าไม่พบไฟล์ใด ๆ เลยจึงไม่ได้เปิดเลย
Vitaly

268

นำมาจากหนังสือ "ประสิทธิภาพสูง MySQL" ที่ยอดเยี่ยม:

$ which mysqld
/usr/sbin/mysqld

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

2
และฉันคิดว่าไฟล์ล่าสุดที่ระบุไว้ชนะ?
mlissner

5
มันแปลกมาก .. ฉันตรวจสอบแต่ละคนและทุกคนแล้วและพวกเขาก็ว่างเปล่า (บนเครื่อง mac)
abbood

7
สิ่งนี้ไม่ได้ให้การกำหนดค่าที่โหลด การกำหนดค่าแบบกำหนดเองที่ค่อนข้างจะเป็นไปได้ซึ่งอาจโหลด
mgPePe

4
!includedirฉันไม่คิดว่านี้จะแสดงรายการไฟล์ที่ระบุโดย ฉันกำลังพยายามหาสาเหตุว่า!includedirคำสั่งใน/etc/mysql/my.cnfไฟล์ของฉันไม่ทำงาน
Buttle Butkus

2
ทำไมคุณต้องโทรmysqldด้วยเส้นทางเต็ม!
panepeter

65

ถ้าคุณเรียกใช้mysql --verbose --help | lessมันจะบอกคุณเกี่ยวกับบรรทัด 11 ซึ่ง.cnfไฟล์นั้นจะค้นหา

คุณยังสามารถทำmysql --print-defaultsเพื่อแสดงให้คุณเห็นว่าการกำหนดค่าจะใช้อย่างไร สิ่งนี้ยังมีประโยชน์ในการระบุไฟล์กำหนดค่าที่กำลังโหลด


1
+1 เพราะนี่คือวิธีที่ mysql แนะนำให้ทำ สำหรับ windows วิธีง่ายๆคือการดัมพ์เอาต์พุตไปยังไฟล์หากคุณต้องการวิเคราะห์เนื้อหา
kta

บน windows มันบอกรายชื่อของสถานที่ แต่ไม่ใช่สถานที่ที่ถูกต้องที่ฉันจัดการหาด้วย mysql workbench ( stackoverflow.com/a/17953456/1504300 )
จริงๆ

3
ไม่แน่ใจว่ามันควรสำคัญ แต่คุณอาจต้องการใช้mysqldแทนmysql
nl-x

2
และยังคงอยู่ใน Windows ฉันพบว่า my.ini อ่านจากไดเรกทอรี ProgramData และสิ่งนี้ไม่ปรากฏในคำตอบที่แนะนำที่นี่
nl-x

2
โหวตขึ้นสำหรับmysqld --print-defaultsมันให้สิ่งที่ฉันต้องการเมื่อฉัน googled คำถามนี้
ต่อ Lundberg

28

ฉันอยู่บน Windows และฉันได้ติดตั้งชุมชน MySQL รุ่นล่าสุด 5.6

สิ่งที่ฉันทำเพื่อดูว่าไฟล์การกำหนดค่าที่ใช้คือไปที่เครื่องมือการดูแลระบบ> บริการ> MySQL56> คลิกขวา> คุณสมบัติและตรวจสอบเส้นทางเพื่อปฏิบัติการ:

"C: / ไฟล์โปรแกรม / เซิร์ฟเวอร์ MySQL / MySQL 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ เซิร์ฟเวอร์ MySQL \ MySQL \ MySQL 5.6 \ my.ini" MySQL56


ใช้งานได้กับ MySQL 5.7 เช่นกัน มันอยู่ในC:\ProgramData\MySQL\MySQL Server 5.7\my.iniโดยค่าเริ่มต้น
Ryan Shillington

18

ทางเลือกหนึ่งคือการใช้

mysqladmin variables

2
ไม่ได้บอกว่าไฟล์ cnf อยู่ที่ไหนในตัวแปรของฉัน ฉันกำลังใช้งาน MySQL 5.5.20 อยู่ อย่างไรก็ตามฉันสามารถพูดได้ว่านาน ๆ ครั้งนี้ทำงานได้อย่างที่ฉันเคยเห็นมาก่อนในตัวแปร อาจมีบางอย่างเปลี่ยนแปลงไปตั้งแต่เปลี่ยนมาเป็น 5.5
Hengjie

13

mysqld - help - verbose เป็นสิ่งที่อันตราย คุณสามารถเขียนทับ pidfile ได้อย่างง่ายดายสำหรับการใช้งานอินสแตนซ์! ใช้กับ --pid-file = XYZ

โอ้และคุณไม่สามารถใช้งานได้จริงถ้าคุณมีอินสแตนซ์มากกว่า 1 ตัวที่ทำงาน มันจะแสดงเฉพาะค่าเริ่มต้น

บทความที่ดีจริงๆเกี่ยวกับเรื่องนี้:

จะหาไฟล์กำหนดค่า MySQL ได้อย่างไร


9

เพิ่งทดสอบอย่างรวดเร็วกับ Ubuntu:

  • ติดตั้ง mysql-server ซึ่งสร้าง /etc/mysql/my.cnf

  • mysqld - verbose --help | grep -A 1 "ตัวเลือกเริ่มต้น"

110112 13:35:26 [หมายเหตุ] ปลั๊กอิน 'FEDERATED' ถูกปิดใช้งาน
ตัวเลือกเริ่มต้นจะอ่านจากไฟล์ต่อไปนี้ตามลำดับที่กำหนด: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • สร้าง /etc/my.cnf และ /usr/etc/my.cnf โดยแต่ละหมายเลขพอร์ตแตกต่างกัน

  • รีสตาร์ท mysql - มันใช้หมายเลขพอร์ตที่ตั้งค่าไว้ใน /usr/etc/my.cnf

ในขณะเดียวกันก็พบตัวเลือก --defaults-file ไปยัง mysqld หากคุณระบุไฟล์ปรับแต่งที่นั่นจะมีเพียงไฟล์เดียวที่จะถูกใช้โดยไม่คำนึงถึงสิ่งที่ส่งคืนโดย / usr / sbin / mysqld --verbose --help | grep -A 1 "ตัวเลือกเริ่มต้น"



3

ฉันพบว่ามีประโยชน์จริงๆ:

  1. ค้นหากระบวนการ MySQL ในบริการภายใต้ Control Panel -> Administration Tools
  2. คลิกเมาส์ขวาแล้วเลือก Properties
  3. คลิกและเลือกPath to executableและดูว่ามีเส้นทางไปยังmy.ini/my.cfg

1
สิ่งนี้ใช้ได้กับฉันในการติดตั้ง Server 2008 ของฉันขอบคุณ
delliottg

2

เซิร์ฟเวอร์บางตัวมีการติดตั้งและตั้งค่า MySQL หลายเวอร์ชัน ตรวจสอบให้แน่ใจว่าคุณจัดการกับเวอร์ชันที่ถูกต้องซึ่งใช้กับคำสั่ง Unix ของ:

ps -ax | grep mysql

1

สำหรับผู้ใช้เซิร์ฟเวอร์ windows ที่มี mysql เป็นบริการวิธีง่ายๆในการค้นหาไฟล์ config ที่คุณใช้คือเปิดแผงควบคุมบริการค้นหาบริการ mysql ของคุณ (ในกรณีของฉัน 'MYSQL56') คลิกขวาและคลิกคุณสมบัติ . จากนั้นคุณสามารถตรวจสอบ "เส้นทางไปยังปฏิบัติการ" ซึ่งควรมีdefaults-fileสวิตช์ที่ชี้ไปที่ไฟล์ปรับแต่งของคุณ



1

หากคุณใช้ Windows คุณสามารถใช้ Sysinternals procmonได้ เปิดและกำหนดค่าตัวกรองเช่นนี้จากนั้นคลิก "เพิ่ม" ตอนนี้ procmon จะทำการตรวจสอบ mysqld

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้เริ่มเซิร์ฟเวอร์ mysql ของคุณตามปกติ Procmon จะบันทึกการทำงานพื้นหลังของ mysql ค้นหา "ของฉัน" ในบานหน้าต่างผลลัพธ์ procmon และคุณจะพบสิ่งต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

เป็นที่ชัดเจนว่า mysql ค้นหารายการไฟล์การกำหนดค่าตามลำดับ ในกรณีของฉันพบว่าC:\mysql-5.7.19-winx64\my.cnfประสบความสำเร็จดังนั้นจึงใช้อันนี้


นี่เป็นพื้นเทียบเท่ากับคำตอบสูงสุดสำหรับ windows ขอบคุณ.
Aaron Wallentine

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.