Antworten:
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.
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-file
Parameter 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 VARIABLES
benötigen Sie jedoch die entsprechenden Berechtigungen.)
/etc/init.d/mysqld restart
.
my.cnf
befindet sich in /etc/mysql/my.cnf
.
mysql --help
Sie 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
etc/mysql/my.cnf
auf einen anderen Symlink zeigte, /etc/alternatives/my.cnf
der auf zeigt etc/mysql/mysql.cnf
.
ls /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
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/*.cnf
Dateien an und verwenden Sie die für Sie geeignete Datei - kopieren Sie sie in /etc/my.cnf
und ä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.
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.
mysqld --help --verbose
widersprechen 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.
Sie können find immer in einem Terminal ausführen.
find / -name my.cnf
find / -name my.cnf
ist 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_HOME
ein Terminal
~/.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
.
Sie können verwenden:
locate my.cnf
whereis my.cnf
find . -name my.cnf
whereis
wird hier nicht funktionieren; Es sucht nach den Speicherorten, die einem Befehl entsprechen , und kann keine beliebigen Dateien finden.
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.
mysql --help | grep /my.cnf | xargs ls
wird Ihnen sagen, wo my.cnf
sich 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
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
Wie von konyak festgestellt, können Sie die Liste der Orte abrufen, an denen mysql nach Ihrer my.cnf
Datei 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 cat
sie verwenden, um zu sehen, wie Ihre Konfiguration erstellt wird, und my.cnf
bei Bedarf Ihre eigene Konfiguration an Ihrem bevorzugten Standort erstellen .
Für Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf
Ich weiß nicht, wie Sie MySQL in Ihrer Linux-Umgebung eingerichtet haben, aber haben Sie dies überprüft?
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
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
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
Sie können diesen Befehl auch ausführen.
mysql --help | grep cnf
grep
mit findstr
: mysql --help | findstr cnf
und es hat die Magie
Unter Ubuntu (direkte Bearbeitung):
$ sudo nano /etc/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
Ich habe das xampp-Bundle mit apache, php and mysql
in Ubuntu installiert . Dort my.cnf
befindet sich die Datei im /opt/lampp/etc/
Ordner. Hoffe es wird jemandem helfen.
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.
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-file
darauf
Beachten Sie, dass auf Ihrem Server möglicherweise mehr als ein MySQL / MariaDB-Server ausgeführt wird. Wenn Sie eine Zeile ohne --defaults-file
Parameter sehen, ruft diese Instanz möglicherweise die Konfiguration aus den CNFs ab, auf denen erwähnt wird, mysqladmin --help
wie andere bereits erwähnt haben.
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.
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
locate my.cnf
um herauszufinden, wo sich all diese Dateinamen befinden