经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
docker mysql8.0 启动,挂数据卷,定时备份,恢复~
来源:cnblogs  作者:Net码畜  时间:2023/3/17 8:59:39  对本文有异议

安装mysql

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

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

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

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

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

  1. docker exec -it mysql1 mysql -uroot -p

SQL命令重置密码

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

充许root远程访问

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

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

挂载数据卷

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

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

  1. mkdir mysqldata

挂载数据卷使用参数 -v 

  1. -v /mysqldata:/var/lib/mysql

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

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

定时备份

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

登陆容器:

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

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

  1. mysqldump -uroot -p123456 --databases dbname >/mysqlbak/2023-3-15.sql
  2. // -u后面是账号
  3. // -p后面是密码
  4. // --databases后面是数据库名
  5. // /mysqlbak/2023-3-15.sql是备份路径和文件名

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

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

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

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

  1. mkdir mysqlbak

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

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

恢复

可以使有mysql命令进行恢复

  1. mysql -u username -P [dbname] < filename.sql
  2. //username 表示用户名称。
  3. //p 表示密码。
  4. //dbname 表示数据库名称。
  5. //filename.sql 表示备份文件的名称。

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

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

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

  1. docker exec -it fda84173e7a3 mysql -uroot -p123456 < /mysqlbak/2023-03-16-11-26-02.sql
  2. //fda84173e7a3 为容器ID

 

原文链接:https://www.cnblogs.com/netcore3/p/17219404.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号