Каков безопасный способ остановить контейнер mysql docker?

Я запускаю контейнер mysql с помощью Docker. Я начинаю это с таких слов, как

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

Я подозреваю, что остановка mysql путем остановки docker небезопасна. Я ошибаюсь?

sudo docker stop mysql

Безопаснее ли сначала остановить mysql внутри контейнера?

sudo docker exec mysql /usr/bin/mysqladmin shutdown

выглядит безопасным, с точки зрения доктора:

Основной процесс внутри контейнера получит SIGTERM, а после льготного периода - SIGKILL.

так что, если основным процессом является mysqld, у него будет приличный шанс очистить все.

Похоже, что остановка контейнера docker без выключения MySQL внутри создает поврежденный объем данных MySQL. Таким образом, необходимо запустить завершение работы MySQL перед остановкой контейнера, чтобы MySQL сбросил все изменения на диск.

Это журнал запуска mysql на томе, созданный из контейнера, остановленный docker. Обратите внимание на то, что существует этап аварийного восстановления XA.

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 12021-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.sock2021-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.

При использовании

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

перед завершением работы контейнера аварийное восстановление XA не запускается, и объем данных действителен для следующего контейнера, запускаемого с ним

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 12021-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.sock2021-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.
  1. Войдите внутрь гостевого хоста, используя свой командный терминал

    $ docker exec -it mariadb /bin/sh
  2. Перейдите внутрь строки SQL_command_Line

    # mysql -u root -p
  3. Команда завершает работу базы данных внутри нее.

    > shutdown;

вы можете проверить журналы из контейнера mysql

docker container logs mysql

чтобы подтвердить, является ли процедура завершения безопасной или нет

чтобы увидеть последнюю строку, если отображается:

[Примечание] mysqld: Завершение работы завершено

это должно быть безопасно