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
相关推荐
数据狐(DataFox)6 分钟前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存
Arthurmoo15 分钟前
Linux系统之MySQL数据库基础
linux·数据库·mysql
博观而约取20 分钟前
Django ORM 1. 创建模型(Model)
数据库·python·django
找不到、了2 小时前
MySQL的窗口函数介绍
数据库·mysql
执笔诉情殇〆2 小时前
springboot集成达梦数据库,取消MySQL数据库,解决问题和冲突
数据库·spring boot·mysql·达梦
高山莫衣2 小时前
Docker Desktop导致存储空间不足时的解决方案
docker·容器·eureka
鹏大师运维2 小时前
在银河麒麟V10 SP1上手动安装与配置高版本Docker的完整指南
linux·运维·docker·容器·麒麟·统信uos·中科方德
lovely_nn2 小时前
docker 介绍
docker·k8s
Ahlson3 小时前
【fnNAS】docker的nginx配置html
nginx·docker·容器·fnnas
LuckyLay3 小时前
Compose 常用命令详解——AI教你学Docker
docker·容器·eureka