Câu trả lời:
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.
Đó 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-file
tham 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.)
/etc/init.d/mysqld restart
.
my.cnf
được đặt tại /etc/mysql/my.cnf
.
mysql --help
và 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
etc/mysql/my.cnf
trỏ đến một symlink khác /etc/alternatives/my.cnf
trỏ đến etc/mysql/mysql.cnf
.
ls /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
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/*.cnf
tệ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.cnf
và 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.
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.
mysqld --help --verbose
mâ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.
Bạn luôn có thể chạy tìm trong một thiết bị đầu cuối.
find / -name my.cnf
find / -name my.cnf
là đặ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_HOME
vào một thiết bị đầu cuối không
~/.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
.
Bạn có thể dùng :
locate my.cnf
whereis my.cnf
find . -name my.cnf
whereis
sẽ 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 ý.
Đ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.
mysql --help | grep /my.cnf | xargs ls
sẽ cho bạn biết my.cnf
vị 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
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
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.cnf
tệ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 cat
chúng để xem cấu hình của bạn đang được xây dựng và tạo riêng my.cnf
nếu cần tại vị trí ưa thích của bạn.
Đối với Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
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?
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
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
Một tùy chọn khác là sử dụng lệnh whereis.
Ví dụ:
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
Bạn cũng có thể chạy lệnh này.
mysql --help | grep cnf
grep
bằng findstr
: mysql --help | findstr cnf
và nó đã làm nên điều kỳ diệu
Trên Ubuntu (chỉnh sửa trực tiếp):
$ sudo nano /etc/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
Tôi đã cài đặt gói xampp với apache, php and mysql
trong Ubuntu . Có my.cnf
tập tin được đặt trong /opt/lampp/etc/
thư mục. Hy vọng nó sẽ giúp được ai đó.
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-file
tham số, thì trường hợp đó có thể đang truy xuất cấu hình từ .cnf được đề cập mysqladmin --help
như những người khác đã chỉ ra.
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.
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
locate my.cnf
để tìm tất cả các tên tệp như vậy