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

Docker使用官方镜像/国内镜像源(阿里云、华为云 安装 MySQL 5.7

以下是通过 Docker 使用 官方镜像国内镜像源(阿里云、华为云) 安装 MySQL 5.7,并实现数据库导入导出的完整步骤:


1. 拉取 MySQL 5.7 镜像

方式一:使用 Docker 官方镜像
docker pull mysql:5.7
方式二:使用阿里云镜像(加速下载)

阿里云镜像仓库地址(需替换 <region>,如 registry.cn-hangzhou.aliyuncs.com):

docker pull registry.cn-hangzhou.aliyuncs.com/library/mysql:5.7
方式三:使用华为云镜像

华为云镜像仓库地址(需替换 <region>,如 swr.ap-southeast-1.myhuaweicloud.com):

docker pull swr.ap-southeast-1.myhuaweicloud.com/library/mysql:5.7

2. 运行 MySQL 5.7 容器

基础命令
docker run -d \
  --name mysql5.7 \ #创建容器名称mysql5.7
  -p 3306:3306 \ #端口映射:容器mysql的3306端口与宿主机3306端口映射
  -e TZ=Asia/Shanghai \ #设置容器时区
  -e MYSQL_ROOT_PASSWORD=your_password \  # 设置 root 密码
  -v /path/to/mysql/data:/var/lib/mysql \  # 挂载数据目录(持久化):实际上是将主机上的 /path/to/mysql/data 目录挂载到了容器内的 /var/lib/mysql 目录。MySQL 会将所有数据库文件存储在 /var/lib/mysql 中,因此这些文件会被写入主机的 /path/to/mysql/data
  -v /data/mysql-docker/mysql_init:/docker-entrypoint-initdb.d \ #将宿主机上自定义的初始化脚本(如 SQL 文件或 Shell 脚本)复制到容器内的 /docker-entrypoint-initdb.d 目录。当容器启动时,Docker 会自动执行该目录下的脚本,用于初始化数据库或其他配置。
  -v /path/to/mysql/conf:/etc/mysql/conf.d \  # 将宿主机MySQL配置文件目录/path/to/mysql/conf挂在到容器MySQL配置文件目录/etc/mysql/conf.d 
  mysql:5.7
参数说明:
  • -d--detach: 后台运行容器
  • --name: 为容器指定一个名字
  • -p --publish: 将容器的端口映射到主机上[主机端口:容器端口]
  • -e--env: 设置环境变量
  • -v --volume: 挂载一个目录或文件到容器中(宿主机上定义初始化脚本挂载到容器)
  • -i--interactive: 保持 STDIN 打开,即使没有附加也保持打开状态。
  • -t --tty: 分配一个伪终端 (TTY)。
  • --character-set-server=utf8mb4:设置字符集(可选,在命令中添加)。
举例:

使用官方镜像

root@zyubuntu2204pc:/data/mysql-docker# ./docker_run.sh 
912bf09d6912e4c0b723858082f5dbb8783d6f7dfa2bd6673acf9021aff16c27
root@zyubuntu2204pc:/data/mysql-docker# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        5.7       5107333e08a8   15 months ago   501MB
root@zyubuntu2204pc:/data/mysql-docker# 
root@zyubuntu2204pc:/data/mysql-docker# 

创建和授权MySQL数据持久化目录:

如果/var/lib/没有mysql目录,创建/var/lib/mysql

chmod 777 /var/lib/mysql && chown -R 999:999 /var/lib/mysql

安装创建并运行MySQL容器:
docker run -d \
  --name mysql5.7 \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=abc123456 \
  -e TZ=Asia/Shanghai \
  -v /data/mysql-docker/mysql_data:/var/lib/mysql \
  -v /data/mysql-docker/mysql_init:/docker-entrypoint-initdb.d \ 
  -v /data/mysql-docker/mysql_cnf:/etc/mysql/conf.d \
  mysql:5.7

root@zyubuntu2204pc:/data/mysql-docker# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                    NAMES
912bf09d6912   mysql:5.7   "docker-entrypoint.s…"   30 minutes ago   Up 12 minutes   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   mysql5.7
root@zyubuntu2204pc:/data/mysql-docker#

检查 Docker 容器中的 MySQL 数据是否成功持久化到主机目录参考此链接


3. 进入 MySQL 容器执行命令

docker exec -it mysql5.7 bash
登录 MySQL
mysql -u root -p
# 输入密码(即 MYSQL_ROOT_PASSWORD 的值)

4. 导入 SQL 文件到数据库

方法一:通过 docker exec 直接导入
# 将宿主机 SQL 文件复制到容器内
docker cp /path/to/your_database.sql mysql5.7:/tmp/

# 进入容器执行导入
docker exec -it mysql5.7 bash -c "mysql -u root -p'your_password' your_database < /tmp/your_database.sql"
方法二:通过 mysql 客户端导入
# 在宿主机直接执行(需安装 mysql-client)
mysql -h 127.0.0.1 -u root -p'your_password' your_database < /path/to/your_database.sql

5. 导出数据库为 SQL 文件

方法一:通过 docker exec 导出
# 导出数据库到容器内
docker exec mysql5.7 sh -c 'mysqldump -u root -p"your_password" your_database > /tmp/your_database.sql'

# 将导出的文件复制到宿主机
docker cp mysql5.7:/tmp/your_database.sql /path/to/save/
方法二:通过 mysqldump 直接导出
# 在宿主机执行(需安装 mysql-client)
mysqldump -h 127.0.0.1 -u root -p'your_password' your_database > /path/to/save/your_database.sql

6. 自定义 MySQL 配置(可选)

在挂载的配置文件目录 /path/to/mysql/conf 中创建 my.cnf

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 1000
default-time-zone = '+08:00'  # 设置时区为东八区

重启容器使配置生效:

docker restart mysql5.7

7. 验证 MySQL 运行状态

# 查看容器日志
docker logs mysql5.7
# 进入容器检查 MySQL 服务
docker exec -it mysql5.7 bash
systemctl status mysql  # 或执行 `mysql -u root -p`

常见问题

1. 权限问题

如果挂载目录报错(如 chown 失败),尝试赋予宿主机目录权限:

sudo chmod -R 777 /path/to/mysql/data
2. 字符集乱码

确保在配置文件中设置 utf8mb4,并在创建数据库时指定字符集:

CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3. 远程连接失败

修改 MySQL 用户权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

相关文章:

  • 智能文档解析专家
  • AI应用案例(1)——智能工牌和会话质检
  • Crawl4AI:专为AI设计的开源网页爬虫工具,释放大语言模型的潜能
  • 解决Luckysheet在线预览编辑Excel、PDF.....无法在同一个界面创建多个luckysheet实列问题
  • javaweb小项目
  • 贡献法(C++)
  • w2ui 水平滚动移动 虚拟列 数据丢失
  • 建筑长明灯、长流水成难题?楼宇自控系统来破局
  • forms实现贪吃蛇
  • Python打包大模型文件以及使用Docker进行运行镜像
  • 六、Linux系统 DRM调试工具modetest
  • 【C++】vector的模拟实现和相关接口介绍
  • 通过通道扩展实现 NI-DAQmx 的同步与触发
  • Python FastAPI + Celery + RabbitMQ 分布式图片水印处理系统
  • 软件工程-UML
  • DEBUG:工具简介
  • Python----机器学习(线性回归:自求导的方法实现)
  • Redis 的哨兵模式
  • 蓝桥杯 01游戏
  • 数据结构 哈希表 字符串哈希
  • 河南:响鼓重锤对违规吃喝问题露头就打、反复敲打、人人喊打
  • 农行回应“病重老人被要求亲自取钱在银行去世”:全力配合公安机关调查
  • 丹麦外交大臣拉斯穆森将访华
  • 中央军委决定调整组建3所军队院校
  • 中国—美国经贸合作对接交流会在华盛顿成功举行
  • 爱德华多·阿拉纳宣誓就任秘鲁新总理