Docker之MySQL8安装、容器数卷挂载、数据库导入导出操作

Docker之MySQL8安装、容器数卷挂载、数据库导入导出操作

文章目录

  • Docker之MySQL8安装、容器数卷挂载、数据库导入导出操作
    • [1. 拉取镜像与运行容器](#1. 拉取镜像与运行容器)
    • [2. 进入容器登录数据库](#2. 进入容器登录数据库)
    • [3. 导出数据库](#3. 导出数据库)
      • [1. 导出数据库](#1. 导出数据库)
      • [2. 导出常见问题](#2. 导出常见问题)
      • [4. 导入数据库到myql容器中](#4. 导入数据库到myql容器中)

Docker中安装Mysql8

1. 拉取镜像与运行容器

  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
  1. 宿主机中的配置文件,改了之后立马会同步到容器对于的目录中

宿主机中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
  1. 参数说明
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(必须)
  1. 进入容器内部后,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. 导出常见问题

  1. 使用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)
  1. 问题处理
  • mysql.cnf 默认权限为777, 设置为644权限即可解决
mysql 复制代码
# 1. mysql.cnf 默认权限为777, 设置为644权限即可解决
chmod 644 /etc/mysqlconf.d/mysql.cnf 
# 2.重启docker容器再次导入时警告消失
docker restart mysql8
  • 对于mysqldump在命令行上使用密码问题可以通过下面方式来处理
  1. 进入容器内部,打开/etc/my.cnf文件,然后添加下面三行
shell 复制代码
[mysqldump]
user=root
password=你的密码
  1. 重启mysql容器
  2. 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
相关推荐
morris1312 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch2 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
这个懒人3 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog
Yan-英杰3 小时前
【百日精通JAVA | SQL篇 | 第二篇】数据库操作
服务器·数据库·sql
NineData3 小时前
NineData云原生智能数据管理平台新功能发布|2025年3月版
数据库
zyk_5203 小时前
Docker desktop如何汉化
运维·docker·容器
韭菜盖饭3 小时前
解决Docker端口映射后外网无法访问的问题
运维·docker·容器
jingjingjing11114 小时前
笔记:docker安装(ubuntu 20.04)
笔记·docker·容器
百代繁华一朝都-绮罗生5 小时前
检查是否存在占用内存过大的SQL
数据库·sql
吾日三省吾码5 小时前
Python 脚本:自动化你的日常任务
数据库·python·自动化