Câu trả lời:
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.
ps auxf
và 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 stop
hoặc mysqladmin -u root -p shutdown
. Sau đó chạy strace
vớ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
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?
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ở.
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
!includedir
. Tôi đang cố gắng tìm hiểu tại sao lệnh !includedir
trong /etc/mysql/my.cnf
tệp của tôi không hoạt động.
mysqld
với đường dẫn đầy đủ?!
Nếu bạn chạy mysql --verbose --help | less
nó sẽ cho bạn biết về dòng 11 .cnf
nó 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.
mysqld
thay vìmysql
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.
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
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
mặc định.
Một cách khác là sử dụng
mysqladmin variables
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ó:
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"
Tôi thấy điều này thực sự hữu ích:
Control Panel -> Administration Tools
Properties
Path to executable
và xem nếu nó chứa đường dẫn đếnmy.ini/my.cfg
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
Đố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-file
công tắc chỉ đến nơi tập tin cấu hình của bạn.
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.
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:
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.cnf
thành công vì vậy nó sử dụng cái này.