Làm cách nào để tìm vị trí MySQL my.cnf


398

Có lệnh MySQL để định vị my.cnftệp cấu hình, tương tự như cách phpinfo() định vị của PHP php.inikhông?


1
trên Ubuntu, bạn có thể sử dụng lệnh locate my.cnfđể tìm tất cả các tên tệp như vậy
evilReiko

Câu trả lời:


571

Không có lệnh MySQL nội bộ để theo dõi điều này, nó hơi quá trừu tượng. Tệp có thể ở 5 vị trí (hoặc nhiều hơn?) Và tất cả chúng đều hợp lệ vì chúng tải xếp tầng.

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $ MYSQL_HOME / my.cnf
  • [datadir] /my.cnf
  • ~ / .my.cnf

Đó là những vị trí mặc định mà MySQL nhìn vào. Nếu nó tìm thấy nhiều hơn một, nó sẽ tải từng giá trị & giá trị ghi đè lên nhau (theo thứ tự được liệt kê, tôi nghĩ vậy). Ngoài ra, --defaults-filetham số có thể ghi đè lên toàn bộ, vì vậy ... về cơ bản, đó là một nỗi đau rất lớn ở mông.

Nhưng nhờ có nó rất khó hiểu, rất có thể nó chỉ nằm trong /etc/my.cnf.

(nếu bạn chỉ muốn xem các giá trị : SHOW VARIABLES, nhưng bạn sẽ cần quyền để làm như vậy.)


5
Đảm bảo khởi động lại máy chủ MySQL sau khi chỉnh sửa my.cnf : /etc/init.d/mysqld restart.
Danijel

4
Đối với tôi (AWS EC2 Ubuntu), my.cnfđược đặt tại /etc/mysql/my.cnf.
SparkAndShine

58
Chạy mysql --helpvà bạn sẽ thấy Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
Hanxue

2
trong trường hợp của tôi, có một symlink etc/mysql/my.cnftrỏ đến một symlink khác /etc/alternatives/my.cnftrỏ đến etc/mysql/mysql.cnf.
Martin Schneider

3
ls /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
Joshua Robinson

194

Bạn thực sự có thể "yêu cầu" MySQL cho một danh sách tất cả các vị trí nơi nó tìm kiếm my.cnf (hoặc my.ini trên Windows). Nó không phải là một truy vấn SQL mặc dù. Thay vào đó, thực hiện:

$ mysqladmin --help

hoặc, trước 5.7:

$ mysqld --help --verbose

Trong những dòng đầu tiên, bạn sẽ tìm thấy một thông báo với một danh sách tất cả các vị trí my.cnf mà nó tìm kiếm. Trên máy của tôi, nó là:

Default options are read from the following files in the given order:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf

Hoặc, trên Windows:

Default options are read from the following files in the given order:
C:\Windows\my.ini
C:\Windows\my.cnf
C:\my.ini
C:\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf

Tuy nhiên, xin lưu ý rằng có thể không có tệp my.cnf tại bất kỳ vị trí nào trong số này . Vì vậy, bạn có thể tự tạo tệp - sử dụng một trong các tệp cấu hình mẫu được cung cấp với bản phân phối MySQL (trên Linux - xem /usr/share/mysql/*.cnftệp và sử dụng bất kỳ tệp nào phù hợp với bạn - sao chép tệp /etc/my.cnfvà sau đó sửa đổi khi cần).

Ngoài ra, lưu ý rằng cũng có một tùy chọn dòng lệnh--defaults-file có thể xác định đường dẫn tùy chỉnh đến tệp my.cnf hoặc my.ini. Ví dụ, đây là trường hợp của MySQL 5.5 trên Windows - nó trỏ đến tệp my.ini trong thư mục dữ liệu, thường không được liệt kê với mysqld --help --verbose. Trên Windows - xem thuộc tính dịch vụ để tìm hiểu xem đây có phải là trường hợp dành cho bạn không.

Cuối cùng, hãy kiểm tra https://dev.mysql.com/doc/refman/8.0/en/option-files.html - nó được mô tả ở đó chi tiết hơn.


Có vẻ đầy hứa hẹn nhưng trên distro của tôi (opencsw.org), không có mysqld. Nó chạy mysqld_safe. "mysqld_safe --verbose --help" không được công nhận.
Lawrence I. Siden

Khi tôi chạy nó, tôi nhận được điều này: Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf - Tôi mong đợi 2 tệp đầu tiên theo thứ tự ngược lại.
yitwail

Thông tin được đăng bởi mysqld --help --verbosemâu thuẫn với những gì được nêu trong dev.mysql.com/doc/refman/5.5/en/option-files.html . Theo kinh nghiệm "gần đây như ngày hôm nay" của tôi với phiên bản 5.6, thông tin trong trang web là chính xác và phù hợp nhất. Mức độ ưu tiên của vị trí tệp được cung cấp bởi lệnh trợ giúp là sai lệch và sẽ dẫn đến kết quả âm tính.
barista nghiệp dư

Trên Fedora cũ của tôi, đó là mysql --help --verbose
Danny Schoemann

1
Lưu ý rằng tôi phải tăng kích thước bộ đệm cmd lên 3000 để có thể thực sự nhìn thấy các dòng đầu tiên, nếu không, văn bản chỉ đơn giản là bị ghi đè. Khi họ nói "dài dòng", rõ ràng, họ có nghĩa như vậy.
Wesley Smith

61

Bạn luôn có thể chạy tìm trong một thiết bị đầu cuối.

find / -name my.cnf

1
đó là một cách khó khăn :( Có bất kỳ lệnh mysql nào như phpinfo () để biết vị trí tệp cấu hình không?
robinmag

find / -name my.cnflà đặt cược tốt nhất của bạn, nhưng bạn cũng có thể kiểm tra thư mục chính của mình và /etc/mysql/my.conf Bạn cũng có thể xem MYSQL_HOME của mình có được đặt bằng cách nhập echo $MYSQL_HOMEvào một thiết bị đầu cuối không
Dyllon

11
Wow, điều đó sẽ mất mãi mãi trên hầu hết các máy. Hầu hết các linux hiện đại đã cài đặt định vị và miễn là cập nhậtb được chạy thường xuyên, bạn có thể thực hiện: xác định vị trí my.cnf | ít hơn
Lâu đài bóng tối

6
Điều này chỉ hiển thị những tập tin được đặt tên my.cnf. Nó không cho bạn biết cái nào trong quá trình mysqld được tìm thấy và mở ra.
Lawrence I. Siden

3
Điều này không tìm thấy ~/.my.cnf- lưu ý dấu chấm hàng đầu trong tên tệp. Ngoài ra, việc tìm kiếm trên toàn bộ hệ thống tệp thường sẽ tạo ra các lỗi "Quyền bị từ chối" trừ khi bạn đã root. Vì vậy, lệnh find nên được find / -name '*my.cnf' 2>/dev/null.
Chris Johnson

32

Bạn có thể dùng :

locate my.cnf
whereis my.cnf
find . -name my.cnf

3
Mỏ tuyệt vời đã có tại /etc/mysql/my.cnf trong Ubuntu 12.0.1 trên EC2
Maziyar

1
whereissẽ không làm việc ở đây; nó tìm kiếm các vị trí tương ứng với một lệnh và không thể tìm thấy các tệp tùy ý.
Đánh dấu Amery

1
Và updateb để cập nhật danh sách định vị đi qua - nếu my.cnf không được lập chỉ mục
WoodyDRN

23

Điều này có thể làm việc:

strace mysql ";" 2>&1  | grep cnf

trên máy của tôi, kết quả này:

stat64("/etc/my.cnf", 0xbf9faafc)       = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4271, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3
read(3, "# /etc/mysql/my.cnf: The global "..., 4096) = 4096
stat64("/home/xxxxx/.my.cnf", 0xbf9faafc) = -1 ENOENT (No such file or directory)

Vì vậy, có vẻ như /etc/mysql/my.cnf là một trong số đó vì stat64 () và read () đã thành công.


18
mysql --help | grep /my.cnf | xargs ls

sẽ cho bạn biết my.cnfvị trí của Mac / Linux

ls: cannot access '/etc/my.cnf': No such file or directory
ls: cannot access '~/.my.cnf': No such file or directory
 /etc/mysql/my.cnf

Trong trường hợp này, nó là trong /etc/mysql/my.cnf

ls: /etc/my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
ls: ~/.my.cnf: No such file or directory
/usr/local/etc/my.cnf

Trong trường hợp này, nó là trong /usr/local/etc/my.cnf


Tại sao đây không phải là câu trả lời?
Nikhil Wagh

13

Theo mặc định, mysql tìm kiếm my.cnf đầu tiên tại thư mục / etc. Nếu không có tệp /etc/my.cnf trong thư mục này, tôi khuyên bạn nên tạo tệp mới trong thư mục này theo chỉ định của tài liệu ( https://dev.mysql.com/doc/refman/5.6/en/option -files.html ).

Bạn cũng có thể tìm kiếm my.cnf hiện có được cung cấp bởi cài đặt mysql của bạn. Bạn có thể khởi chạy lệnh sau

sudo find / -name "*.cnf"

Bạn có thể sử dụng tệp cấu hình sau với bảng myisam và không có hỗ trợ mysod innodb (từ cài đặt cổng của mysql trên mac os x maverick). Vui lòng xác minh từng lệnh trong tệp cấu hình này.

# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password   = your_password
port        = 3306
socket      = /opt/local/var/run/mysql5/mysqld.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port        = 3306
socket      = /opt/local/var/run/mysql5/mysqld.sock
skip-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
# 
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin

# binary logging format - mixed recommended
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id   = 1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /opt/local/var/db/mysql5
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /opt/local/var/db/mysql5
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 256M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

9

Theo ghi nhận của konyak, bạn có thể lấy danh sách các địa điểm mysql sẽ tìm my.cnftệp của bạn bằng cách chạy mysqladmin --help. Vì điều này khá dài dòng nên bạn có thể nhanh chóng đến phần bạn quan tâm:

$ mysqladmin --help | grep -A1 'Default options'

Điều này sẽ cung cấp cho bạn đầu ra tương tự như:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

Tùy thuộc vào cách bạn cài đặt mysql, có thể không có tệp nào trong số này hiện diện. Bạn có thể sử dụng catchúng để xem cấu hình của bạn đang được xây dựng và tạo riêng my.cnfnếu cần tại vị trí ưa thích của bạn.


7

Đối với Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf


1
Nếu bạn muốn thay đổi cấu hình mysql trong ubfox 16.04 Chỉnh sửa tệp sau For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
Piyush Bansal

6

Tôi không biết bạn đã thiết lập MySQL trên môi trường Linux của mình như thế nào nhưng bạn đã kiểm tra chưa?

  • /etc/my.cnf

5

Hãy thử chạy mysqld --help --verbose | grep my.cnf | tr " " "\n"

Đầu ra sẽ giống như

/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/etc/my.cnf
~/.my.cnf

Đó là đầu ra tôi nhận được nhưng dường như không có liên quan đến thể hiện đang chạy. Không có tệp nào trong số đó tồn tại.
dùng3783243

4

Nếu bạn đang dùng Mac với Homebrew, hãy sử dụng

thông tin bia

Bạn sẽ thấy một cái gì đó như

$ brew info mysql
mysql: stable 5.6.13 (bottled)
http://dev.mysql.com/doc/refman/5.6/en/
Conflicts with: mariadb, mysql-cluster, percona-server
/usr/local/Cellar/mysql/5.6.13 (9381 files, 354M) *

Dòng cuối cùng là INSTALLERDIR theo tài liệu MySQL


3

Tìm thấy của tôi bằng cách sử dụng

mysqld --help --verbose | grep my.cnf

2

Một tùy chọn khác là sử dụng lệnh whereis.

Ví dụ:


1
Bạn có thể sẽ tốt hơn với 'định vị' nếu hệ thống hỗ trợ nó.
drobert

2

Đã trả lời cho chỉ người dùng MySQL Workbench,

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


Đã xảy ra lỗi "Vị trí của tệp cấu hình MySQL (ví dụ: my.cnf) không được chỉ định"
Sukesh Kotian

2

Tất cả các đề xuất tuyệt vời, trong trường hợp của tôi, tôi đã không tìm thấy nó ở bất kỳ vị trí nào trong số đó, nhưng trong đó /usr/share/mysql, tôi có một máy ảo RHEL và tôi đã cài đặtmysql5.5


2

Bạn sẽ phải xem qua các vị trí khác nhau tùy thuộc vào phiên bản MySQL của bạn.

mysqld --help -verbose | grep my.cnf

For Homebrew:
/usr/local/Cellar/mysql/8.0.11/bin/mysqld (mysqld 8.0.11)

Default possible locations:
/etc/my.cnf
/etc/mysql/my.cnf
~/.my.cnf

Found mine here: 
/usr/local/etc/my.cnf

2

Bạn cũng có thể chạy lệnh này.

mysql --help | grep cnf


Awsome!, Trên các cửa sổ tôi phải thay thế grepbằng findstr: mysql --help | findstr cnfvà nó đã làm nên điều kỳ diệu
Laenka-Oss

1

Trên Ubuntu (chỉnh sửa trực tiếp):

$ sudo nano /etc/mysql.conf.d/mysqld.cnf

trên Ubuntu 18, cái này hoạt động với tôi: /etc/mysql/mysql.conf.d/mysqld.cnf
user9869932

0

Tôi đã cài đặt gói xampp với apache, php and mysqltrong Ubuntu . Có my.cnftập tin được đặt trong /opt/lampp/etc/thư mục. Hy vọng nó sẽ giúp được ai đó.


0

Nếu bạn đang sử dụng MAMP, hãy truy cập Mẫu> MySQL (my.cnf)> [phiên bản]

Nếu bạn đang chạy MAMP windowless, bạn có thể cần tùy chỉnh thanh công cụ bằng nút Tùy chỉnh.

Menu mẫu MAMP PRO


0

đối với tôi, đó là tôi đã có loại bảng "Engine = MyISAM", khi tôi đổi nó thành "Engine = InnoDB", nó đã hoạt động :) trong PhpMyAdmin trên Dịch vụ ứng dụng Azure :)


0

Trong trường hợp bạn đang ở trong VPS và đang cố gắng chỉnh sửa my.cnf trên máy chủ đã chạy, bạn có thể thử:

ps aux | grep mysql

Bạn sẽ được hiển thị các tham số mà lệnh mysql đang được chạy và nơi các --defaults-fileđiểm tới

Lưu ý rằng máy chủ của bạn có thể đang chạy nhiều hơn một máy chủ MySQL / MariaDB. Nếu bạn thấy một dòng không có --defaults-filetham số, thì trường hợp đó có thể đang truy xuất cấu hình từ .cnf được đề cập mysqladmin --helpnhư những người khác đã chỉ ra.


0

Xin lưu ý rằng mặc dù mariadDB tải các chi tiết cấu hình từ các tệp my.cnf khác nhau như được liệt kê trong các câu trả lời khác ở đây, nhưng nó cũng có thể tải chúng từ các tệp khác với các tên khác nhau.

Điều đó có nghĩa là nếu bạn thực hiện thay đổi trong một trong các tệp my.cnf, nó có thể bị ghi đè bởi một tệp khác có tên khác. Để tạo thanh thay đổi, bạn cần thay đổi nó trong tệp cấu hình bên phải (được tải lần cuối) - hoặc, có thể, thay đổi nó trong tất cả chúng.

Vậy làm thế nào để bạn tìm thấy tất cả các tập tin cấu hình có thể được tải? Thay vì tìm kiếm các tập tin my.cnf, hãy thử chạy:

grep -r datadir /etc/mysql/

Điều này sẽ tìm thấy tất cả những nơi mà datadir được đề cập. Trong trường hợp của tôi, nó tạo ra câu trả lời này:

/etc/mysql/mariadb.conf.d/50-server.cnf:datadir     = /var/lib/mysql 

Khi tôi chỉnh sửa tệp đó (/etc/mysql/mariadb.conf.d/50-server.cnf) để thay đổi giá trị cho datadir, nó hoạt động, trong khi thay đổi nó trong my.cnf thì không. Vì vậy, bất cứ lựa chọn nào bạn muốn thay đổi, hãy thử tìm kiếm nó theo cách này.


0

Nó phụ thuộc vào quyền truy cập của bạn nhưng đối với tôi công việc này trên bảng điều khiển sql phpmyadmin

BIỂU TƯỢNG BIỂN;

sau đó để thay đổi một số biến bạn có thể làm

THIẾT LẬP max_connections GLOBAL = 1000;

hoặc là

SET @@ GLOBAL.max_connections = 1000;

hãy thử đi

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.