安装mysql

从mysql社区版的官方源去拉取镜像:mysql/mysql-server - Docker Image | Docker Hub

docker run --name=mysql1 -d mysql/mysql-server:latest

镜像起来之后,mysql就默默的初始化好了,直接查看日志得到初始化密码

docker logs mysql1 2>&1 | grep GENERATED; //运行之后会得到GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

进放容器,登陆mysql,输入下面代码之后,在密码框输入此,输入上面的显示的密码

docker exec -it mysql1 mysql -uroot -p

SQL命令重置密码

 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

充许root远程访问

update user set host='%' where user='root';

mysql 安装,配置,基本就结束了。

挂载数据卷

一般而言默认运行容器,数据会储存在容器内面,容器暂停,重启都不会影响容器内面的数据。如果容器被删除或重建那么将会丢失数据,合理的作法就是挂载数据卷,这样删除容器或者重建容器只需要重新挂裁数据卷就可以恢复如初。mysql默认情况在容器数据目标是:/var/lib/mysql

我们在母机根目标下创建一个文件夹:

mkdir mysqldata

挂载数据卷使用参数 -v

-v /mysqldata:/var/lib/mysql

-p 是做端口映射,方便远程访问,完整的语句是这样:

docker run --name=mysql1 -v /mysqldata:/var/lib/mysql -p 3306:3306 -d mysql/mysql-server:latest

定时备份

这里我们介绍官方自带的mysqldump,mysqldump命令在容器内面,无需单独安装。

登陆容器:

docker exec -it a8471e33b4e0 /bin/bash //a8471e33b4e0是容器ID,自行更换

进入容器之后运行mysqldump,就可以备份进行逻辑备份了。

mysqldump -uroot -p123456 --databases dbname >/mysqlbak/2023-3-15.sql

// -u后面是账号
// -p后面是密码
// --databases后面是数据库名
// /mysqlbak/2023-3-15.sql是备份路径和文件名

一般来说不需要进入容器也可以备份,完整指令如下:

docker exec -it a8471e33b4e0 mysqldump -uroot -p123456 --databases dbname > /mysqlbak/2023-3-15.sql

注意事项,默认备份下,备份数据会储存在容器内面所以容器被删除或重建之后会面临丢失问题,所以我们也需要挂载一个备份数据卷。

我们在母机根目标下创建一个备份文件夹:

mkdir mysqlbak

结合开头的数据卷文件夹,我们完整的运行mysql容器的命令应该是这样如下,容器路径不用担心,即使不存在也不会报错。当然别忘了--restart=always,容器自启动,这样重启之后也可以自己启动。

docker run --name=mysql1 -v /mysqldata:/var/lib/mysql -v /mysqlbak:/mysqlbak -p 3306:3306 --restart=always -d mysql/mysql-server:latest

我们使用母机crontab定时任务来实现定时备份功能:下面代码演示每格一分钟备份一次,注意第一点在crontab内面需要添加'\'转义符才能使用%号,每二点docker不能带-'t',因为crontab不能给他一个终端,会报错

*/1 * * * * docker exec -i 7003ff7c37a7 mysqldump -uroot -p123456 --databases chat > /mysqlbak/$(date +\%Y-\%m-\%d-\%H-\%M-\%S).sql

恢复

可以使有mysql命令进行恢复

mysql -u username -P [dbname] < filename.sql

//username 表示用户名称。
//p 表示密码。
//dbname 表示数据库名称。
//filename.sql 表示备份文件的名称。

我们先使用docker 启动一个mysql容器,将备份文件夹启动的时候作为数据卷映射进去,例如这样:

docker run --name=mysql1 -v /mysqlbak:/mysqlbak -p 3306:3306 --restart=always -d mysql/mysql-server:latest

然后无需进行容器,执行命令恢复mysql

docker exec -it fda84173e7a3 mysql -uroot -p123456 < /mysqlbak/2023-03-16-11-26-02.sql

//fda84173e7a3 为容器ID

docker mysql8.0 启动,挂数据卷,定时备份,恢复~的更多相关文章

  1. docker定义数据卷及数据卷的备份恢复

    前言:生产环境中使用docker时,往往需要对数据进行持久化(只有把容器导出为镜像,才能够保存写的数据,否则容器删除或者停止,所有数据都会没有),或者需要在多个容器之间进行数据共享,这必然涉及容器的数 ...

  2. docker 数据卷和docker数据卷容器以及数据卷的备份和还原

    一:数据卷 1.什么是数据卷 数据卷是通过特殊设计的目录,可以绕过联合文件系统,为一个或者多个容器提供服务,数据卷是在docker宿主机当中,数据卷可以是文件也可以是文件夹. 2.特点 1.数据卷在容 ...

  3. Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。

    Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原. 数据卷就是数据(一个文件或者文件夹). Docker的理念之一是将应用与其运行的环境打包,docker容器的生命周 ...

  4. Docker容器学习梳理 - Volume数据卷使用

    之前部署了Docker容器学习梳理--基础环境安装,接下来看看Docker Volume的使用. Docker volume使用 Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker ...

  5. Docker数据卷容器备份、恢复

    1.备份数据卷容器 使用数据卷来备份数据,通过指定本地的一个文件路径,对应到容器中的路径,运行tar命令将重要的文件打包备份. $ cd /home/xm6f/dev $ docker run --v ...

  6. 1.docker 数据卷的备份和恢复(非大数据量)

    在生产环境中使用 Docker,很多时候需要对数据进行持久化,或者进行容器间的数据共享. 容器中的管理数据主要有两种方式: 数据卷 (Data Volumes): 容器内数据直接映射到本地主机环境: ...

  7. docker进阶篇(一) ---- Volume(数据卷)

    引言 docker的镜像是由多个只读的文件系统叠加在一起形成的.当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层.这时如果修改正在运行的容器中已有的 ...

  8. Docker——网络和存储(数据卷)

    iptables -t nat -vnL |grep docker 查看docker桥接网卡:brctl show 本地端口随机映射到docker容器的80端口上: docker run -d -P ...

  9. Docker(六)容器数据卷

    容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...

  10. Docker系列(20)- 数据卷容器

    数据卷容器 什么是数据卷容器? 容器和容器之间实现数据共享 一个容器先于宿主机创建挂载方式,宿主机就会有改卷的目录 第二个容器使用命令--volumes-from 第一个容器,共享使用了第一个容器与宿 ...

随机推荐

  1. LVS+keepalived实现负载均衡&高可用(原来以及部署方法)

    一.ARP技术概念介绍 为什么讲ARP技术,因为平常工作中有接触.还有就是LVS的dr模式是用到arp的技术和数据. 1.什么是ARP协议 ARP协议全程地址解析协议(AddressResolutio ...

  2. Thread 的run方法和start方法的区别

    start()方法是用来启动线程,实现了多线程运行 点进去查看源码,发现start方法创建一个线程 并让线程处于就绪状态,并且在start方法内会调用start0()方法,而start0作为本地方法  ...

  3. SQL 查询各表所占大小

    SELECT OBJECT_NAME(id) tablename , CASE WHEN reserved * 8 > 1024 THEN RTRIM(8 * reserved / 1024) ...

  4. 新centos6 静态ip 放行端口 hosts主机名 jdk环境变量

    0 jdk 环境变量 vi  /etc/profile source /etc/profile 刷新环境变量 在尾部增加如下代码: #JDK全局环境变量配置export JAVA_HOME=/usr/ ...

  5. 蓝桥2021 B组

    2. 卡片(结果填空) 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9. 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了. 小蓝想知道自 ...

  6. 【python】第二模块 步骤一 第一课、MySQL的介绍

    第一课.MySQL的介绍 一.课程介绍 1.1 课程介绍 学习目标 了解关系型数据库的重要性 为什么会出现关系型数据库? 有哪些常见的关系型数据库? 掌握MySQL的安装和配置 怎么安装MySQL数据 ...

  7. centeros忘记root登录密码

    转载自:https://www.cnblogs.com/dongml/p/10333819.html 很多时候我们都会忘记Linux root 用户的口令,下面就教大家如果忘记root口令怎么办 第1 ...

  8. 网页元素间距测量(better rule插件的使用)

    我们在测试UI界面的时候,需要测量各元素大小及元素之间的距离.元素大小,使用F12可以简易的得到数据,但是元素的间距相对来说会比较复杂.这里推荐一款chrome插件better rule,帮助大家测量 ...

  9. 【项目记录】3:pyinstaller打包之后tkcalendar无法使用的解决办法

    PyInstaller 没有检测到二级导入这一事实.tkcalendar 的HowTos文档中解释了解决此问题的方法: 使用 PyInstaller 捆绑应用程序时, 检测 tkcalendar 的 ...

  10. EF OwnsOne 主键不自增

    menu public class Menu { /// <summary> /// id /// </summary> [Key, DatabaseGeneratedAttr ...