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
相关推荐
huaqianzkh1 小时前
了解MySQL 高可用架构:主从备份
数据库·mysql·架构
向往风的男子2 小时前
【mysql】mysql之读写分离以及分库分表
数据库·mysql
ken_coding2 小时前
Windows11 WSL2的ubuntu 22.04中拉取镜像报错
linux·ubuntu·docker
阳光开朗_大男孩儿2 小时前
DBUS属性原理
linux·服务器·前端·数据库·qt
挠背小能手2 小时前
达梦数据库SCHEMA使用初探
数据库·oracle
楠神说软件测试3 小时前
接口自动化框架入门(requests+pytest)
运维·数据库·自动化
惟长堤一痕3 小时前
医学数据分析实训 项目一 医学数据采集
数据库
xuan哈哈哈3 小时前
web基础—dvwa靶场(八)SQL Injection(Blind)
数据库·web安全·网络安全
Lill_bin3 小时前
Lua编程语言简介与应用
开发语言·数据库·缓存·设计模式·性能优化·lua
终末圆3 小时前
MyBatis动态SQL中的`if`标签使用【后端 19】
java·数据结构·数据库·sql·算法·spring·mybatis