Mensaje de error
Similar a la siguiente situación:
/mysql/bin/mysqld: File './mysql-bin.index' not found (Errcode: 13 - Permission denied)
[ERROR] Aborting
[Note] Binlog end
[Note] /mysql/bin/mysqld: Shutdown complete
Condiciones desencadenantes
La situación en la que hay un problema: el binlog de mysql está habilitado. El
contenido de mi docker-compose es el siguiente:
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
Para habilitar binlog, mi operación es modificar el archivo de configuración my.cnf, agregar las últimas tres líneas del siguiente archivo a [mysqld] e informar este problema después de reiniciar
[mysqld]
lower_case_table_names=1
log-bin=/var/lib/mysql/mysql-bin
binlog-format=ROW
server_id=123456
análisis del problema
Al ver la primera línea del error, Archivo './ mysql-bin.index' no encontrado (Errcode: 13-Permiso denegado), sé que el usuario de mysql no tiene permisos de escritura para todos los archivos en el directorio de la base de datos. La solución es
chown mysql:mysql -R /var/lib/mysql
Pero ahora que inicio MySQL a través de la ventana acoplable, ya no puedo controlar este problema.
Solución
Sabiendo el motivo, la solución que pensé fue no agregar esas tres líneas a my.cnf cuando se inició por primera vez, y solo conservar el siguiente contenido
[mysqld]
lower_case_table_names=1
Luego, docker-compose start mysql
realice los siguientes tres pasos después del inicio
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"
Después de escribir de esta manera, docker-compose restart mysql
no se informará ningún error durante la ejecución . En este momento, la consulta show variables like 'log_bin%'
, binlog se ha habilitado normalmente