保姆级教程Docker部署MySQL镜像

目录

1、安装Docker及可视化工具

2、创建挂载目录

​3、准备配置文件

4、运行MySQL容器

5、Compose运行MySQL容器

6、查看MySQL运行状态

7、常见问题


1、安装Docker及可视化工具

Docker及可视化工具的安装可参考:Ubuntu上安装 Docker及可视化管理工具

2、创建挂载目录

# 创建宿主机mysql挂载目录
sudo mkdir -p /data/docker/mysql/config

​3、准备配置文件

# 1.创建配置文件
sudo touch /data/docker/mysql/config/my.cnf

配置文件的内容如下:

[mysqld]
# 设置3306端口
port=3306
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M

# === 日志相关 ===
## >>> 错误日志
# 错误日志存放文件,默认 datadir 目录下
log_error=/var/lo
<think>好的,我现在要帮用户解决如何使用Docker运行MySQL镜像的问题。用户已经提供了一些站内引用,我需要参考这些内容并结合自己的知识来给出详细的步骤。 首先,用户的需求很明确,就是想知道如何用Docker运行MySQL镜像。我需要确保回答涵盖从拉取镜像到运行容器,以及相关的配置和常见问题。根据引用内容,用户提供的例子中有拉取镜像、运行容器时设置环境变量、端口映射等步骤,这些都需要包括在内。 接下来,我需要整理步骤。第一步应该是拉取MySQL镜像,这里用户提到可以指定版本,比如5.7或8.0,避免使用latest标签,这点需要注意。然后运行容器,参数方面包括端口映射、设置密码、数据持久化等。引用中多次提到使用-e MYSQL_ROOT_PASSWORD来设置密码,这很重要,因为MySQL容器必须要有这个环境变量才能启动。 数据持久化方面,用户引用里提到了-v参数挂载目录,防止数据丢失。需要解释清楚宿主机目录和容器目录的对应关系,以及如何创建持久化卷。此外,用户可能关心如何进入容器执行命令,比如docker exec -it进入bash,这在引用[3]中有提到,所以需要包含这个步骤。 另外,用户提供的引用中有使用Docker Compose的例子,虽然用户当前的问题可能不需要,但作为扩展内容可以加入,方便用户了解更复杂的部署方式。同时,常见问题如端口冲突、版本兼容性(比如MySQL 8.0的Navicat连接问题)也需要提及解决方案,引用[4]中提到了这一点,所以需要说明如何解决认证问题。 还要检查是否需要包括其他最佳实践,比如设置重启策略、资源限制等,但这些可能对新手来说稍复杂,可以放在高配置部分。确保命令示例正确,比如docker run的参数顺序是否正确,是否有拼写错误。 最后,生成相关问题,帮助用户进一步探索,比如如何备份数据、修改配置、处理连接问题等,这些都是用户可能遇到的后续问题。需要确保引用标记正确,参考用户提供的引用编号,比如[^1]、[^3]等。 总结一下,回答结构应该是:拉取镜像、运行容器(基本命令和参数)、数据持久化、容器管理、高配置、常见问题、相关问题和引用。需要步骤清晰,示例明确,覆盖用户可能需要的所有方面,同时参考用户提供的引用内容,确保信息准确。</think>### 如何使用 Docker 运行 MySQL 镜像(分步指南) --- #### 一、基础操作流程 1. **拉取 MySQL 镜像** ```bash docker pull mysql:5.7 # 推荐指定版本(5.7/8.0),避免使用默认 latest 标签[^4] ``` - 示例: ```bash docker pull mysql:8.0 # 拉取 MySQL 8.0 docker pull mysql # 默认拉取 latest 版本(可能为 8.0+) ``` 2. **运行 MySQL 容器** ```bash docker run -d \ --name mysql-container \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /宿主机目录/mysql_data:/var/lib/mysql \ mysql:5.7 ``` - **参数解析**: - `-d`:后台运行(detach 模式) - `--name`:自定义容器名称 - `-p 3306:3306`:将宿主机的 3306 端口映射到容器的 3306 端口[^1] - `-e MYSQL_ROOT_PASSWORD`:必须设置的环境变量(MySQL root 用户密码)[^1][^3] - `-v`:挂载数据卷,实现数据持久化[^3] --- #### 二、关键配置项说明 | 配置项 | 作用 | 示例 | |-------|------|------| | **MYSQL_DATABASE** | 初始化数据库 | `-e MYSQL_DATABASE=mydb`[^3] | | **MYSQL_USER** | 创建普通用户 | `-e MYSQL_USER=dev` | | **MYSQL_PASSWORD** | 设置普通用户密码 | `-e MYSQL_PASSWORD=dev123` | | **--character-set-server** | 设置字符集 | `--character-set-server=utf8mb4`[^5] | | **--restart** | 自动重启策略 | `--restart=always` | **生产环境推荐命令**: ```bash docker run -d \ --name mysql-prod \ -p 3306:3306 \ -v mysql_data:/var/lib/mysql \ # 使用命名卷代替路径挂载 -e MYSQL_ROOT_PASSWORD=strongP@ssw0rd \ -e MYSQL_DATABASE=app_db \ --restart unless-stopped \ mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci ``` --- #### 三、容器管理与交互 1. **查看运行状态** ```bash docker ps -a | grep mysql # 查看 MySQL 容器状态 docker logs mysql-container # 查看日志(排查启动错误) ``` 2. **进入容器终端** ```bash docker exec -it mysql-container mysql -u root -p # 输入密码后进入 MySQL 命令行[^3] ``` 3. **数据备份与恢复** ```bash # 备份数据库 docker exec mysql-container sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql # 恢复数据库 docker exec -i mysql-container mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < backup.sql ``` --- #### 四、常见问题解决 1. **MySQL 8.0 连接报错** - 现象:`caching_sha2_password` 认证方式导致客户端工具(如 Navicat)无法连接 - 解决方案: ```bash # 启动容器时添加参数修改认证方式 docker run ... mysql:8.0 --default-authentication-plugin=mysql_native_password[^4] ``` 2. **端口冲突** - 修改宿主机端口:`-p 3307:3306`(宿主机用 3307 端口映射容器 3306 端口) 3. **数据卷权限问题** - 添加 `--privileged=true` 参数临时解决权限限制 --- #### 五、Docker Compose 部署(可选) ```yaml # docker-compose.yml version: '3' services: mysql: image: mysql:8.0 ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: my-secret-pw MYSQL_DATABASE: app_db restart: always command: - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" volumes: mysql_data: ``` 启动命令: ```bash docker-compose up -d # 一键部署[^2] ``` --- ### 相关问题 1. 如何修改已运行 MySQL 容器的 root 密码? 2. 怎样通过宿主机直接访问 Docker 内的 MySQL 服务? 3. 如何导出/导入 MySQL 容器的完整数据? 4. DockerMySQL 的配置文件(my.cnf)如何自定义? --- : MySQL 基础运行方法参考《Docker运行MySql镜像》 [^2]: Docker Compose 配置来自《保姆教程Docker部署MySQL镜像》 : 容器管理命令详见《docker 运行mysql镜像_Docker下使用mysql镜像》 [^4]: 版本兼容性说明引用《Docker运行MySql镜像》 [^5]: 字符集配置参考《Docker下使用mysql镜像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值