log_errorはdockerのmysqlでは機能しません

log_errorはdockerのmysqlでは機能しません

公式のdockerイメージを使用し、mysql:5.7カスタム.cnfファイルを使用してmysqlを設定しgeneral_log_fileてログインしてlogs_errorいますが、エラーログを設定すると次のエラーが発生します。

$ sudo docker-compose up
db_1   | Initializing database
db_1   | Initializing database
db_1   | Initializing database
....

^CGracefully stopping... (press Ctrl+C again to force)

$ cat mysql-custom.cnf
[mysqld]
general_log_file        = /var/log/mysql/mysqld.log
general_log             = 1
log_error               = /var/log/mysql/error.log  # When i put this then getting above error.

ここでエラーが発生してlog_errororを入力しましたがslow_query_log_file、この単純なものがdockerで機能しない理由を知っている人はいますか?

ベストアンサー1

コンテナ内では、基本オペレーティングシステムの機能を完全にサポートできない可能性があります。これは、特定の目的のためにより安全で制限された環境を望むので、意図的に設計されています。

したがって、MySQLログの場合は、おそらくMYSQL DB /テーブルに記録したいと思います。

バージョン5.x(5.1、5.2、覚えていません)の場合、SQLはファイルの代わりにMySQL DB /テーブルへのロギングをサポートし、既定では2つのテーブルがすでに作成されていますmysql.general_logmysql.slow_log

使用を設定するには、次のものが必要です。

に追加/etc/mysql/my.cnf:

[mysqld]
slow-query-log
general_log=1
log-output=TABLE

その後、mysqlを再起動します。

毎日バックアップするには、データベース照会権限を持つシステムで以下を実行できます。

mysqldump mysql general_log  --lock-tables=0 > general_log_errors.db
mysqldump mysql slow_log  --lock-tables=0 > slow_log_errors.db

(lock-tables = 0を使用する必要があります。そうしないと、エラーメッセージが表示されます。

mysqldump: Got error: 1556: You can't use locks with log tables. when doing LOCK TABLES

)

次に、次のクエリを実行してテーブルをクリーンアップします。

TRUNCATE TABLE mysql.general_log;
TRUNCATE TABLE mysql.slow_log;

これが一般的な考えです。過去数日間のログをアーカイブしようとする可能性があるため、MySQL TRUNCATE / DELETEクエリがより冗長になります。

テーブルはデフォルトでそこにある必要があり、そのDockerイメージから消去された可能性があります。

したがって、v5.7では、次のように生成できます。

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';

追加資料:テーブルへのログの書き込み

error_fileの作成に関しては、/var/logがdockerファイルに存在しない可能性があります。上記の2つのロギングオプションが不十分な場合は、MySQLユーザーが所有するディレクトリにテスト用のファイルを作成できます。 MySQLのあるディレクトリの1つは通常/var/lib/mysqlです。

おすすめ記事