Docker使用官方镜像/国内镜像源(阿里云、华为云 安装 MySQL 5.7
以下是通过 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
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;