Quando em um contêiner, você pode não ter o suporte total das funcionalidades do sistema operacional subjacente; Esse comportamento é por design como você deseja ter um ambiente mais seguro e restrito para uma finalidade específica.
Como tal, para logs do MySQL, você pode querer logar em MYSQL DB / tables.
Para a versão 5.x em diante (5.1, 5.2, não se lembra) O SQL suporta o registro no MySQL DB / tables, em vez de arquivos, e vem por padrão com duas tabelas já criadas, mysql.general_log
e mysql.slow_log
.
Para configurar seu uso, você faz:
Adicionando a /etc/mysql/my.cnf
:
[mysqld]
slow-query-log
general_log=1
log-output=TABLE
E, em seguida, reinicie o mysql.
Para fazer backup deles todos os dias, você pode executar em um sistema com acesso para consultar o banco de dados:
mysqldump mysql general_log --lock-tables=0 > general_log_errors.db
mysqldump mysql slow_log --lock-tables=0 > slow_log_errors.db
(Você precisa usar lock-tables = 0, caso contrário, você receberá a mensagem de erro:
mysqldump: Got error: 1556: You can't use locks with log tables. when doing LOCK TABLES
E, em seguida, execute as seguintes consultas para limpar as tabelas.
TRUNCATE TABLE mysql.general_log;
TRUNCATE TABLE mysql.slow_log;
Esta é a ideia geral. Você pode querer manter logs dos últimos dias e, como tal, as consultas MySQL TRUNCATE / DELETE seriam mais elaboradas.
As tabelas devem estar lá por padrão, talvez tenham sido apagadas nessa imagem do docker.
Assim, para a v5.7, você pode criá-los com:
CREATE TABLE IF NOT EXISTS 'general_log' (
'event_time' timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
'user_host' mediumtext NOT NULL,
'thread_id' bigint(21) unsigned NOT NULL,
'server_id' int(10) unsigned NOT NULL,
'command_type' varchar(64) NOT NULL,
'argument' mediumblob NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';
CREATE TABLE IF NOT EXISTS 'slow_log' (
'start_time' timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
'user_host' mediumtext NOT NULL,
'query_time' time(6) NOT NULL,
'lock_time' time(6) NOT NULL,
'rows_sent' int(11) NOT NULL,
'rows_examined' int(11) NOT NULL,
'db' varchar(512) NOT NULL,
'last_insert_id' int(11) NOT NULL,
'insert_id' int(11) NOT NULL,
'server_id' int(10) unsigned NOT NULL,
'sql_text' mediumblob NOT NULL,
'thread_id' bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';
Outras leituras: Escrevendo Logs em Tabelas
Quanto à criação do error_file: / var / log pode nem existir em seu arquivo do docker. Se essas duas opções de log acima não forem suficientes, você poderá criar um arquivo para testar em um diretório pertencente ao usuário do MySQL; Um desses diretórios onde o MySQL reside é / var / lib / mysql.