停止 mysql docker 容器的安全方法是什么?

停止 mysql docker 容器的安全方法是什么?

我使用 Docker 运行 mysql 容器。我使用如下命令启动它

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

我怀疑通过停止docker来停止mysql并不安全。我错了吗?

sudo docker stop mysql

首先停止容器内的 mysql 是否更安全?

sudo docker exec mysql /usr/bin/mysqladmin shutdown

答案1

看起来很安全,从文档

容器内部的主进程将收到 SIGTERM,并在一段宽限期后收到 SIGKILL。

所以如果主进程是 mysqld,它将有很大机会清除所有内容。

答案2

似乎在不关闭其中的 MySQL 的情况下停止 docker 容器会导致 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 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.

使用时

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

答案3

  1. 使用命令终端进入访客主机

    $ docker exec -it mariadb /bin/sh
    
  2. 进入 SQL_command_Line

    # mysql -u root -p
    
  3. 命令在那里关闭数据库。

    > shutdown;
    

答案4

你可以检查 mysql 容器的日志

docker container logs mysql

确认关机过程是否安全

查看最后一行是否显示:

[注意]mysqld:关闭完成

那应该是安全的

相关内容