Jak włączyć rejestrowanie MySQL?

36

Używam MySQL 5.0.45 w systemie OS X 10.6.1 i nie mogę zmusić MySQL do zarejestrowania czegokolwiek. Debuguję aplikację i muszę zobaczyć wszystkie zapytania i błędy.

Dodałem do etc / my.cnf:

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

Użyłem sudo, aby utworzyć dwa pliki dziennika, ustawić uprawnienia na 644, a następnie zrestartowałem MySQL.

Odniosłem się do Gdzie jest mój dziennik mysql na OS X? w celu rozwiązania problemu.

Bieganie:

ps auxww|grep [m]ysqld

Zwroty:

_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

I działa:

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

Zwroty:

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

Bieganie:

mysql> show variables like '%log%';

Zwroty:

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

Czy jest jakaś pomoc w tym, jak mogę zmusić MySQL do logowania?

RyOnLife
źródło

Odpowiedzi:

23

Nawet jeśli używałeś chmod 644, upewnij się, że mysql jest właścicielem dzienników.

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

Następnie uruchom ponownie mysqld.

Następnie zaloguj się do mysql i uruchom:

mysql> show variables like '%log%';

Spójrz na wartościach general_log, general_log_file, log, log_error, itd.

Włącz je w razie potrzeby i w razie potrzeby uruchom flushlogs mysqladmin .

randomx
źródło
Teraz loguję się. Musiał to być nadzór właścicielski. Chociaż zobacz moje edytowane pytanie, aby uzyskać wyniki „pokaż zmienne, takie jak zapytanie„% log% ””. MySQL loguje się do /var/log/mysql.log, więc dlaczego się nie wyświetla?
RyOnLife,
13

Aby włączyć pliki dziennika, musisz upewnić się, że co najmniej jedna z następujących dyrektyw znajduje się w [mysqld]sekcji głównego pliku konfiguracyjnego serwera mysql ( /etc/my.cnfw moim):

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

Dzienniki zostaną utworzone domyślnie w tym samym katalogu danych, w którym znajdują się same podkatalogi bazy danych (zwykle /var/lib/mysql), a nazwy plików dziennika są domyślnie ustawione na nazwę hosta, po której następuje sufiks zgodny z powyższymi nazwami dyrektyw (np. -Bin, -slow -pytania itp.).

Aby zachować dzienniki w innej ścieżce lub przy użyciu różnych nazw plików, określ nazwę podstawową zgodnie z log=dyrektywą oraz dowolną ścieżkę i nazwę pliku, np .:

[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

Musisz ponownie uruchomić mysqld, aby zmiany odniosły skutek.

gigawat
źródło
5

Poprzednie odpowiedzi były przestarzałe. Możesz zajrzeć do pliku konfiguracyjnego w /etc/my.cnflub w systemie Windows ./mysql/my.ini.

W [mysqld]sekcji dodaj

log_bin
general_log
log_error

Dokumentacja systemu Windows stwierdza, że ​​dzienniki są przechowywane ProgramData/MySQL/MySQL Server 5.6/. Zignoruj ​​to, bo to kłamstwo.

Ponadto zalecana logopcja jest amortyzowana i skutkuje błędem

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

zalogowany, ./mysql/data/host.erra demon cicho umiera. Prawidłowe ustawienie to general-log.

Również log-slow-queriesnie jest prawidłowy i spowodował błąd

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

Dlatego też trzymaj się od tego z daleka.

użytkownik3338098
źródło
Dziękuję Ci! Nie mogłem uruchomić serwera z log=opcją i mogłem przez całe życie dowiedzieć się, dlaczego. Wreszcie ktoś z odpowiedzią. general-log
jiveturkey
2

Wpisz wiersz polecenia mysql z super uprawnieniami i wykonaj:

ZESTAW GLOBALNY plik_log_ogólny = '/var/log/mysql/mysql.log'; 

W moim przypadku nie miało znaczenia, czy ta zmienna była już ustawiona z tą samą wartością! Zmieniłem także uprawnienia i właściciela pliku, jak wspomniano w innych postach.

Lucia
źródło
1

Wypróbuj różne ustawienia dziennika w my.cnf. W moim przypadku potrzebowałem:

general_log = on

general_log_file=/var/log/mysql/mysql.log
Promień
źródło