我使用 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
答案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
使用命令终端进入访客主机
$ docker exec -it mariadb /bin/sh
进入 SQL_command_Line
# mysql -u root -p
命令在那里关闭数据库。
> shutdown;
答案4
你可以检查 mysql 容器的日志
docker container logs mysql
确认关机过程是否安全
查看最后一行是否显示:
[注意]mysqld:关闭完成
那应该是安全的