当前位置: 首页 > news >正文

【实战总结】Docker部署MySQL完整教程:附docker-compose模板与常用命令大全

使用 Docker 启动 MySQL 是一个非常常见且高效的部署方式。下面为您提供一份从基础到高级的完整指南。

一、基础启动方法

1. 最简单的启动方式
# 拉取最新版 MySQL 镜像(可选,run 时会自动拉取)
docker pull mysql:8.0# 启动 MySQL 容器
docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-p 3306:3306 \mysql:8.0
2. 推荐的生产环境启动方式
docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORD=YourStrongPassword123! \-e MYSQL_DATABASE=myapp \-e MYSQL_USER=app_user \-e MYSQL_PASSWORD=AppUserPass123! \-p 3306:3306 \-v mysql_data:/var/lib/mysql \-v /host/mysql/conf:/etc/mysql/conf.d \--restart=unless-stopped \mysql:8.0

二、环境变量配置

核心环境变量

变量名

说明

示例

​MYSQL_ROOT_PASSWORD​

必需 root用户密码

​MyRootPass123!​

​MYSQL_DATABASE​

自动创建的数据库

​myapp​

​MYSQL_USER​

自动创建的用户

​app_user​

​MYSQL_PASSWORD​

自动用户的密码

​AppUserPass123!​

​MYSQL_ALLOW_EMPTY_PASSWORD​

允许空密码

​yes​

​MYSQL_RANDOM_ROOT_PASSWORD​

生成随机root密码

​yes​

高级配置变量
docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORD=securepassword \-e MYSQL_INITDB_SKIP_TZINFO=1 \-e MYSQL_CHARSET=utf8mb4 \-e MYSQL_COLLATION=utf8mb4_unicode_ci \-p 3306:3306 \mysql:8.0

三、数据持久化

1. 使用 Docker Volume(推荐)
# 创建 volume
docker volume create mysql_data# 启动容器并使用 volume
docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORD=password \-v mysql_data:/var/lib/mysql \-p 3306:3306 \mysql:8.0
2. 使用主机目录
# 创建主机目录
mkdir -p /docker/mysql/data
mkdir -p /docker/mysql/conf# 启动容器并挂载目录
docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORD=password \-v /docker/mysql/data:/var/lib/mysql \-v /docker/mysql/conf:/etc/mysql/conf.d \-p 3306:3306 \mysql:8.0

四、配置文件定制

1. 创建自定义配置文件
# 创建配置目录
mkdir -p /docker/mysql/conf# 创建自定义配置文件
cat > /docker/mysql/conf/my.cnf << EOF
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-authentication-plugin=mysql_native_password# 性能优化
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
max_connections=1000# 日志配置
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2[client]
default-character-set=utf8mb4
EOF
2. 启动时应用配置
docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORD=password \-v /docker/mysql/data:/var/lib/mysql \-v /docker/mysql/conf:/etc/mysql/conf.d \-p 3306:3306 \mysql:8.0

五、网络配置

1. 使用自定义网络
# 创建自定义网络
docker network create mysql-network# 启动 MySQL
docker run -d \--name mysql-server \--network mysql-network \-e MYSQL_ROOT_PASSWORD=password \-p 3306:3306 \mysql:8.0# 其他容器连接到同一网络
docker run -d \--name web-app \--network mysql-network \-e DATABASE_URL=mysql://root:password@mysql-server:3306/myapp \my-web-app
2. 仅内部网络(不暴露端口)
docker run -d \--name mysql-internal \--network mysql-network \-e MYSQL_ROOT_PASSWORD=password \mysql:8.0

六、Docker Compose 部署

1. 基础 docker-compose.yml
version: '3.8'services:mysql:image: mysql:8.0container_name: mysql-serverenvironment:MYSQL_ROOT_PASSWORD: YourStrongPassword123!MYSQL_DATABASE: myappMYSQL_USER: app_userMYSQL_PASSWORD: AppUserPass123!ports:- "3306:3306"volumes:- mysql_data:/var/lib/mysql- ./conf:/etc/mysql/conf.dnetworks:- mysql-netrestart: unless-stoppedvolumes:mysql_data:networks:mysql-net:driver: bridge
2. 生产级 docker-compose.yml
version: '3.8'services:mysql:image: mysql:8.0container_name: mysql-productionenvironment:MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}MYSQL_DATABASE: ${MYSQL_DATABASE}MYSQL_USER: ${MYSQL_USER}MYSQL_PASSWORD: ${MYSQL_PASSWORD}ports:- "3306:3306"volumes:- mysql_data:/var/lib/mysql- ./mysql/conf:/etc/mysql/conf.d- ./mysql/init:/docker-entrypoint-initdb.dnetworks:- backendrestart: unless-stoppedhealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]timeout: 20sretries: 10adminer:image: adminercontainer_name: mysql-adminports:- "8080:8080"networks:- backendrestart: unless-stoppedvolumes:mysql_data:networks:backend:driver: bridge

环境变量文件 (.env):

MYSQL_ROOT_PASSWORD=YourSecureRootPassword123!
MYSQL_DATABASE=production_db
MYSQL_USER=app_user
MYSQL_PASSWORD=YourAppUserPassword123!

七、初始化脚本

1. 初始化数据库脚本

创建 ​​init/01-init.sql​​:

-- 创建额外数据库
CREATE DATABASE IF NOT EXISTS analytics;
CREATE DATABASE IF NOT EXISTS reporting;-- 创建专用用户
CREATE USER 'analytics_user'@'%' IDENTIFIED BY 'AnalyticsPass123!';
GRANT SELECT, INSERT, UPDATE ON analytics.* TO 'analytics_user'@'%';-- 创建初始表结构
USE myapp;
CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 启动时执行初始化
docker run -d \--name mysql-server \-e MYSQL_ROOT_PASSWORD=password \-v ./init:/docker-entrypoint-initdb.d \-p 3306:3306 \mysql:8.0

八、常用管理命令

1. 容器管理
# 查看运行中的容器
docker ps# 查看 MySQL 日志
docker logs mysql-server# 实时查看日志
docker logs -f mysql-server# 进入容器
docker exec -it mysql-server bash# 进入 MySQL 命令行
docker exec -it mysql-server mysql -u root -p
2. 备份与恢复
# 备份数据库
docker exec mysql-server mysqldump -u root -p password myapp > backup.sql# 恢复数据库
docker exec -i mysql-server mysql -u root -p password myapp < backup.sql# 备份整个数据目录
docker stop mysql-server
tar -czf mysql_backup.tar.gz /docker/mysql/data
docker start mysql-server

九、故障排查

1. 检查容器状态
# 查看容器状态
docker ps -a# 查看资源使用情况
docker stats mysql-server# 检查网络
docker network ls
2. 常见问题解决
# 容器启动失败,查看日志
docker logs mysql-server# 端口被占用,更改端口
docker run -d ... -p 3307:3306 ...# 数据卷权限问题
docker run -d ... -v mysql_data:/var/lib/mysql:Z ...
3. 性能监控
# 进入 MySQL 监控
docker exec -it mysql-server mysql -u root -p -e "SHOW PROCESSLIST;"# 查看性能状态
docker exec -it mysql-server mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"

十、安全最佳实践

1. 安全启动示例
docker run -d \--name mysql-secure \-e MYSQL_RANDOM_ROOT_PASSWORD=yes \-e MYSQL_USER=app_admin \-e MYSQL_PASSWORD=SecureAppPass123! \-e MYSQL_DATABASE=application_db \-p 3306:3306 \-v mysql_secure_data:/var/lib/mysql \--security-opt=no-new-privileges:true \--read-only \mysql:8.0
2. 使用 Secrets(Docker Swarm)
version: '3.8'services:mysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_passwordMYSQL_DATABASE: myappsecrets:- mysql_root_passwordvolumes:- mysql_data:/var/lib/mysqlsecrets:mysql_root_password:file: ./secrets/mysql_root_password.txt

十一、版本选择建议

版本标签

说明

使用场景

​mysql:8.0​

最新稳定版

推荐用于生产

​mysql:5.7​

老牌稳定版

兼容旧应用

​mysql:latest​

最新版

测试环境

​mysql:8.0.33​

特定版本

生产环境(版本固定)

推荐生产环境配置
# 生产环境启动命令
docker run -d \--name mysql-production \-e MYSQL_ROOT_PASSWORD=YourStrongPassword123! \-e MYSQL_DATABASE=production_db \-p 3306:3306 \-v mysql_production_data:/var/lib/mysql \-v /opt/mysql/conf:/etc/mysql/conf.d \--restart=unless-stopped \--memory=2g \--cpus=2 \mysql:8.0

通过以上配置,您可以轻松地在 Docker 环境中部署和管理 MySQL,享受容器化带来的便捷性和可移植性。记得根据实际需求调整配置参数,并在生产环境中做好数据备份和安全防护。

另外搭配便捷的80kmMYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。

http://www.dtcms.com/a/485756.html

相关文章:

  • C++ string类的使用
  • 【数据结构】:C 语言常见排序算法的实现与特性解析
  • C语言数据结构:算法复杂度(1)
  • 16km无人机WiFi中继图传模块,高速传输画质高清不卡顿
  • Linux系统C++开发环境搭建工具(二)—— etcd 使用指南
  • AI+大数据时代:如何从架构到生态重构时序数据库的价值?
  • 小小 Postgres,何以替代 Redis、MongoDB 甚至 ES?
  • Win10正式谢幕!附最后更新版本
  • 前端自动翻译插件webpack-auto-i18n-plugin的使用
  • 山东官方网站建设沧州网络推广渠成网络
  • 贺州网站建设公司家装设计需要学什么软件
  • 网站在百度上搜索不到丽水山耕品牌建设网站
  • 漂亮的门户网站dedecms游戏门户网站源码
  • thinkphp2.1网站挂文件国有企业投资建设项目
  • 网站首页的动态视频怎么做的建网站的流程和费用
  • 一些可以做翻译的网站微信小程序制作文档
  • 东莞公司网站开发首页制作教程
  • 河北大名网站建设招聘深圳网站设计首选柚米
  • 网站友链中英文外贸网站模版
  • html5企业网站模版经营一个网站要怎么做
  • 专业点网站制作公司龙泉市建设局网站
  • 网站设计资源seo优化网站的注意事项
  • 深圳网站运营托管163邮箱怎么申请企业邮箱
  • 孝感市门户网站传媒wordpress博客
  • 做网站推广的销售电话开场白wordpress注册邮箱怎么修改
  • 在哪公司建设网站东莞seo关键词搜索关键词
  • 万网虚拟服务器怎么做网站内容模板网站如何做优化
  • 网站底部关键词内链个人微信公众平台注册流程
  • 兰州seo网站排名高新西区网站建设
  • 山东济南网站开发移动商务网站开发课程