Docker之MySQL8安装、容器数卷挂载、数据库导入导出操作
文章目录
- Docker之MySQL8安装、容器数卷挂载、数据库导入导出操作
-
- [1. 拉取镜像与运行容器](#1. 拉取镜像与运行容器)
- [2. 进入容器登录数据库](#2. 进入容器登录数据库)
- [3. 导出数据库](#3. 导出数据库)
-
- [1. 导出数据库](#1. 导出数据库)
- [2. 导出常见问题](#2. 导出常见问题)
- [4. 导入数据库到myql容器中](#4. 导入数据库到myql容器中)
Docker中安装Mysql8
1. 拉取镜像与运行容器
- 拉取镜像并运行容器
shell
# 1. 拉取镜像:
docker pull mysql:8.0.30
# 2.运行镜像容器,并指定data与conf数据容器卷
# 注意顺序(镜像名称要放在--character之前):mysql:8.0.30 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
docker run --name mysql8 -p 3307:3306 -v F:/dockeData/mysql8/datadir:/var/lib/mysql -v F:/dockeData/mysql8/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=yuan -d mysql:8.0.30 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
- 宿主机中的配置文件,改了之后立马会同步到容器对于的目录中
宿主机中mysql.cof文件内容如下:F:/dockeData/mysql8/config/mysql.cnf
ini
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 设置3308端口
port = 3308
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用"mysql_native_password"插件认证,解决客户端无法连接的问题
default_authentication_plugin=mysql_native_password
- 参数说明
shell
# 1. Docker容器中MySQL的默认配置可以在/etc/mysql/my.cnf中找到,它可能包含其他目录,如/etc/mysql/conf.d或/etc/mysql/mysql.conf.d
# 2. MySQL8.0.30在Docker容器内部的配置目录为/etc/mysql/conf.d
# --name:只当容器名称
# -d:以守护进程运行
# -v F:/dockeData/mysql8/datadir:/var/lib/mysql:宿主机与容器之间数据存放目录映射
# -v F:/dockeData/mysql8/config:/etc/mysql/conf.d:宿主机与容器之间配置文件目录
# -e MYSQL_ROOT_PASSWORD=yuan : 指定容器中mysql的密码为yuan(必须)
- 进入容器内部后,MySQL配置在/etc/my.cnf中,如下:
shell
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
2. 进入容器登录数据库
shell
# 1.进入容器内部
docker exce -it mysql8 /bin/bash
#或
docker exce -it mysql8 bash
# 2.登录数据库
mysql -u root -P 3308 -p
...输入密码登录
3. 导出数据库
1. 导出数据库
shell
# 1. dockerhub 中给出的命令,详见:https://hub.docker.com/_/mysql
# docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
# 2. 导出所有数据库案例,注意 > 后边跟的是宿主机的导出位置
docker exec -it mysql8 mysqldump -uroot -pyuan yuan_demo > F:/dockeData/MysqlDump/yuan_demo.sql
2. 导出常见问题
- 使用docker导出xxx.sql文件到宿主机目录中,然后打开导出的文件在前两行会出现下面内容
shell
mysqldump: [Warning] World-writable config file '/etc/mysql/conf.d/mysql.cnf' is ignored.
# [警告]World-writeable config file '/etc/mysql/conf.d/mysql.cnf' 被忽略。
mysqldump: [Warning] Using a password on the command line interface can be insecure.
#[警告]在命令行界面上使用密码可能不安全。
-- MySQL dump 10.13 Distrib 8.0.30, for Linux (x86_64)
- 问题处理
- mysql.cnf 默认权限为777, 设置为644权限即可解决
mysql
# 1. mysql.cnf 默认权限为777, 设置为644权限即可解决
chmod 644 /etc/mysqlconf.d/mysql.cnf
# 2.重启docker容器再次导入时警告消失
docker restart mysql8
- 对于mysqldump在命令行上使用密码问题可以通过下面方式来处理
- 进入容器内部,打开/etc/my.cnf文件,然后添加下面三行
shell
[mysqldump]
user=root
password=你的密码
- 重启mysql容器
- mydump 导出/导入时不需要加-u 和 -p命令,如下:
shell
# 导出
docker exec -it mysql8 mysqldump yuan_demo > F:/dockeData/MysqlDump/yuan_demo1.sql
# 导入
#docker exec -i mysql8 mysqldump yuan_test < F:/dockeData/MysqlDump/yuan_demo1.sql
4. 导入数据库到myql容器中
shell
# 官方命令:docker exec-i
# $ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
# 1. 导入1
docker exec -i mysql8 mysqldump -uroot -pyuan yuan_demo > F:/dockeData/MysqlDump/yuan_demo.sql
# 2.导入2,/etc/my.cnf中配置了[mysqldump]
docker exec -i mysql8 mysqldump yuan_test < F:/dockeData/MysqlDump/yuan_demo1.sql