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
相关推荐
九.九12 分钟前
CANN 算子生态的底层安全与驱动依赖:固件校验与算子安全边界的强化
大数据·数据库·安全
蓝帆傲亦15 分钟前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle
亓才孓19 分钟前
[JDBC]事务
java·开发语言·数据库
PD我是你的真爱粉25 分钟前
FastAPI使用tortoiseORM
数据库·fastapi
剩下了什么8 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥8 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉9 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变9 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
lpruoyu10 小时前
【Docker进阶-03】存储原理
docker·容器
山岚的运维笔记10 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver