Docker部署MySQL 8完整指南:从安装到高可用配置
Docker离线安装MySQL 8
1. 环境准备
在无网络环境中部署MySQL容器,需提前获取镜像文件并传输到目标机器:
# 在联网机器下载镜像
docker pull mysql:8.0.36
# 保存镜像为离线包
docker save -o mysql8.tar mysql:8.0.36
# 传输文件到离线环境后加载镜像
docker load -i mysql8.tar
2. 容器启动参数配置
docker run -d \
--name mysql8-server \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_secure_password \
-v /custom/mysql/conf:/etc/mysql/conf.d \
-v /custom/mysql/data:/var/lib/mysql \
--restart=unless-stopped \
mysql:8.0.36 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--default-time-zone=+8:00
3. 关键参数解析
- 网络映射:
-p 3306:3306
绑定宿主机端口 - 持久化存储:
-v
参数挂载配置目录和数据目录 - 字符集配置:强制使用utf8mb4字符集
- 时区设置:
--default-time-zone
配置东八区
Docker在线安装MySQL 8
1. 标准安装流程
# 拉取官方镜像
docker pull mysql:8.0.36
# 启动基础容器
docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=securepass123 \
-p 3307:3306 \
mysql:8.0.36
2. 验证容器状态
docker ps -a --filter name=mysql8
docker logs mysql8 --tail 50
MySQL镜像管理
1. 镜像版本选择策略
# 查看可用版本
docker search mysql --filter "is-official=true"
# 指定精确版本
docker pull mysql:8.0.36
2. 镜像安全扫描
docker scan mysql:8.0.36
MySQL容器化配置
1. 配置文件挂载
创建自定义配置文件:
# my-custom.cnf
[mysqld]
max_connections=500
innodb_buffer_pool_size=1G
query_cache_type=1
slow_query_log=1
启动时挂载配置:
docker run -d \
-v /path/to/custom.conf:/etc/mysql/conf.d/custom.cnf \
mysql:8.0.36
2. 安全加固配置
# 启动时设置密码策略
docker run -d \
-e MYSQL_SECURE=1 \
-e validate_password.policy=STRONG \
mysql:8.0.36
MySQL容器操作命令
1. 容器生命周期管理
# 启动/停止
docker start mysql8
docker stop mysql8
# 配置更新后重启
docker restart mysql8
2. 进入容器操作
docker exec -it mysql8 mysql -uroot -p
MySQL数据库管理
1. 用户权限管理
-- 创建业务用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'ComplexP@ssw0rd!';
-- 权限分配
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';
-- 权限刷新
FLUSH PRIVILEGES;
-- 查看用户权限
SHOW GRANTS FOR 'app_user'@'%';
2. 数据库维护操作
-- 创建测试数据库
CREATE DATABASE test_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 定时任务启用
SET GLOBAL event_scheduler = ON;
-- 性能监控
SHOW ENGINE INNODB STATUS;
镜像私有仓库管理
1. 推送到私有仓库
# 标记镜像
docker tag mysql:8.0.36 private-registry:5000/mysql:8.0.36
# 推送镜像
docker push private-registry:5000/mysql:8.0.36
2. 从私有仓库部署
docker pull private-registry:5000/mysql:8.0.36
docker run -d \
--name corp-mysql \
-p 3308:3306 \
private-registry:5000/mysql:8.0.36
数据持久化方案
1. 卷管理最佳实践
# 创建专用数据卷
docker volume create mysql_data
# 启动时挂载
docker run -d \
-v mysql_data:/var/lib/mysql \
mysql:8.0.36
# 查看卷信息
docker volume inspect mysql_data
2. 备份恢复策略
# 执行在线备份
docker exec mysql8 mysqldump -u root -p --all-databases > full_backup.sql
# 数据恢复操作
docker exec -i mysql8 mysql -u root -p < full_backup.sql
故障排查指南
1. 日志分析技巧
# 实时查看日志
docker logs mysql8 --follow
# 过滤错误信息
docker logs mysql8 | grep -i error
2. 常见问题解决
-- 密码重置步骤
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- 连接数调整
SET GLOBAL max_connections = 1000;
性能优化配置
1. 内存参数调整
# my.cnf优化配置
[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G
thread_cache_size=64
table_open_cache=4000
2. 查询优化设置
-- 慢查询配置
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
-- 索引分析
EXPLAIN ANALYZE SELECT * FROM large_table WHERE created_at > '2023-01-01';
安全防护措施
1. 网络层防护
# 限制容器网络访问
docker network create --subnet=172.20.0.0/24 mysql-net
docker run -d \
--network mysql-net \
--ip 172.20.0.100 \
mysql:8.0.36
2. 数据库审计配置
# 审计日志配置
[mysqld]
audit_log=FORCE_PLUS_PERMANENT
audit_log_format=JSON
audit_log_policy=ALL
容器编排集成
1. Docker Compose部署
version: '3.8'
services:
mysql:
image: mysql:8.0.36
environment:
MYSQL_ROOT_PASSWORD: securepass123
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: userpass123
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- backend
volumes:
mysql_data:
networks:
backend:
driver: bridge
2. Kubernetes部署示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0.36
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secrets
key: root-password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
正文到此结束
相关文章
热门推荐
评论插件初始化中...