mysql_data
持久化挂载到宿主机,并防止 MySQL 数据在容器重启后丢失。
步骤 1:编辑 docker-compose.yml
-
打开你的
docker-compose.yml
文件并进行以下修改:- 确保
volumes
部分将 MySQL 数据目录/var/lib/mysql
持久化到宿主机的mysql_data
目录。
version: '3.8'services:mysql:image: mysql:8.0container_name: mysql8restart: unless-stoppedenvironment:MYSQL_ROOT_PASSWORD: 123456ports:- "3306:3306"volumes:- ./mysql_data:/var/lib/mysql # 持久化数据到宿主机的 mysql_data 目录volumes:mysql_data: {} # 创建名为 mysql_data 的卷,用于持久化数据
- 确保
-
解释修改:
./mysql_data:/var/lib/mysql
: 这里我们将宿主机的mysql_data
目录挂载到容器中的/var/lib/mysql
目录。这个目录是 MySQL 存储数据的地方。使用./mysql_data
会将数据保存在宿主机的当前目录中的mysql_data
文件夹里,确保数据持久化。volumes: mysql_data: {}
:这行代码创建了一个名为mysql_data
的命名卷,Docker 会自动管理此卷。你也可以使用本地目录来存储数据,方法在上面的配置中已经给出。
步骤 2:检查并创建 mysql_data
文件夹
如果你决定将 MySQL 数据存储在宿主机的 mysql_data
文件夹中,确保该文件夹在宿主机上存在并且拥有适当的权限。如果文件夹不存在,Docker 会自动创建它,但你可以提前检查。
-
在你的项目目录下创建
mysql_data
文件夹:mkdir mysql_data
-
检查权限:
确保宿主机上的mysql_data
目录具有适当的权限,以便 MySQL 容器能够读写数据。sudo chown -R 999:999 mysql_data/
其中
999:999
是 MySQL 默认的用户和组 ID,你也可以根据你的系统调整这个值。
步骤 3:停止并重启 Docker Compose
-
停止当前的 Docker Compose 服务并移除容器(如果已经启动):
docker-compose down
-
然后重新启动服务:
docker-compose up -d
这将根据更新后的
docker-compose.yml
文件重新启动 MySQL 容器,并挂载数据卷。
步骤 4:验证挂载是否成功
-
使用
docker ps
命令确认容器是否正在运行:docker ps
-
查看 MySQL 容器的日志,确保没有错误:
docker logs mysql8
如果看到类似以下输出,说明 MySQL 已成功启动:
2025-01-01T00:00:00.000000Z 0 [Note] mysqld: ready for connections.
-
你也可以进入 MySQL 容器并验证数据是否持久化:
docker exec -it mysql8 bash
然后进入 MySQL 客户端:
mysql -u root -p
输入密码
123456
进行登录。查看数据库内容:
SHOW DATABASES;
-
确保数据库和数据表已经正确创建,并且数据存储在宿主机的
mysql_data
文件夹中。
步骤 5:查看宿主机中的数据
-
在宿主机上,查看
mysql_data
文件夹中的内容,确保数据库数据文件被保存在其中。ls -l ./mysql_data
你应该会看到类似于以下的 MySQL 数据文件:
-rw-r----- 1 999 999 4096 Jan 1 00:00 ./mysql_data/ibdata1 -rw-r----- 1 999 999 16384 Jan 1 00:00 ./mysql_data/ib_logfile0 -rw-r----- 1 999 999 16384 Jan 1 00:00 ./mysql_data/ib_logfile1
结论:
- 通过上述步骤,你已经正确配置了
mysql_data
持久化挂载,确保了容器重启后数据不会丢失。 - 数据被保存在宿主机的
mysql_data
目录下,容器重启时可以恢复并保留数据。