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
相关推荐
像风一样!3 小时前
MySQL Galera Cluster部署如何实现负载均衡和高可用
数据库·mysql
last_zhiyin4 小时前
Oracle sql tuning guide 翻译 Part 6-4 --- Hint使用准则和Hint使用报告
数据库·sql·oracle·sql tunning
chenchihwen5 小时前
AI代码开发宝库系列:FAISS向量数据库
数据库·人工智能·python·faiss·1024程序员节
java_logo5 小时前
Docker 部署 WordPress 全流程
运维·docker·容器·word·php·1024程序员节
小光学长5 小时前
基于Vue的课程达成度分析系统t84pzgwk(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
摇滚侠5 小时前
全面掌握PostgreSQL关系型数据库,备份和恢复,笔记46和笔记47
java·数据库·笔记·postgresql·1024程序员节
周杰伦fans6 小时前
Navicat - 连接 mysql 、 sqlserver 数据库 步骤与问题解决
数据库·mysql·sqlserver
码以致用7 小时前
StarRocks笔记
数据库·starrocks·olap·1024程序员节
auspicious航7 小时前
PostgreSQL数据库关于pg_rewind的认识
数据库·postgresql·oracle
武子康8 小时前
Java-159 MongoDB 副本集容器化 10 分钟速查卡|keyfile + –auth + 幂等 init 附 docker-compose
java·数据库·mongodb·docker·性能优化·nosql·1024程序员节