简体   繁体   English

如何找到 MySQL my.cnf 位置

[英]How do I find the MySQL my.cnf location

是否有一个 MySQL 命令来定位my.cnf配置文件,类似于 PHP 的phpinfo()定位它的php.ini

There is no internal MySQL command to trace this, it's a little too abstract.没有内部 MySQL 命令来跟踪它,它有点太抽象了。 The file might be in 5 (or more?) locations, and they would all be valid because they load cascading.该文件可能位于 5 个(或更多?)位置,并且它们都是有效的,因为它们加载级联。

  • /etc/my.cnf /etc/my.cnf
  • /etc/mysql/my.cnf /etc/mysql/my.cnf
  • $MYSQL_HOME/my.cnf $MYSQL_HOME/my.cnf
  • [datadir]/my.cnf [数据目录]/my.cnf
  • ~/.my.cnf ~/.my.cnf

Those are the default locations MySQL looks at.这些是 MySQL 查看的默认位置。 If it finds more than one, it will load each of them & values override each other (in the listed order, I think).如果它找到多个,它将​​加载它们中的每一个,并且值会相互覆盖(我认为按照列出的顺序)。 Also, the --defaults-file parameter can override the whole thing, so... basically, it's a huge pain in the butt.此外, --defaults-file参数可以覆盖整个事情,所以......基本上,这是一个巨大的痛苦。

But thanks to it being so confusing, there's a good chance it's just in /etc/my.cnf.但由于它如此令人困惑,它很有可能只是在 /etc/my.cnf 中。

(If you just want to see the values: SHOW VARIABLES , but you'll need the permissions to do so.) (如果您只想查看值: SHOW VARIABLES ,但您需要权限才能这样做。)


Run mysql --help and you will see:运行mysql --help你会看到:

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

在此处输入图像描述

You can actually "request" MySQL for a list of all locations where it searches for my.cnf (or my.ini on Windows).您实际上可以“请求” MySQL 以获取它搜索 my.cnf(或 Windows 上的 my.ini)的所有位置的列表。 It is not an SQL query though.虽然它不是 SQL 查询。 Rather, execute:而是执行:

$ mysqladmin --help

or, prior 5.7:或者,在 5.7 之前:

$ mysqld --help --verbose

In the very first lines you will find a message with a list of all my.cnf locations it looks for.在第一行中,您将找到一条消息,其中包含它要查找的所有 my.cnf 位置的列表。 On my machine it is:在我的机器上是:

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

Or, on Windows:或者,在 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

Note however, that it might be the case that there is no my.cnf file at any of these locations .但是请注意,这些位置中的任何一个都可能没有 my.cnf 文件 So, you can create the file on your own - use one of the sample config files provided with MySQL distribution (on Linux - see /usr/share/mysql/*.cnf files and use whichever is appropriate for you - copy it to /etc/my.cnf and then modify as needed).因此,您可以自己创建文件 - 使用 MySQL 发行版提供的示例配置文件之一(在 Linux 上 - 请参阅/usr/share/mysql/*.cnf文件并使用适合您的文件 - 将其复制到/etc/my.cnf然后根据需要进行修改)。

Also, note that there is also a command line option --defaults-file which may define custom path to my.cnf or my.ini file.另外,请注意,还有一个命令行选项--defaults-file可以定义 my.cnf 或 my.ini 文件的自定义路径。 For example, this is the case for MySQL 5.5 on Windows - it points to a my.ini file in the data directory, which is not normally listed with mysqld --help --verbose .例如,Windows 上的 MySQL 5.5 就是这种情况——它指向数据目录中的 my.ini 文件,该文件通常不会与mysqld --help --verbose一起列出。 On Windows - see service properties to find out if this is the case for you.在 Windows 上 - 查看服务属性以了解您是否属于这种情况。

Finally, check the https://dev.mysql.com/doc/refman/8.0/en/option-files.html - it is described there in more details.最后,检查https://dev.mysql.com/doc/refman/8.0/en/option-files.html - 那里有更详细的描述。

你总是可以在终端中运行 find 。

find / -name my.cnf
mysql --help | grep /my.cnf | xargs ls

will tell you where my.cnf is located on Mac/Linux会告诉你my.cnf在 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

In this case, it is in /etc/mysql/my.cnf在这种情况下,它在/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

In this case, it is in /usr/local/etc/my.cnf在这种情况下,它在/usr/local/etc/my.cnf

You can use :您可以使用 :

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

This might work:这可能有效:

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

on my machine this outputs:在我的机器上输出:

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)

So it looks like /etc/mysql/my.cnf is the one since it stat64() and read() were successful.所以看起来 /etc/mysql/my.cnf 是一个,因为它 stat64() 和 read() 是成功的。

By default, mysql search my.cnf first at /etc folder.默认情况下,mysql 首先在 /etc 文件夹中搜索 my.cnf。 If there is no /etc/my.cnf file inside this folder, I advise you to create new one in this folder as indicated by the documentation ( https://dev.mysql.com/doc/refman/5.6/en/option-files.html ).如果此文件夹中没有 /etc/my.cnf 文件,我建议您按照文档( https://dev.mysql.com/doc/refman/5.6/en/option的指示在此文件夹中创建一个新文件-files.html )。

You can also search for existing my.cnf furnished by your mysql installation.您还可以搜索 mysql 安装提供的现有 my.cnf。 You can launch the following command您可以启动以下命令

sudo find / -name "*.cnf"

You can use the following configuration file with myisam table and without innodb mysql support (from port installation of mysql on mac os x maverick).您可以将以下配置文件与 myisam 表一起使用,而无需 innodb mysql 支持(来自 mac os x maverick 上 mysql 的端口安装)。 Please verify each command in this configuration file.请验证此配置文件中的每个命令。

# 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

对于 Ubuntu 16:/etc/mysql/mysql.conf.d/mysqld.cnf

As noted by konyak you can get the list of places mysql will look for your my.cnf file by running mysqladmin --help .正如 konyak 所指出的,您可以通过运行mysqladmin --help来获取 mysql 将查找您的my.cnf文件的位置列表。 Since this is pretty verbose you can get to the part you care about quickly with:由于这非常冗长,您可以通过以下方式快速找到您关心的部分:

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

This will give you output similar to:这将为您提供类似于以下内容的输出:

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

Depending on how you installed mysql it is possible that none of these files are present yet.根据您安装 mysql 的方式,这些文件可能都不存在。 You can cat them in order to see how your config is being built and create your own my.cnf if needed at your preferred location.您可以cat它们进行分类以查看您的配置是如何构建的,如果需要,可以在您喜欢的位置创建您自己的my.cnf

I don't know how you've setup MySQL on your Linux environment but have you checked?我不知道您是如何在 Linux 环境中设置 MySQL 的,但您检查了吗?

  • /etc/my.cnf /etc/my.cnf

Try running mysqld --help --verbose | grep my.cnf | tr " " "\n"尝试运行mysqld --help --verbose | grep my.cnf | tr " " "\n" mysqld --help --verbose | grep my.cnf | tr " " "\n"

Output will be something like输出将类似于

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

您也可以运行此命令。

mysql --help | grep cnf

If you're on a Mac with Homebrew, use如果您使用的是带有 Homebrew 的 Mac,请使用

brew info mysql酿造信息mysql

You'll see something like你会看到类似的东西

$ 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) *

That last line is the INSTALLERDIR per the MySQL docs最后一行是MySQL 文档中的INSTALLERDIR

Be aware that although mariadDB loads configuration details from the various my.cnf files as listed in the other answers here, it can also load them from other files with different names.请注意,尽管 mariadDB 从此处其他答案中列出的各种 my.cnf 文件加载配置详细信息,但它也可以从具有不同名称的其他文件加载它们。

That means that if you make a change in one of the my.cnf files, it may get overwritten by another file of a different name.这意味着如果您对其中一个 my.cnf 文件进行更改,它可能会被另一个名称不同的文件覆盖。 To make the change stick, you need to change it in the right (last loaded) config file - or, maybe, change it in all of them.要使更改生效,您需要在正确的(最后加载的)配置文件中进行更改 - 或者,也许,在所有这些文件中进行更改。

So how do you find all the config files that might be loaded?那么如何找到所有可能被加载的配置文件呢? Instead of looking for my.cnf files, try running:不要寻找 my.cnf 文件,而是尝试运行:

grep -r datadir /etc/mysql/

This will find all the places in which datadir is mentioned.这将找到所有提到 datadir 的地方。 In my case, it produces this answer:就我而言,它产生了这个答案:

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

When I edit that file (/etc/mysql/mariadb.conf.d/50-server.cnf) to change the value for datadir, it works, whereas changing it in my.cnf does not.当我编辑该文件 (/etc/mysql/mariadb.conf.d/50-server.cnf) 以更改 datadir 的值时,它可以工作,而在 my.cnf 中更改它不会。 So whatever option you are wanting to change, try looking for it this way.所以无论你想改变什么选项,试着用这种方式寻找它。

发现我的使用

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

Answered for only MySQL Workbench users,仅回答 MySQL Workbench 用户,

在此处输入图像描述

所有很棒的建议,就我而言,我在这些位置都没有找到它,但是在/usr/share/mysql ,我有一个 RHEL 虚拟机并且我安装了mysql5.5

I installed xampp bundle with apache, php and mysql in ubuntu .我在ubuntu中安装了带有apache, php and mysql的 xampp 包。 There my.cnf file is located in /opt/lampp/etc/ folder. my.cnf文件位于/opt/lampp/etc/文件夹中。 Hope it'll help somebody.希望它会帮助某人。

You will have to look through the various locations depending on your version of MySQL.您将不得不根据您的 MySQL 版本查看各个位置。

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

If you are on Debian/Ubuntu system and already equipped with modern versions of the database (everything from 5.7 up, also true for mysql 8) the best way to locate the actual .cnf file I have found is:如果您在 Debian/Ubuntu 系统上并且已经配备了现代版本的数据库(从 5.7 开始,对于 mysql 8 也是如此),找到我找到的实际.cnf文件的最佳方法是:

sudo update-alternatives --config my.cnf

You should see a output like this:你应该看到这样的输出:

There are 3 choices for the alternative my.cnf (providing /etc/mysql/my.cnf).

  Selection    Path                        Priority   Status
------------------------------------------------------------
  0            /etc/mysql/mariadb.cnf       500       auto mode
  1            /etc/mysql/mariadb.cnf       500       manual mode
  2            /etc/mysql/my.cnf.fallback   100       manual mode
* 3            /etc/mysql/mysql.cnf         300       manual mode

There are two lines in /etc/mysql/mysql.cnf that it makes sense to pay attention to: /etc/mysql/mysql.cnf中有两行值得注意:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

MySQL will go watching for all .cnf files in /etc/mysql/conf.d/ , then all files in /etc/mysql/mysql.conf.d/ MySQL 将监视/etc/mysql/mysql.conf.d/中的所有.cnf文件,然后是/etc/mysql/conf.d/中的所有文件

Happy tuning!快乐调音!

Another option is to use the whereis command.另一种选择是使用 whereis 命令。

Eg whereis my.cnf例如 whereis my.cnf

在 Ubuntu 上(直接编辑):

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

In case you are in a VPS and are trying to edit a my.cnf on an already running server you could try:如果您在 VPS 中并尝试在已运行的服务器上编辑 my.cnf,您可以尝试:

ps aux | grep mysql

You will be show the parameters the mysql command is being run and where the --defaults-file points to您将看到正在运行 mysql 命令的参数以及--defaults-file指向的位置

Note that your server might be running more than one MySQL/MariaDB server's.请注意,您的服务器可能正在运行多个 MySQL/MariaDB 服务器。 If you see a line without --defaults-file parameter, that instance might be retrieving the configuration from the .cnf's that are mentioned on mysqladmin --help as others have pointed out.如果您看到没有--defaults-file参数的行,则该实例可能正在从mysqladmin --help上提到的 .cnf 中检索配置,正如其他人所指出的那样。

You can find my.cnf or any other file with find command:您可以使用 find 命令找到 my.cnf 或任何其他文件:

find / -name my.cnf (or any other file name)
  1. find is a command find 是一个命令
  2. / (slash) is a path /(斜杠)是路径
  3. my.cnf is a file name my.cnf 是文件名

If you are using MAMP, access Templates > MySQL (my.cnf) > [version]如果您使用的是 MAMP,请访问 Templates > MySQL (my.cnf) > [version]

If you are running MAMP windowless you may need to customize the toolbar using the Customize button.如果您正在运行 MAMP 无窗口,您可能需要使用自定义按钮自定义工具栏。

MAMP PRO 模板菜单

对我来说,我有“ENGINE=MyISAM”类型的表,一旦我将它更改为“ENGINE=InnoDB”,它就可以在 Azure App Service 上的 PhpMyAdmin 中工作:)

It depend on your access right but for me this work on phpmyadmin sql console这取决于您的访问权限,但对我来说,这项工作在 phpmyadmin sql 控制台上

SHOW VARIABLES;显示变量;

then after to change some variables you can do然后在改变一些变量之后你可以做

SET GLOBAL max_connections = 1000;设置全球最大连接数 = 1000;

or或者

SET @@GLOBAL.max_connections = 1000;设置@@GLOBAL.max_connections = 1000;

give a try试一下

MySQL 配置文件:

/etc/my.cnf

尝试

mysql --verbose --help | grep -A 1 "Default options"

For MariaDB 10.5 on Ubuntu 20.04.4 LTS (Focal Fossa) :对于Ubuntu 20.04.4 LTS(Focal Fossa)上的MariaDB 10.5

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM