10

I run mysql container using Docker. I start it with like

sudo docker -d --name mysql -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql mysql_image 

I suspect that stopping mysql by stopping docker is not safe. Am I wrong?

sudo docker stop mysql

Is it safer to stop mysql inside of the container first?

sudo docker exec mysql /usr/bin/mysqladmin shutdown
8

looks safe, from the docs:

The main process inside the container will receive SIGTERM, and after a grace period, SIGKILL.

so if the main process is mysqld, it will have a decent chance to flush everything.

2
  • 1
    Not true. When using official mysql 8 docker from Docker hub stopping container should be done after mysql shutdown. See serverfault.com/a/1063927/233246
    – podarok
    May 18 at 8:38
  • This looks like a dangerous answer and very much depends on what you're trying to do. If you're upgrading the mysql version, then you're going to be using InnoDB slow shutdown mode, which could easily take longer than 10 seconds.
    – Dom
    Jul 19 at 18:19
0

you can check the logs from mysql container

docker container logs mysql

to confirm whether the shutdown procedure is safe or not

to see the last line if shows:

[Note] mysqld: Shutdown complete

that should be safe

0

Seems like stopping docker container without shutting down MySQL within creates broken MySQL data volume. So it is necessary to run MySQL shutdown before stopping container in order for MySQL to flush all changes to a disk.

This is a log of starting mysql on volume, created from container, stopped by docker. Pay attention to XA crash recovery step exists.

2021-05-18 06:34:51+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL             
Server 8.0.25-1debian10 started.
2021-05-18 06:34:54+00:00 [Note] [Entrypoint]: Switching to dedicated user 
'mysql'
2021-05-18 06:34:54+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL 
Server 8.0.25-1debian10 started.
2021-05-18T06:34:54.844455Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld 
(mysqld 8.0.25) starting as process 1
2021-05-18T06:34:54.887402Z 1 [System] [MY-013576] [InnoDB] InnoDB 
initialization has started.
2021-05-18T06:35:00.523370Z 1 [System] [MY-013577] [InnoDB] InnoDB 
initialization has ended.
2021-05-18T06:35:11.094092Z 0 [System] [MY-011323] [Server] X Plugin ready for 
connections. Bind-address: '::' port: 33060, socket: 
/var/run/mysqld/mysqlx.sock
2021-05-18T06:35:11.181732Z 0 [System] [MY-010229] [Server] Starting XA crash 
recovery...
2021-05-18T06:35:11.198947Z 0 [System] [MY-010232] [Server] XA crash recovery 
finished.
2021-05-18T06:35:11.375917Z 0 [Warning] [MY-010068] [Server] CA certificate 
ca.pem is self signed.
2021-05-18T06:35:11.376529Z 0 [System] [MY-013602] [Server] Channel mysql_main 
configured to support TLS. Encrypted connections are now supported for this 
channel.
2021-05-18T06:35:11.397202Z 0 [Warning] [MY-011810] [Server] Insecure 
configuration for --pid-file: Location '/var/run/mysqld' in the path is 
accessible to all OS users. Consider choosing a different directory.
2021-05-18T06:35:11.628776Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: 
ready for connections. Version: '8.0.25'  socket: 
'/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

When using

docker exec tu-live-db /usr/bin/mysqladmin -uroot -proot shutdown

before killing a container, XA crash recovery is not starting and data volume is valid for the next container start with it

2021-05-18 06:36:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL 
Server 8.0.25-1debian10 started.
2021-05-18 06:36:47+00:00 [Note] [Entrypoint]: Switching to dedicated user 
'mysql'
2021-05-18 06:36:47+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL 
Server 8.0.25-1debian10 started.
2021-05-18T06:36:48.040045Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld 
(mysqld 8.0.25) starting as process 1
2021-05-18T06:36:48.082740Z 1 [System] [MY-013576] [InnoDB] InnoDB 
initialization has started.
2021-05-18T06:36:53.426493Z 1 [System] [MY-013577] [InnoDB] InnoDB 
initialization has ended.
2021-05-18T06:36:57.611953Z 0 [System] [MY-011323] [Server] X Plugin ready for 
connections. Bind-address: '::' port: 33060, socket: 
/var/run/mysqld/mysqlx.sock
2021-05-18T06:36:57.827561Z 0 [Warning] [MY-010068] [Server] CA certificate 
ca.pem is self signed.
2021-05-18T06:36:57.828060Z 0 [System] [MY-013602] [Server] Channel mysql_main 
configured to support TLS. Encrypted connections are now supported for this 
channel.
2021-05-18T06:36:57.845291Z 0 [Warning] [MY-011810] [Server] Insecure 
configuration for --pid-file: Location '/var/run/mysqld' in the path is 
accessible to all OS users. Consider choosing a different directory.
2021-05-18T06:36:58.014550Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: 
ready for connections. Version: '8.0.25'  socket: 
'/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.