以下是通过 Docker 使用 官方镜像 或 国内镜像源(阿里云、华为云) 安装 MySQL 5.7,并实现数据库导入导出的完整步骤:
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
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#
如果/var/lib/
没有mysql目录,创建/var/lib/mysql
chmod 777 /var/lib/mysql && chown -R 999:999 /var/lib/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 数据是否成功持久化到主机目录参考此链接
docker exec -it mysql5.7 bash
mysql -u root -p
# 输入密码(即 MYSQL_ROOT_PASSWORD 的值)
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
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
在挂载的配置文件目录 /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
# 查看容器日志
docker logs mysql5.7
# 进入容器检查 MySQL 服务
docker exec -it mysql5.7 bash
systemctl status mysql # 或执行 `mysql -u root -p`
如果挂载目录报错(如 chown
失败),尝试赋予宿主机目录权限:
sudo chmod -R 777 /path/to/mysql/data
确保在配置文件中设置 utf8mb4
,并在创建数据库时指定字符集:
CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改 MySQL 用户权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;