Comment activer la journalisation MySQL?

36

J'utilise MySQL 5.0.45 sur OS X 10.6.1 et je ne parviens pas à ce que MySQL enregistre quoi que ce soit. Je suis en train de déboguer une application et j'ai besoin de voir toutes les requêtes et les erreurs.

J'ai ajouté au etc / my.cnf:

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

J'ai utilisé sudo pour créer deux fichiers journaux, définir les autorisations sur 644, puis redémarrer MySQL.

Je me suis référé à Où est mon journal mysql sur OS X? afin de dépanner.

Fonctionnement:

ps auxww|grep [m]ysqld

Résultats:

_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

Et en cours d'exécution:

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

Résultats:

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

Fonctionnement:

mysql> show variables like '%log%';

Résultats:

+---------------------------------+---------------------------+
| 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)

Toute aide sur comment je peux obtenir que MySQL se connecte?

RyOnLife
la source

Réponses:

23

Même si vous avez utilisé chmod 644, assurez-vous que mysql est le propriétaire des journaux.

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

Ensuite, redémarrez mysqld.

Ensuite, connectez-vous à mysql et lancez:

mysql> show variables like '%log%';

Regardez les valeurs general_log, general_log_file, log, log_error, etc.

Allumez-les au besoin et lancez mysqladmin flushlogs au besoin.

randomx
la source
Maintenant en vous connectant. Doit avoir été la supervision de la propriété. Bien que, voir ma question modifiée pour les résultats de "afficher des variables comme"% log% "" requête. MySQL se connecte à /var/log/mysql.log, alors pourquoi n'est-il pas affiché?
RyOnLife
13

Pour activer les fichiers journaux, vous devez vous assurer qu'une ou plusieurs des directives suivantes figurent dans la [mysqld]section du fichier de configuration principal de votre serveur mysql ( /etc/my.cnfle mien):

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

Les journaux seront créés, par défaut, dans le même répertoire de données que celui qui contient les sous-répertoires de la base de données (généralement /var/lib/mysql) et les noms de fichier journal par défaut correspondent au nom d'hôte suivi d'un suffixe correspondant aux noms de directive ci-dessus (par exemple. -Bin, -slow -quêtes, etc.).

Pour conserver vos journaux dans un chemin différent ou en utilisant des noms de fichiers différents, spécifiez le nom de base suivant la log=directive, ainsi que le chemin et le nom de fichier de votre choix, par exemple:

[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

Vous devez redémarrer mysqld pour que ces modifications prennent effet.

gigawatt
la source
5

Les réponses précédentes étaient périmées. Vous pouvez regarder le fichier de configuration dans /etc/my.cnfou sur Windows ./mysql/my.ini.

Dans la [mysqld]section ajouter

log_bin
general_log
log_error

La documentation de Windows indique que les journaux sont stockés dans ProgramData/MySQL/MySQL Server 5.6/. Ignorez-le parce que c'est un mensonge.

De plus, l' logoption recommandée est amortie et entraîne l'erreur

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

être connecté ./mysql/data/host.erret le démon mourant silencieusement. Le réglage correct est general-log.

Aussi log-slow-queriesn'est pas valide et a causé l'erreur

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

Soyez donc sûr de rester à l'écart de cela aussi.

utilisateur3338098
la source
Merci! Je ne pouvais pas démarrer le serveur avec l' log=option et pouvais comprendre pourquoi pour la vie. Enfin quelqu'un avec une réponse. general-log
Jiveturkey
2

Entrez la ligne de commande mysql avec des super privilèges et effectuez les opérations suivantes:

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

Dans mon cas, peu importait que cette variable soit déjà définie avec la même valeur! De plus, j'ai changé les permissions et le propriétaire du fichier comme mentionné dans les autres posts.

Lucia
la source
1

Essayez différents paramètres de journal dans my.cnf. Dans mon cas j'avais besoin de:

general_log = on

general_log_file=/var/log/mysql/mysql.log
Rayon
la source