我遇到的问题是,在运行一定时间之后(似乎是随机的,但通常不会发生在应用程序运行超过12小时之后),当我尝试访问Web应用程序时,我在浏览器中找到以下错误消息:
Illuminate \ Database\ QueryException
SQLSTATE[HY000] [1049] Unknown database 'laravel'
select * from `sessions` where `id` = NScfhR1av3SqPJWO658qfYzrevdBmtpB7Sd7801z limit 1
是我数据库的名称,似乎由于某种原因,它被删除了,我不知道为什么。在我的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 >
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
解决方案是我更改了Docker-compose,因此MySQL容器没有孤单的外部连接,并且我更改了.env.中的密码。