Tentukan file konfigurasi MySQL mana yang digunakan

142

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

yalestar
sumber

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.


sumber
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
Markus B
sumber
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.

ahli statika
sumber
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

Alexandru Trandafir Catalin
sumber
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
Steve
sumber
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?

Sasha
sumber
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"

Herta
sumber
4

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

fanThomas
sumber
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
Luke
sumber
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
Heather McVay
sumber
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.

Kershrew
sumber
1

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

sudo dtruss mysqld 2>&1 | grep cnf
taliboni
sumber
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.

Pelajar saja
sumber
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

Inti
sumber