为什么数据库在容器中运行mySQL时会继续下降?

问题描述 投票:0回答:1
对于上下文,我正在使用带有2GB内存的数字海洋液滴上的Laravel Sail运行PHP Laravel Web应用程序。

我遇到的问题是,在运行一定时间之后(似乎是随机的,但通常不会发生在应用程序运行超过12小时之后),当我尝试访问Web应用程序时,我在浏览器中找到以下错误消息:

Illuminate \ Database\ QueryException SQLSTATE[HY000] [1049] Unknown database 'laravel' select * from `sessions` where `id` = NScfhR1av3SqPJWO658qfYzrevdBmtpB7Sd7801z limit 1

laravel

是我数据库的名称,似乎由于某种原因,它被删除了,我不知道为什么。在我的docker-compose.yml中,我有一个卷设置,以便在重新启动的情况下也应持续存在数据库: mysql: image: 'mysql/mysql-server:8.0' restart: unless-stopped ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 MYSQL_LOG_CONSOLE: "true" command: [ "--general-log=1", "--general-log-file=/var/lib/mysql/general.log" ] volumes: - 'sail-mysql:/var/lib/mysql' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] interval: 30s timeout: 10s retries: 5

我不知道为什么要删除此数据库,当我使用应用程序启动该应用程序的容器时,所有内容都可以启动正常,如果我手动重新启动容器,我可以确认数据库持续存在,并且一切仍然可以正常工作。我不认为这是一个内存问题,因为每当我在所有运行时都监视内存时,通常至少有900MB可用。
i试图查看Docker容器中的MySQL日志,我可以看到出于某种原因关闭了,但这应该删除我的数据库 /覆盖卷:

./vendor/bin/sail up -d

我还曾尝试在Journalctl中寻找Docker.Service。我发现了几个错误,但仍然没有解释我的问题:

mysql_1 | 2025-02-26T11:10:44.197336Z 963 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.32). mysql_1 | 2025-02-26T11:10:45.622896Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL. mysql_1 | [Entrypoint] MySQL Docker Image 8.0.32-1.2.11-server mysql_1 | [Entrypoint] Starting MySQL 8.0.32-1.2.11-server mysql_1 | 2025-02-26T11:10:46.474184Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead. mysql_1 | 2025-02-26T11:10:46.476331Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.32) starting as process 1 mysql_1 | 2025-02-26T11:10:46.487273Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. mysql_1 | 2025-02-26T11:10:46.701850Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. mysql_1 | 2025-02-26T11:10:46.893607Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. mysql_1 | 2025-02-26T11:10:46.893885Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. mysql_1 | 2025-02-26T11:10:46.926131Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock mysql_1 | 2025-02-26T11:10:46.926655Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.32' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server
在我的配置中存在错误 /缺失,导致该数据库被删除?我还能在哪里尝试确定原因?
    

我弄清楚了这个问题 - 实际上与我最初认为的记忆无关。调查日志时,我发现执行以下查询:

Feb 26 04:09:00 manu-connect dockerd[1137]: time="2025-02-26T04:09:00.414881863Z" level=error msg="stream copy error: reading from a closed fifo" Feb 26 04:09:00 manu-connect dockerd[1137]: time="2025-02-26T04:09:00.414973931Z" level=error msg="stream copy error: reading from a closed fifo" Feb 26 04:09:00 manu-connect dockerd[1137]: time="2025-02-26T04:09:00.448979113Z" level=info msg="ignoring event" container=fbe008fee27623c5918b0b91d1aa7bac86bbc0343a4b11fc5d2250e5af05f307 module=libcontainer> Feb 26 04:09:00 manu-connect dockerd[1137]: time="2025-02-26T04:09:00.458393016Z" level=warning msg="Health check for container fbe008fee27623c5918b0b91d1aa7bac86bbc0343a4b11fc5d2250e5af05f307 error: context > Feb 26 04:09:00 manu-connect dockerd[1137]: time="2025-02-26T04:09:00.850173433Z" level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers" Feb 26 11:10:45 manu-connect dockerd[1137]: time="2025-02-26T11:10:45.819352426Z" level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers" Feb 26 12:12:56 manu-connect dockerd[1137]: 2025/02/26 12:12:56 http: superfluous response.WriteHeader call from go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.(*respWriterWrapper).WriteHeader > Feb 26 12:15:54 manu-connect dockerd[1137]: 2025/02/26 12:15:54 http: superfluous response.WriteHeader call from go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.(*respWriterWrapper).WriteHeader >

mysql laravel docker docker-compose
1个回答
0
投票

2025-02-25T08:30:51.994108Z 1428 Query DROP DATABASE laravel 2025-02-25T08:30:52.208484Z 1428 Query DROP DATABASE testing 2025-02-26T04:08:56.890488Z 1637 Query DROP DATABASE RECOVER_YOUR_DATA 2025-02-26T04:08:57.105557Z 1637 Query DROP DATABASE laravel 2025-02-26T11:10:41.646234Z 959 Query DROP DATABASE RECOVER_YOUR_DATA 2025-03-01T01:46:51.582832Z 3356 Query DROP DATABASE RECOVER_YOUR_DATA

在此上,我从未从“密码”中更改我的.env中数据库的默认密码,因此看来某人 /某物已经能够访问我的VPS并删除数据库。
解决方案是我更改了Docker-compose,因此MySQL容器没有孤单的外部连接,并且我更改了.env.
中的密码。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.