Tentukan file konfigurasi MySQL mana yang digunakan


142

Apakah ada perintah untuk menentukan file konfigurasi mana yang saat ini digunakan MySQL 5.0?

Jawaban:


60

Jika Anda menggunakan Linux, maka mulailah 'mysqld' dengan strace, misalnya strace ./mysqld.

Di antara semua panggilan sistem lainnya, Anda akan menemukan sesuatu seperti:

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

Jadi, seperti yang Anda lihat .. ini mencantumkan file .cnf, yang dicoba digunakan dan akhirnya digunakan.


9
Dan bagaimana melakukannya pada sistem yang sedang berjalan tanpa mengacaukan apapun?
Milan Babuškov

5
@ MilanBabuškov Anda harus menjalankan ps auxfdan menemukan perintah dieksekusi untuk MySQL. Biasanya terlihat seperti sesuatu seperti mysqld --basedir=/usr/local/mysql ...(perhatikan ... hanya berarti bahwa mungkin ada lebih banyak bendera dalam perintah tetapi saya tidak akan mencantumkan semuanya) Setelah Anda menemukannya, salin semuanya dan kemudian matikan MySQL. Jika Anda menggunakan Linux, itu /etc/init.d/mysqld stopatau mysqladmin -u root -p shutdown. Kemudian jalankan stracedengan perintah mysql yang Anda salin. Jadi akan terlihat seperti ini:strace mysqld --basedir=/usr/local/mysql
Hengjie

Saya tidak punya open(...garis. Sebaliknya saya memiliki 4 baris yang diakhiri dengan = -1 Err#2. Bagaimana Anda tahu sekarang file mana yang dimuat?
mgPePe

4
fwiiw, pada Mac Anda dapat menggunakan dtruss alih-alih strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, keluaran itu kemungkinan berarti tidak ada file yang ditemukan sehingga tidak ada yang dibuka.
vitaly

268

Diambil dari buku O'Reilly "High Performance MySQL" yang fantastis:

$ 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
Dan saya menganggap file terakhir yang terdaftar menang?
mlissner

5
itu aneh .. Saya memeriksa masing-masing dan semua orang dari mereka dan mereka semua kosong (di mac saya) .. tahu kenapa?
abbood

7
Ini tidak memberikan konfigurasi yang dimuat. kemungkinan konfigurasi khusus yang mungkin dimuat
mgPePe

4
Saya tidak berpikir ini akan mencantumkan file yang ditentukan oleh !includedir. Saya mencoba mencari tahu mengapa !includedirarahan dalam /etc/mysql/my.cnffile saya tidak berfungsi.
Buttle Butkus

2
Mengapa Anda perlu menelepon mysqlddengan jalur penuh ?!
panepeter

65

Jika Anda menjalankannya mysql --verbose --help | lessakan memberi tahu Anda tentang saluran 11 yang.cnf file akan dicari.

Anda juga dapat melakukannya mysql --print-defaultsuntuk menunjukkan kepada Anda bagaimana nilai konfigurasi yang akan digunakan. Ini juga dapat berguna dalam mengidentifikasi file konfigurasi mana yang sedang dimuat.


1
Memberi +1 karena ini adalah cara yang disarankan mysql untuk melakukan ini. Untuk windows salah satu cara sederhana adalah membuang output ke file jika Anda ingin menganalisis konten.
kta

Di windows, ia memberi tahu saya daftar lokasi tetapi bukan yang benar, yang malah berhasil saya temukan dengan mysql workbench ( stackoverflow.com/a/17953456/1504300 ).
reallynice

3
Tidak yakin itu penting, tetapi Anda mungkin ingin menggunakannya mysqldsebagai gantimysql
nl-x

2
Dan masih di Windows saya mengalami bahwa my.ini dibaca dari direktori ProgramData, dan ini tidak muncul dalam jawaban yang disarankan di sini.
nl-x

2
Terpilih karena mysqld --print-defaults, itu memberi saya apa yang saya inginkan ketika saya mencari di Google pertanyaan ini.
Per Lundberg

28

Saya di Windows dan saya telah menginstal versi terbaru dari komunitas MySQL 5.6

Apa yang saya lakukan untuk melihat apa yang menggunakan file konfigurasi adalah untuk pergi ke Administrative Tools> Services> MySQL56> Klik kanan> Properties dan periksa path ke executable:

"C: / Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56


Ini berfungsi untuk MySQL 5.7 juga. Secara C:\ProgramData\MySQL\MySQL Server 5.7\my.inidefault.
Ryan Shillington

18

Alternatifnya adalah menggunakan

mysqladmin variables

2
Itu tidak benar-benar mengatakan di mana file cnf dalam variabel saya. Saya sedang menjalankan MySQL 5.5.20. Namun, saya dapat mengatakan bahwa sekali waktu ini berhasil seperti yang saya lihat sebelumnya dalam variabel. Mungkin ada yang berubah sejak pindah ke 5.5.
Hengjie

13

mysqld --help --verbose berbahaya. Anda dapat dengan mudah menimpa pidfile untuk menjalankan instance! gunakan dengan --pid-file = XYZ

Oh, dan Anda tidak bisa menggunakannya jika Anda menjalankan lebih dari 1 instance. Ini hanya akan menunjukkan kepada Anda nilai default.

Artikel yang sangat bagus tentang itu:

Bagaimana cara menemukan file konfigurasi MySQL?


9

Baru saja melakukan tes cepat di ubuntu:

  • menginstal mysql-server, yang menciptakan /etc/mysql/my.cnf

  • mysqld --verbose --help | grep -A 1 "Opsi default"

110112 13:35:26 [Catatan] Plugin 'FEDERATED' dinonaktifkan.
Opsi default dibaca dari file-file berikut dalam urutan yang diberikan: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • menciptakan /etc/my.cnf dan /usr/etc/my.cnf, masing-masing dengan nomor port yang berbeda

  • me-restart mysql - menggunakan nomor port yang diatur di /usr/etc/my.cnf

Sementara itu menemukan opsi --defaults-file ke mysqld. Jika Anda menentukan file config di sana, hanya yang akan digunakan, terlepas dari apa yang dikembalikan oleh / usr / sbin / mysqld --verbose --help | grep -A 1 "Opsi default"


4

Menggunakan MySQL Workbench akan ditampilkan di bawah "Server Status": masukkan deskripsi gambar di sini


3

Saya menemukan ini sangat berguna:

  1. Temukan proses MySQL di Layanan di bawah Control Panel -> Administration Tools
  2. Klik kanan mouse dan pilih Properties
  3. Klik dan pilih Path to executabledan lihat apakah itu berisi jalur kemy.ini/my.cfg

1
Ini bekerja untuk saya pada instalasi Server 2008 saya, terima kasih.
delliottg

2

Beberapa server memiliki beberapa versi MySQL yang diinstal dan dikonfigurasi. Pastikan Anda berurusan dengan versi yang benar berjalan dengan perintah Unix:

ps -ax | grep mysql

1

Untuk orang yang menjalankan windows server dengan mysql sebagai layanan, cara mudah untuk mengetahui file konfigurasi apa yang Anda jalankan adalah dengan membuka panel kontrol layanan, temukan layanan mysql Anda (dalam kasus saya 'MYSQL56'), klik kanan dan klik properti . Kemudian dari sini Anda dapat memeriksa "Path to Executable" yang seharusnya memiliki defaults-filesaklar yang menunjuk ke tempat file konfigurasi Anda.


1

Hanya dalam kasus Anda menjalankan mac ini juga dapat dicapai dengan:

sudo dtruss mysqld 2>&1 | grep cnf

1

Jika Anda berada di Windows, Anda dapat menggunakan Sysinternals ProcMon . Buka dan konfigurasikan pengaturan filter seperti ini, lalu klik "Tambah". Sekarang procmon akan memonitor mysqld.

masukkan deskripsi gambar di sini

Sekarang jalankan server mysql Anda seperti biasa. Procmon akan menangkap operasi latar belakang mysql. Cari "saya." di panel hasil procmon dan Anda akan menemukan sesuatu seperti berikut:

masukkan deskripsi gambar di sini

Sudah jelas bahwa mysql mencari daftar file konfigurasi pada gilirannya. Dalam kasus saya C:\mysql-5.7.19-winx64\my.cnfberhasil ditemukan sehingga menggunakan ini.


Ini pada dasarnya setara dengan jawaban teratas, untuk windows. Terima kasih.
Aaron Wallentine

0

Saya menginstal mysql menggunakan minuman instal mysql

mysqld --verbose --help | less

Dan itu menunjukkan:

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.