Wie finde ich den Speicherort von MySQL my.cnf?

398

Gibt es einen MySQL-Befehl zum Auffinden der my.cnfKonfigurationsdatei, ähnlich wie phpinfo() PHPs sie finden php.ini?

Robinmag
quelle
1
Auf Ubuntu können Sie den Befehl verwenden, locate my.cnfum herauszufinden, wo sich all diese Dateinamen befinden
evilReiko

Antworten:

571

Es gibt keinen internen MySQL-Befehl, um dies zu verfolgen, es ist etwas zu abstrakt. Die Datei befindet sich möglicherweise an 5 (oder mehr?) Speicherorten, und alle sind gültig, da sie kaskadierend geladen werden.

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

Dies sind die Standardspeicherorte, die MySQL betrachtet. Wenn mehr als einer gefunden wird, wird jeder von ihnen geladen und die Werte überschreiben sich gegenseitig (in der angegebenen Reihenfolge, glaube ich). Außerdem kann der --defaults-fileParameter das Ganze überschreiben, also ... im Grunde ist es ein großer Schmerz im Hintern.

Aber da es so verwirrend ist, besteht eine gute Chance, dass es nur in /etc/my.cnf ist.

(Wenn Sie nur die Werte anzeigen möchten, SHOW VARIABLESbenötigen Sie jedoch die entsprechenden Berechtigungen.)

Tadamson
quelle
5
Stellen Sie sicher, dass Sie den MySQL-Server nach dem Bearbeiten von my.cnf neu starten : /etc/init.d/mysqld restart.
Danijel
4
Für mich (AWS EC2 Ubuntu) my.cnfbefindet sich in /etc/mysql/my.cnf.
SparkAndShine
58
Laufen mysql --helpSie und Sie werden sehen 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
In meinem Fall gab es einen Symlink, der etc/mysql/my.cnfauf einen anderen Symlink zeigte, /etc/alternatives/my.cnfder auf zeigt 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

Sie können MySQL tatsächlich nach einer Liste aller Speicherorte "anfordern", an denen nach my.cnf (oder my.ini unter Windows) gesucht wird. Es ist jedoch keine SQL-Abfrage. Führen Sie stattdessen Folgendes aus:

$ mysqladmin --help

oder vor 5.7:

$ mysqld --help --verbose

In den ersten Zeilen finden Sie eine Nachricht mit einer Liste aller gesuchten my.cnf-Speicherorte. Auf meiner Maschine ist es:

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

Oder unter 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

Beachten Sie jedoch, dass an keinem dieser Speicherorte eine my.cnf-Datei vorhanden sein kann . Sie können die Datei also selbst erstellen - verwenden Sie eine der mit der MySQL-Distribution bereitgestellten Beispielkonfigurationsdateien (unter Linux - sehen Sie sich die /usr/share/mysql/*.cnfDateien an und verwenden Sie die für Sie geeignete Datei - kopieren Sie sie in /etc/my.cnfund ändern Sie sie nach Bedarf).

Beachten Sie außerdem, dass es auch eine Befehlszeilenoption gibt,--defaults-file die einen benutzerdefinierten Pfad zur Datei my.cnf oder my.ini definieren kann. Dies ist beispielsweise bei MySQL 5.5 unter Windows der Fall - es verweist auf eine my.ini-Datei im Datenverzeichnis, die normalerweise nicht mit aufgeführt ist mysqld --help --verbose. Unter Windows - Sehen Sie in den Diensteigenschaften nach, ob dies bei Ihnen der Fall ist.

Überprüfen Sie abschließend die https://dev.mysql.com/doc/refman/8.0/en/option-files.html - sie wird dort ausführlicher beschrieben.

Timur
quelle
Sah vielversprechend aus, aber in meiner Distribution (opencsw.org) gibt es keine mysqld. Es läuft mysqld_safe. "mysqld_safe --verbose --help" wird nicht erkannt.
Lawrence I. Siden
Als ich es ausführte, bekam ich Folgendes: Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf - Ich erwartete die ersten 2 Dateien in umgekehrter Reihenfolge.
Yitwail
Die von veröffentlichten Informationen mysqld --help --verbosewidersprechen den Angaben in dev.mysql.com/doc/refman/5.5/en/option-files.html . Nach meiner Erfahrung mit Version 5.6 sind die Informationen auf der Website am korrektesten und relevantesten. Die Priorität des durch den Befehl help angegebenen Speicherorts für Dateien ist irreführend und führt zu negativen Ergebnissen.
Amateur Barista
Auf meinem alten Fedora war es mysql --help --verbose
Danny Schoemann
1
Beachten Sie, dass ich die Größe des cmd-Puffers auf 3000 erhöhen musste, um die ersten Zeilen tatsächlich sehen zu können. Andernfalls wurde der Text einfach überschrieben. Wenn sie "wortreich" sagen, meinen sie es anscheinend so.
Wesley Smith
61

Sie können find immer in einem Terminal ausführen.

find / -name my.cnf
Dyllon
quelle
1
Es ist der schwierige Weg :( Gibt es einen MySQL-Befehl wie phpinfo (), um den Speicherort der Konfigurationsdatei zu ermitteln?
Robinmag
find / -name my.cnfist Ihre beste Wahl, aber Sie können auch Ihr Home-Verzeichnis und /etc/mysql/my.conf überprüfen. Sie können auch sehen, ob Ihr MYSQL_HOME eingestellt ist, indem Sie echo $MYSQL_HOMEein Terminal
eingeben
11
Wow, das würde auf den meisten Maschinen ewig dauern. In den meisten modernen Linux-Versionen ist locate installiert. Solange updateb regelmäßig ausgeführt wird, können Sie Folgendes ausführen: find my.cnf | weniger
Dark Castle
6
Dies zeigt nur, welche Dateien my.cnf heißen. Es sagt Ihnen nicht, welche auf dem mysqld-Prozess gefunden und geöffnet wurden.
Lawrence I. Siden
3
Dies wird nicht gefunden ~/.my.cnf- beachten Sie den führenden Punkt im Dateinamen. Wenn Sie auch eine Suche über das gesamte Dateisystem ausführen, werden in der Regel Fehler mit "Berechtigung verweigert" generiert, es sei denn, Sie sind Root. Der Befehl find sollte also lauten find / -name '*my.cnf' 2>/dev/null.
Chris Johnson
32

Sie können verwenden:

locate my.cnf
whereis my.cnf
find . -name my.cnf
Satish Sharma
quelle
3
Große Mine war bei /etc/mysql/my.cnf in Ubuntu 12.0.1 auf EC2
Maziyar
1
whereiswird hier nicht funktionieren; Es sucht nach den Speicherorten, die einem Befehl entsprechen , und kann keine beliebigen Dateien finden.
Mark Amery
1
Und aktualisiertb, um die Liste zu aktualisieren, geht durch - wenn my.cnf nicht indiziert war
WoodyDRN
23

Dies könnte funktionieren:

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

Auf meinem Computer wird Folgendes ausgegeben:

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)

Es sieht also so aus, als ob /etc/mysql/my.cnf derjenige ist, da stat64 () und read () erfolgreich waren.

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

wird Ihnen sagen, wo my.cnfsich auf Mac / Linux befindet

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 diesem Fall ist es in /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 diesem Fall ist es in /usr/local/etc/my.cnf

Kimbaudi
quelle
Warum ist das nicht die Antwort?
Nikhil Wagh
13

Standardmäßig durchsucht MySQL zuerst my.cnf im Ordner / etc. Wenn sich in diesem Ordner keine Datei /etc/my.cnf befindet, empfehle ich Ihnen, eine neue Datei in diesem Ordner zu erstellen, wie in der Dokumentation angegeben ( https://dev.mysql.com/doc/refman/5.6/en/option) -files.html ).

Sie können auch nach vorhandenen my.cnf suchen, die von Ihrer MySQL-Installation bereitgestellt wurden. Sie können den folgenden Befehl starten

sudo find / -name "*.cnf"

Sie können die folgende Konfigurationsdatei mit myisam-Tabelle und ohne innodb-MySQL-Unterstützung verwenden (von der Port-Installation von MySQL auf Mac OS X Maverick). Bitte überprüfen Sie jeden Befehl in dieser Konfigurationsdatei.

# 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
Ranaivo
quelle
9

Wie von konyak festgestellt, können Sie die Liste der Orte abrufen, an denen mysql nach Ihrer my.cnfDatei sucht, indem Sie sie ausführen mysqladmin --help. Da dies ziemlich ausführlich ist, können Sie schnell zu dem Teil gelangen, den Sie interessieren:

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

Dadurch erhalten Sie eine Ausgabe ähnlich der folgenden:

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

Abhängig davon, wie Sie MySQL installiert haben, ist möglicherweise noch keine dieser Dateien vorhanden. Sie können catsie verwenden, um zu sehen, wie Ihre Konfiguration erstellt wird, und my.cnfbei Bedarf Ihre eigene Konfiguration an Ihrem bevorzugten Standort erstellen .

Matt Sanders
quelle
7

Für Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf

Schmied
quelle
1
Wenn Sie die MySQL-Konfiguration in Ubuntu 16.04 ändern möchten, bearbeiten Sie die folgende Datei For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
Piyush Bansal
6

Ich weiß nicht, wie Sie MySQL in Ihrer Linux-Umgebung eingerichtet haben, aber haben Sie dies überprüft?

  • /etc/my.cnf
Buhake Sindi
quelle
5

Versuche zu rennen mysqld --help --verbose | grep my.cnf | tr " " "\n"

Die Ausgabe wird so etwas wie sein

/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/etc/my.cnf
~/.my.cnf
Abram
quelle
Das ist die Ausgabe, die ich erhalte, aber die scheint keine Beziehung zur laufenden Instanz zu haben. Keine dieser Dateien existiert.
user3783243
4

Wenn Sie mit Homebrew auf einem Mac arbeiten, verwenden Sie

brauen info mysql

Du wirst so etwas sehen

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

Diese letzte Zeile entspricht INSTALLERDIR den MySQL-Dokumenten

New Alexandria
quelle
3

Fand meine mit

mysqld --help --verbose | grep my.cnf
Phaberest
quelle
2

Eine andere Möglichkeit ist die Verwendung des Befehls whereis.

ZB wo ist my.cnf

jbatista
quelle
1
Sie sind wahrscheinlich besser mit "lokalisieren", wenn das System dies unterstützt.
Drobert
2

Nur für MySQL Workbench-Benutzer beantwortet,

Geben Sie hier die Bildbeschreibung ein

MAX
quelle
Erhielt einen Fehler "Speicherort der MySQL-Konfigurationsdatei (dh: my.cnf) nicht angegeben"
Sukesh Kotian
2

Alles gute Vorschläge, in meinem Fall habe ich es an keinem dieser Orte gefunden, aber in habe /usr/share/mysqlich eine RHEL-VM und ich habe sie installiertmysql5.5

Roland
quelle
2

Abhängig von Ihrer MySQL-Version müssen Sie die verschiedenen Speicherorte durchsuchen.

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
Rob Mcelvenny
quelle
2

Sie können diesen Befehl auch ausführen.

mysql --help | grep cnf

prafi
quelle
Awsome !, auf Fenster musste ich ersetzen grepmit findstr: mysql --help | findstr cnfund es hat die Magie
Laenka-Oss
1

Unter Ubuntu (direkte Bearbeitung):

$ sudo nano /etc/mysql.conf.d/mysqld.cnf
Rost
quelle
auf Ubuntu 18 funktioniert dieser für mich: /etc/mysql/mysql.conf.d/mysqld.cnf
user9869932
0

Ich habe das xampp-Bundle mit apache, php and mysqlin Ubuntu installiert . Dort my.cnfbefindet sich die Datei im /opt/lampp/etc/Ordner. Hoffe es wird jemandem helfen.

Mahendran Sakkarai
quelle
0

Wenn Sie MAMP verwenden, greifen Sie auf Vorlagen> MySQL (my.cnf)> [Version] zu.

Wenn Sie MAMP fensterlos ausführen, müssen Sie möglicherweise die Symbolleiste über die Schaltfläche Anpassen anpassen.

Menü MAMP PRO-Vorlagen

Zuschlagen
quelle
0

Für mich war es so, dass ich Tabellen vom Typ "ENGINE = MyISAM" hatte, nachdem ich sie in "ENGINE = InnoDB" geändert hatte, funktionierte es :) in PhpMyAdmin im Azure App Service :)

Juli
quelle
0

Wenn Sie sich in einem VPS befinden und versuchen, eine my.cnf auf einem bereits laufenden Server zu bearbeiten, können Sie Folgendes versuchen:

ps aux | grep mysql

Sie sehen die Parameter, auf die der Befehl mysql ausgeführt wird, und die Verweise --defaults-filedarauf

Beachten Sie, dass auf Ihrem Server möglicherweise mehr als ein MySQL / MariaDB-Server ausgeführt wird. Wenn Sie eine Zeile ohne --defaults-fileParameter sehen, ruft diese Instanz möglicherweise die Konfiguration aus den CNFs ab, auf denen erwähnt wird, mysqladmin --helpwie andere bereits erwähnt haben.

Sdlion
quelle
0

Beachten Sie, dass mariadDB zwar Konfigurationsdetails aus den verschiedenen my.cnf-Dateien lädt, wie in den anderen Antworten hier aufgeführt, sie jedoch auch aus anderen Dateien mit unterschiedlichen Namen laden kann.

Das heißt, wenn Sie eine Änderung an einer der my.cnf-Dateien vornehmen, wird diese möglicherweise von einer anderen Datei mit einem anderen Namen überschrieben. Damit die Änderung erhalten bleibt, müssen Sie sie in der richtigen (zuletzt geladenen) Konfigurationsdatei ändern - oder möglicherweise in allen.

Wie finden Sie alle Konfigurationsdateien, die möglicherweise geladen werden? Versuchen Sie, anstatt nach my.cnf-Dateien zu suchen, Folgendes auszuführen:

grep -r datadir /etc/mysql/

Hier finden Sie alle Stellen, an denen Datadir erwähnt wird. In meinem Fall ergibt sich folgende Antwort:

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

Wenn ich diese Datei (/etc/mysql/mariadb.conf.d/50-server.cnf) bearbeite, um den Wert für datadir zu ändern, funktioniert dies, während dies in my.cnf nicht der Fall ist. Welche Option Sie auch ändern möchten, suchen Sie auf diese Weise.

Noel Swanson
quelle
0

Es hängt von Ihrem Zugriffsrecht ab, aber für mich funktioniert diese Arbeit auf der phpmyadmin SQL-Konsole

VARIABLEN ANZEIGEN;

Danach können Sie einige Variablen ändern

SET GLOBAL max_connections = 1000;

oder

SET @@ GLOBAL.max_connections = 1000;

Versuche es

marino andriamialy
quelle