本文最后更新于184 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
1、MySQL Docker 镜像拉取与部署
1.1 镜像拉取
1.1.1 从华为云拉取 MySQL 8.0 镜像
# 执行镜像拉取命令
docker pull swr.cn-east-3.myhuaweicloud.com/library/mysql:8.0
# 验证镜像是否拉取成功
docker images | grep mysql
1.2 环境准备
1.2.1 创建数据存储目录
# 创建数据存储和配置目录
sudo mkdir -p /host/mysql/data /host/mysql/conf /host/mysql/backup
# 设置正确的目录权限
sudo chmod -R 755 /host/mysql
1.3 容器部署
1.3.1 运行 MySQL 容器
docker run -d \
--name mysql-server \
-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=xiaojiu \
-e MYSQL_PASSWORD=admin@123 \
-p 3306:3306 \
-v /host/mysql/data:/var/lib/mysql \
-v /host/mysql/conf:/etc/mysql/conf.d \
swr.cn-east-3.myhuaweicloud.com/library/mysql:8.0
1.3.2 环境变量配置说明
MYSQL_RANDOM_ROOT_PASSWORD=yes:自动生成安全的随机 root 密码MYSQL_DATABASE=myapp:创建默认数据库MYSQL_USER=xiaojiu:创建应用用户MYSQL_PASSWORD=admin@123:设置用户密码
1.4 状态验证
1.4.1 检查容器运行状态
# 查看容器运行状态
docker ps
# 查看容器详细信息
docker inspect mysql-server
# 监控容器日志
docker logs mysql-server
# 获取自动生成的 root 密码
docker logs mysql-server | grep "GENERATED ROOT PASSWORD"
1.5 数据库连接测试
1.5.1 连接到 MySQL 数据库
# 使用 root 用户连接(需要输入自动生成的密码)
docker exec -it mysql-server mysql -u root -p
# 使用创建的应用用户连接
docker exec -it mysql-server mysql -u xiaojiu -padmin@123 myapp
1.5.2 数据库基本操作
-- 显示所有数据库
SHOW DATABASES;
-- 使用 myapp 数据库
USE myapp;
-- 创建测试表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入测试数据
INSERT INTO users (username, email) VALUES ('test_user', 'test@example.com');
-- 查询数据验证
SELECT * FROM users;
-- 查看用户权限
SHOW GRANTS FOR 'xiaojiu'@'%';
-- 退出 MySQL 客户端
EXIT;
1.6 镜像管理
1.6.1 镜像标签优化
# 为华为云镜像打上简化标签
docker tag swr.cn-east-3.myhuaweicloud.com/library/mysql:8.0 mysql:8.0
# 验证标签创建
docker images
# 使用简化标签运行测试容器
docker run -d --name mysql-test mysql:8.0
1.7 容器管理
1.7.1 日常维护命令
# 停止容器
docker stop mysql-server
# 启动容器
docker start mysql-server
# 重启容器
docker restart mysql-server
# 删除容器(谨慎操作)
docker rm -f mysql-server
# 进入容器内部
docker exec -it mysql-server bash
# 监控容器资源使用
docker stats mysql-server
1.8 数据管理
1.8.1 数据库备份操作
# 创建备份目录
sudo mkdir -p /host/mysql/backup
# 备份所有数据库
docker exec mysql-server mysqldump -u root -p[生成的密码] --all-databases > /host/mysql/backup/all_databases_$(date +%Y%m%d).sql
# 备份特定数据库
docker exec mysql-server mysqldump -u xiaojiu -padmin@123 myapp > /host/mysql/backup/myapp_backup.sql
1.8.2 数据库恢复操作
# 恢复数据库
docker exec -i mysql-server mysql -u root -p[生成的密码] < /host/mysql/backup/backup.sql
1.9 故障排查
1.9.1 常见问题解决方案
# 检查容器日志
docker logs mysql-server
# 权限问题修复
sudo chown -R 999:999 /host/mysql/data
sudo chmod -R 755 /host/mysql/data
# 验证目录权限
ls -la /host/mysql/
# 重新启动服务
docker start mysql-server
1.10 配置优化
1.10.1 自定义 MySQL 配置
# 创建自定义配置文件
sudo vi /host/mysql/conf/custom.cnf
1.10.2 配置文件示例
[mysqld]
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 连接配置
max_connections=1000
wait_timeout=28800
# 性能优化
innodb_buffer_pool_size=256M
# 日志配置
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
[client]
default-character-set=utf8mb4
1.11 网络连接验证
1.11.1 外部连接测试
# 安装 MySQL 客户端工具
sudo apt-get update && sudo apt-get install mysql-client -y
# 从宿主机连接测试
mysql -h 127.0.0.1 -P 3306 -u xiaojiu -padmin@123 myapp
# 查看容器网络信息
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-server
现在您已经完成了从镜像拉取到 MySQL 容器完整部署的所有步骤!

nice