Wie aktiviere ich die MySQL-Protokollierung?

36

Ich führe MySQL 5.0.45 unter OS X 10.6.1 aus und kann MySQL nicht dazu bringen, irgendetwas zu protokollieren. Ich debugge eine Anwendung und muss alle Abfragen und Fehler sehen.

Ich fügte der etc / my.cnf hinzu:

[mysqld]
bind-address = 127.0.0.1
log = /var/log/mysqld.log
log-error = /var/log/mysqld.error.log

Ich habe mit sudo zwei Protokolldateien erstellt, Berechtigungen auf 644 gesetzt und dann MySQL neu gestartet.

Ich verwies auf Wo befindet sich mein MySQL-Protokoll unter OS X? um Fehler zu beheben.

Laufen:

ps auxww|grep [m]ysqld

Kehrt zurück:

_mysql      71   0.0  0.8   646996  15996   ??  S     7:31PM   0:01.10 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/Macintosh-41.local.pid
_mysql      46   0.0  0.0   600336    744   ??  Ss    7:30PM   0:00.03 /bin/sh /usr/local/mysql/bin/mysqld_safe

Und läuft:

$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'

Kehrt zurück:

log                               /var/log/mysqld.log
log-bin                           (No default value)
log-bin-index                     (No default value)
log-bin-trust-function-creators   FALSE
log-bin-trust-routine-creators    FALSE
log-error                         /var/log/mysqld.error.log
log-isam                          myisam.log
log-queries-not-using-indexes     FALSE
log-short-format                  FALSE
log-slave-updates                 FALSE
log-slow-admin-statements         FALSE
log-slow-queries                  (No default value)
log-tc                            tc.log
log-tc-size                       24576
log-update                        (No default value)
log-warnings                      1

Laufen:

mysql> show variables like '%log%';

Kehrt zurück:

+---------------------------------+---------------------------+
| Variable_name                   | Value                     |
+---------------------------------+---------------------------+
| back_log                        | 50                        | 
| binlog_cache_size               | 32768                     | 
| expire_logs_days                | 0                         | 
| innodb_flush_log_at_trx_commit  | 1                         | 
| innodb_locks_unsafe_for_binlog  | OFF                       | 
| innodb_log_arch_dir             |                           | 
| innodb_log_archive              | OFF                       | 
| innodb_log_buffer_size          | 1048576                   | 
| innodb_log_file_size            | 5242880                   | 
| innodb_log_files_in_group       | 2                         | 
| innodb_log_group_home_dir       | ./                        | 
| innodb_mirrored_log_groups      | 1                         | 
| log                             | ON                        | 
| log_bin                         | OFF                       | 
| log_bin_trust_function_creators | OFF                       | 
| log_error                       | /var/log/mysqld.error.log | 
| log_queries_not_using_indexes   | OFF                       | 
| log_slave_updates               | OFF                       | 
| log_slow_queries                | OFF                       | 
| log_warnings                    | 1                         | 
| max_binlog_cache_size           | 4294967295                | 
| max_binlog_size                 | 1073741824                | 
| max_relay_log_size              | 0                         | 
| relay_log_purge                 | ON                        | 
| relay_log_space_limit           | 0                         | 
| sync_binlog                     | 0                         | 
+---------------------------------+---------------------------+
26 rows in set (0.00 sec)

Gibt es eine Hilfe, wie ich MySQL zum Protokollieren bringen kann?

RyOnLife
quelle

Antworten:

23

Stellen Sie chmod 644sicher, dass mysql der Eigentümer der Protokolle ist.

touch /var/log/mysql.log
chown mysql:mysql /var/log/mysql.log
touch /var/log/mysql.error.log
chown mysql:mysql /var/log/mysql.error.log

Starten Sie als nächstes mysqld neu.

Melden Sie sich dann bei mysql an und führen Sie Folgendes aus:

mysql> show variables like '%log%';

Schauen Sie sich die Werte für general_log, general_log_file, log, log_error, usw.

Schalten Sie sie nach Bedarf ein und führen Sie mysqladmin-Flushlogs nach Bedarf aus.

randomx
quelle
Jetzt loggen. Muss die Aufsicht über das Eigentum gewesen sein. In meiner bearbeiteten Frage finden Sie jedoch die Ergebnisse der Abfrage "Variablen wie '% log%' anzeigen". MySQL protokolliert in /var/log/mysql.log. Warum wird dies nicht angezeigt?
RyOnLife
13

Um die Protokolldateien zu aktivieren, müssen Sie sicherstellen, dass sich eine oder mehrere der folgenden Anweisungen im [mysqld]Abschnitt der Hauptkonfigurationsdatei Ihres MySQL-Servers ( /etc/my.cnfauf meiner) befinden:

[mysqld]
log-bin
log
log-error
log-slow-queries

Die Protokolle werden standardmäßig in demselben Datenverzeichnis erstellt, in dem sich die Datenbank-Unterverzeichnisse befinden (normalerweise /var/lib/mysql), und die Namen der Protokolldateien werden standardmäßig auf den Hostnamen gesetzt, gefolgt von einem Suffix, das mit den oben genannten Direktivennamen übereinstimmt (z. B. -bin, -slow) -abfragen etc).

Um Ihre Protokolle in einem anderen Pfad zu speichern oder andere Dateinamen zu verwenden, geben Sie den Basisnamen gemäß der log=Direktive und einen beliebigen Pfad und Dateinamen an, z.

[mysqld]
log-bin=/var/log/mysql-bin.log
log=/var/log/mysql.log
log-error=/var/log/mysql-error.log
log-slow-queries=/var/log/mysql-slowquery.log

Sie müssen mysqld neu starten, damit diese Änderungen wirksam werden.

Gigawatt
quelle
5

Die vorherigen Antworten waren veraltet. Sie können die Konfigurationsdatei in /etc/my.cnfoder auf Windows anzeigen ./mysql/my.ini.

Im [mysqld]Abschnitt hinzufügen

log_bin
general_log
log_error

In der Dokumentation für Windows wird angegeben, dass die Protokolle in gespeichert werden ProgramData/MySQL/MySQL Server 5.6/. Ignoriere es, weil es eine Lüge ist.

Außerdem wird die empfohlene logOption abgeschrieben und führt zu einem Fehler

ambiguous option '--log' (log-bin, log_slave_updates)

angemeldet sein ./mysql/data/host.errund der Daemon im Stillen sterben. Die richtige Einstellung ist general-log.

Auch log-slow-queriesist nicht gültig und hat den Fehler verursacht

C:\mysql\bin\mysqld.exe: unknown option '--log-slow-queries'

Also halte dich auch davon fern.

user3338098
quelle
Danke! Ich konnte den Server nicht mit der log=Option starten und konnte für mein ganzes Leben herausfinden, warum. Endlich jemand mit einer Antwort. general-log
Jiveturkey
2

Geben Sie die Befehlszeile von mysql mit Superprivilegien ein und führen Sie Folgendes aus:

SET GLOBAL general_log_file = '/var/log/mysql/mysql.log'; 

In meinem Fall war es egal, ob ich diese Variable bereits auf den gleichen Wert gesetzt hatte! Außerdem habe ich die Berechtigungen und den Eigentümer der Datei geändert, wie in den anderen Beiträgen erwähnt.

Lucia
quelle
1

Probieren Sie verschiedene Protokolleinstellungen in my.cnf aus. In meinem Fall brauchte ich:

general_log = on

general_log_file=/var/log/mysql/mysql.log
Strahl
quelle