Xác định tệp cấu hình MySQL nào đang được sử dụng


142

Có một lệnh để xác định tập tin cấu hình nào MySQL 5.0 hiện đang sử dụng không?

Câu trả lời:


60

Nếu bạn đang dùng Linux, thì hãy bắt đầu 'mysqld' với strace, ví dụ như strace ./mysqld.

Trong số tất cả các cuộc gọi hệ thống khác, bạn sẽ tìm thấy một cái gì đó như:

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

Vì vậy, như bạn có thể thấy..tôi liệt kê các tệp .cnf, nó cố gắng sử dụng và cuối cùng sử dụng.


9
Và làm thế nào để làm điều đó trên một hệ thống đang chạy mà không làm hỏng bất cứ điều gì?
Milan Babuškov

5
@ MilanBabuškov Bạn nên chạy ps auxfvà tìm lệnh được thực thi cho MySQL. Thông thường, nó trông giống như mysqld --basedir=/usr/local/mysql ...(lưu ý ... chỉ có nghĩa là có thể có nhiều cờ hơn trong lệnh nhưng tôi sẽ không liệt kê tất cả) Khi bạn đã tìm thấy nó, hãy sao chép toàn bộ và sau đó tắt MySQL. Nếu bạn đang dùng Linux, nó là /etc/init.d/mysqld stophoặc mysqladmin -u root -p shutdown. Sau đó chạy stracevới lệnh mysql bạn đã sao chép. Vì vậy, nó sẽ trông giống như vậy:strace mysqld --basedir=/usr/local/mysql
Hengjie

Tôi không có open(...dòng. Thay vào đó tôi có 4 dòng kết thúc bằng = -1 Err#2. Làm thế nào để bạn biết bây giờ tập tin nào được tải?
mgPePe 17/03/2016

4
fwiiw, trên máy Mac, bạn có thể sử dụng dtruss thay vì strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, đầu ra đó có thể có nghĩa là không có tệp nào được tìm thấy nên không có tệp nào được mở.
trọng

268

Lấy từ cuốn sách O'Reilly "Hiệu suất cao" tuyệt vời của 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
Và tôi giả sử tập tin cuối cùng được liệt kê chiến thắng?
mlissner

5
thật kỳ lạ .. Tôi đã kiểm tra từng người trong số họ và tất cả họ đều trống rỗng (trên máy mac của tôi) .. có ý kiến ​​gì không?
abbood

7
Điều này không cung cấp cho cấu hình được tải. cấu hình tùy chỉnh thay thế có thể được tải
mgPePe 17/03/2016

4
Tôi không nghĩ rằng điều này sẽ liệt kê các tập tin được chỉ định bởi !includedir. Tôi đang cố gắng tìm hiểu tại sao lệnh !includedirtrong /etc/mysql/my.cnftệp của tôi không hoạt động.
Butussy Butkus

2
Tại sao bạn cần gọi mysqldvới đường dẫn đầy đủ?!
panepeter

65

Nếu bạn chạy mysql --verbose --help | lessnó sẽ cho bạn biết về dòng 11 .cnfnó sẽ tìm tập tin nào.

Bạn cũng có thể làm mysql --print-defaultsđể chỉ cho bạn cách sử dụng các giá trị cấu hình. Điều này cũng có thể hữu ích trong việc xác định tập tin cấu hình mà nó đang tải.


1
+1 vì đây là cách khuyên dùng mysql để làm việc này. Đối với windows, một cách đơn giản là kết xuất đầu ra thành một tệp nếu bạn muốn phân tích nội dung.
kta

Trên các cửa sổ, nó cho tôi biết một danh sách các vị trí nhưng không phải là vị trí phù hợp, thay vào đó tôi quản lý để tìm bằng bàn làm việc mysql ( stackoverflow.com/a/17953456/1504300 ).
thật sự là

3
Không chắc chắn nó có vấn đề, nhưng bạn có thể muốn sử dụng mysqldthay vìmysql
nl-x

2
Và vẫn trong Windows tôi trải nghiệm rằng my.ini được đọc từ thư mục ProgramData và điều này không hiển thị trong câu trả lời được đề xuất ở đây.
nl-x

2
Được khuyến khích mysqld --print-defaults, nó đã cho tôi chính xác những gì tôi muốn khi tôi đưa ra câu hỏi này.
Per Lundberg

28

Tôi đang dùng Windows và tôi đã cài đặt phiên bản mới nhất của cộng đồng MySQL 5.6

Những gì tôi đã làm để xem tập tin cấu hình nào sử dụng là vào Công cụ quản trị> Dịch vụ> MySQL56> Nhấp chuột phải> Thuộc tính và kiểm tra đường dẫn để thực thi:

"C: / Tệp chương trình / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56


Điều này cũng hoạt động với MySQL 5.7. Theo C:\ProgramData\MySQL\MySQL Server 5.7\my.inimặc định.
Ryan Shillington

18

Một cách khác là sử dụng

mysqladmin variables

2
Nó không thực sự nói tập tin cnf ở đâu trong các biến của tôi. Tôi hiện đang chạy MySQL 5.5.20. Tuy nhiên, tôi có thể nói rằng đã có lúc điều này hoạt động như tôi đã thấy trước đây trong các biến. Có lẽ một cái gì đó đã thay đổi kể từ khi chuyển sang 5.5.
Hengjie

13

mysqld - trợ giúp --verbose là nguy hiểm. Bạn có thể dễ dàng ghi đè pidfile để chạy dụ! sử dụng nó với --pid-file = XYZ

Ồ, và bạn không thể thực sự sử dụng nó nếu bạn có nhiều hơn 1 phiên bản đang chạy. Nó sẽ chỉ hiển thị cho bạn giá trị mặc định.

Bài viết thực sự hay về nó:

Làm thế nào để tìm tập tin cấu hình MySQL?


9

Chỉ cần thực hiện một thử nghiệm nhanh trên Ubuntu:

  • đã cài đặt mysql-server, đã tạo /etc/mysql/my.cnf

  • mysqld --verbose - trợ giúp | grep -A 1 "Tùy chọn mặc định"

110112 13:35:26 [Lưu ý] Plugin 'LIÊN KẾT' bị vô hiệu hóa.
Các tùy chọn mặc định được đọc từ các tệp sau theo thứ tự đã cho: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • đã tạo /etc/my.cnf và /usr/etc/my.cnf, mỗi cái có một số cổng khác nhau

  • đã khởi động lại mysql - nó đã sử dụng số cổng được đặt trong /usr/etc/my.cnf

Đồng thời tìm thấy tùy chọn --defaults-file cho mysqld. Nếu bạn chỉ định một tệp cấu hình ở đó, chỉ có một tệp sẽ được sử dụng, bất kể cái gì được trả về bởi / usr / sbin / mysqld --verbose --help | grep -A 1 "Tùy chọn mặc định"


4

Sử dụng MySQL Workbench, nó sẽ được hiển thị trong "Trạng thái máy chủ": nhập mô tả hình ảnh ở đây


3

Tôi thấy điều này thực sự hữu ích:

  1. Tìm quy trình MySQL trong Dịch vụ trong Control Panel -> Administration Tools
  2. Nhấp chuột phải và chọn Properties
  3. Nhấp và chọn Path to executablevà xem nếu nó chứa đường dẫn đếnmy.ini/my.cfg

1
Điều này làm việc cho tôi khi cài đặt Server 2008, cảm ơn.
delliottg

2

Một số máy chủ có nhiều phiên bản MySQL được cài đặt và định cấu hình. Đảm bảo rằng bạn đang xử lý phiên bản chính xác đang chạy bằng lệnh Unix:

ps -ax | grep mysql

1

Đối với những người chạy máy chủ windows với mysql là một dịch vụ, một cách dễ dàng để tìm hiểu tệp cấu hình bạn đang chạy là để mở bảng điều khiển dịch vụ, tìm dịch vụ mysql của bạn (trong trường hợp của tôi là 'MYSQL56'), nhấp chuột phải và nhấp vào thuộc tính . Sau đó, từ đây bạn có thể kiểm tra "Đường dẫn đến thực thi" sẽ có một defaults-filecông tắc chỉ đến nơi tập tin cấu hình của bạn.


1

Chỉ trong trường hợp bạn đang chạy mac, điều này cũng có thể đạt được bằng cách:

sudo dtruss mysqld 2>&1 | grep cnf

1

Nếu bạn đang ở trên Windows, bạn có thể sử dụng Sysiternals procmon . Mở nó và định cấu hình cài đặt bộ lọc như thế này, sau đó nhấp vào "Thêm". Bây giờ procmon sẽ theo dõi mysqld.

nhập mô tả hình ảnh ở đây

Bây giờ bắt đầu máy chủ mysql của bạn như bình thường. Procmon sẽ nắm bắt các hoạt động nền của mysql. Tìm kiếm "của tôi." trong khung kết quả procmon và bạn sẽ tìm thấy một cái gì đó như sau:

nhập mô tả hình ảnh ở đây

Rõ ràng là mysql lần lượt tìm kiếm một danh sách các tệp cấu hình. Trong trường hợp của tôi, nó được tìm thấy C:\mysql-5.7.19-winx64\my.cnfthành công vì vậy nó sử dụng cái này.


Điều này về cơ bản là tương đương với câu trả lời hàng đầu, cho các cửa sổ. cảm ơn bạn.
Aaron Wallentine

0

Tôi đã cài đặt mysql sử dụng bia cài đặt mysql

mysqld --verbose --help | less

Và nó cho thấy:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.