> 技术文档 > Docker使用官方镜像/国内镜像源(阿里云、华为云 安装 MySQL 5.7_docker 阿里云镜像源

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

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


1. 拉取 MySQL 5.7 镜像

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

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

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

华为云镜像仓库地址(需替换 ,如 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 912bf09d6912e4c0b723858082f5dbb8783d6f7dfa2bd6673acf9021aff16c27root@zyubuntu2204pc:/data/mysql-docker# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 5107333e08a8 15 months ago 501MBroot@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 -aCONTAINER ID IMAGE COMMAND  CREATED STATUS PORTS NAMES912bf09d6912 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.7root@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 = utf8mb4collation-server = utf8mb4_unicode_cimax_connections = 1000default-time-zone = \'+08:00\' # 设置时区为东八区

重启容器使配置生效:

docker restart mysql5.7

7. 验证 MySQL 运行状态

# 查看容器日志docker logs mysql5.7# 进入容器检查 MySQL 服务docker exec -it mysql5.7 bashsystemctl 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;