エラーメッセージ
次の状況に似ています。
/mysql/bin/mysqld: File './mysql-bin.index' not found (Errcode: 13 - Permission denied)
[ERROR] Aborting
[Note] Binlog end
[Note] /mysql/bin/mysqld: Shutdown complete
トリガー条件
問題がある状況:mysqlのbinlogが有効になっています。docker
-composeの内容は次のとおりです。
version: '3'
services:
mysql:
container_name: mysql
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=mysql的root密码
volumes:
- ./conf:/etc/mysql
- ./logs:/var/log/mysql
- ./data:/var/lib/mysql
ports:
- 30030:3306
restart: always
binlogを有効にするための私の操作は、構成ファイルmy.cnfを変更し、次のファイルの最後の3行を[mysqld]に追加し、再起動後にこの問題を報告することです。
[mysqld]
lower_case_table_names=1
log-bin=/var/lib/mysql/mysql-bin
binlog-format=ROW
server_id=123456
問題分析
エラーの最初の行であるファイル './mysql-bin.index'が見つかりません(エラーコード:13-アクセス許可が拒否されました)を見ると、mysqlユーザーがデータベースディレクトリ内のすべてのファイルに対する書き込みアクセス許可を持っていないことがわかります。解決策はですが
chown mysql:mysql -R /var/lib/mysql
、今はdockerを介してMySQLを起動しているため、この問題を制御できなくなりました。
解決
理由を知って、私が考えた解決策は、my.cnfを初めて起動したときに、これらの3行を追加せず、次のコンテンツのみを保持することでした。
[mysqld]
lower_case_table_names=1
次にdocker-compose start mysql
、起動後に次の3つの手順を実行します
docker exec mysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/my.cnf"
docker exec mysql bash -c "echo 'binlog-format=ROW' >> /etc/mysql/my.cnf"
docker exec mysql bash -c "echo 'server_id=123456' >> /etc/mysql/my.cnf"
このように書き込んだ後、実行中にdocker-compose restart mysql
エラーは報告されません。この時点で、クエリshow variables like 'log_bin%'
、binlogは通常有効になっています。