Mysql 5.7 docker安装
首先从 Docker Hub 拉取官方的 MySQL 5.7 镜像(指定版本标签。运行 MySQL 容器需要配置。
·
一、拉取 MySQL 5.7 镜像
首先从 Docker Hub 拉取官方的 MySQL 5.7 镜像(指定版本标签5.7,避免默认的latest版本):
bash
docker pull mysql:5.7
拉取完成后,可通过以下命令验证:
bash
docker images | grep mysql
# 输出示例:mysql 5.7 xxxxxxxx 2 weeks ago 448MB
二、创建并运行 MySQL 5.7 容器
运行 MySQL 容器需要配置端口映射(方便外部访问)、数据卷(持久化数据)、环境变量(设置初始密码等),推荐命令如下:
bash
docker run -d \
--name mysql57 \
-p 3306:3306 \
-v /data/mysql57:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=your_root_password \
-e MYSQL_DATABASE=initial_db \
-e MYSQL_USER=custom_user \
-e MYSQL_PASSWORD=custom_password \
--restart=always \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
参数说明:
| 参数 | 作用 |
|---|---|
-d |
后台运行容器 |
--name mysql57 |
给容器命名(自定义,方便后续管理) |
-p 3306:3306 |
端口映射:主机 3306 端口 → 容器 3306 端口(若主机 3306 被占用,可改为3307:3306) |
-v /data/mysql57:/var/lib/mysql |
数据卷挂载:将容器内 MySQL 数据目录(/var/lib/mysql)映射到主机/data/mysql57,确保数据持久化(容器删除后数据不丢失) |
MYSQL_ROOT_PASSWORD |
必须设置:root 用户的初始密码 |
MYSQL_DATABASE |
可选:自动创建一个初始数据库(如initial_db) |
MYSQL_USER/MYSQL_PASSWORD |
可选:自动创建一个普通用户及密码,并授予初始数据库的权限 |
--restart=always |
容器退出时自动重启(服务器重启后也能自动启动) |
| 最后两行 | MySQL 服务的额外配置:设置默认字符集为utf8mb4(支持 emoji 表情和更多字符) |
三、容器管理与操作
1. 查看容器状态
bash
docker ps | grep mysql57
# 若状态为`Up`,表示运行正常
2. 进入容器内部
如需在容器内操作 MySQL(如执行 SQL 命令),可进入容器的 bash 终端:
bash
docker exec -it mysql57 /bin/bash
进入后,通过 MySQL 客户端登录:
bash
mysql -u root -p
# 输入创建容器时设置的`MYSQL_ROOT_PASSWORD`密码
3. 外部连接 MySQL
通过本地或其他机器的 MySQL 客户端(如 Navicat、DBeaver)连接:
- 主机:Docker 宿主机的 IP 地址(如服务器公网 IP 或本地
127.0.0.1) - 端口:映射的主机端口(如
3306,若修改过则用实际端口) - 用户名:
root或自定义用户(MYSQL_USER) - 密码:对应用户的密码(
MYSQL_ROOT_PASSWORD或MYSQL_PASSWORD)
四、数据备份与恢复
1. 备份数据库
通过mysqldump命令备份容器内的数据库到主机:
bash
# 备份所有数据库
docker exec mysql57 mysqldump -u root -p'your_root_password' --all-databases > /backup/mysql57_all_$(date +%Y%m%d).sql
# 仅备份指定数据库(如initial_db)
docker exec mysql57 mysqldump -u root -p'your_root_password' initial_db > /backup/mysql57_initialdb_$(date +%Y%m%d).sql
2. 恢复数据库
将主机的备份文件导入容器内的 MySQL:
bash
# 恢复到指定数据库(需先确保数据库存在)
cat /backup/mysql57_initialdb_20231017.sql | docker exec -i mysql57 mysql -u root -p'your_root_password' initial_db
五、常见问题解决
1. 端口冲突(port is already allocated)
主机 3306 端口被占用(如已安装本地 MySQL),解决方法:
- 停止占用端口的服务:
sudo systemctl stop mysql - 或修改映射端口:
-p 3307:3306(使用主机 3307 端口)
2. 数据卷权限问题(容器启动失败,日志显示权限错误)
主机挂载目录权限不足,导致 MySQL 无法写入数据:
bash
# 修复主机目录权限(MySQL容器内默认用户ID为999)
sudo chown -R 999:999 /data/mysql57
sudo chmod -R 755 /data/mysql57
3. 忘记 root 密码
通过以下步骤重置:
- 停止容器:
docker stop mysql57 - 无密码启动容器(临时):
bash
docker run -d --name mysql57-tmp -p 3306:3306 -v /data/mysql57:/var/lib/mysql mysql:5.7 --skip-grant-tables - 进入容器并修改密码:
bash
docker exec -it mysql57-tmp /bin/bash mysql -u root # 无需密码直接登录 # 执行SQL重置密码 use mysql; update user set authentication_string=password('new_password') where user='root'; flush privileges; exit; - 停止临时容器并重启原容器:
bash
docker stop mysql57-tmp && docker rm mysql57-tmp docker start mysql57
更多推荐
所有评论(0)