Docker下mysql容器开启binlog日志(保留7天)
现有需求开启用Docker容器启动的mysql数据库的binlog,以作为 日志记录 和 数据恢复,我们了解了MySQL的binlog日志的开启方式以及binlog日志的一些原理和常用操作,我们知道,binlog有两大作用,一个是使用binlog恢复数据,另一个就是用来做主从复制。本篇笔记就是来记录如何使用开启binlog日志和做数据恢复。当然了,使用binlog日志所恢复的数据只能是部分数据,并不能够使用binlog日志来做数据库的备份,如果想要做数据库备份,依然要使用我们传统的备份方法,而binlog可以作为增量备份。
以供笔记和学习,以下就是开启binlog日志的步骤过程:
1.首先,在实现前我是在虚拟机上做的实验,环境如下:
[root@localhost cloud]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
数据库镜像版本
[root@localhost cloud]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql 5.7 5195076672a7 13 days ago 371 MB
2.下载mysql 数据库镜像
docker pull mysql:5.7
3.在启动容器之前先要创建好要挂载出来的目录文件
一个myql的配置目录 在容器:/etc/mysql ,这里可以从其他容器中拷贝过来
docker cp mysql:/etc/mysql /etc/mysql
第二个mysql数据目录 /var/lib/mysql 保存了数据库、表等数据信息
4.启动Mysql5.7镜像一个实例
docker run -d --name mysql
--privileged=true
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=123456
-v /etc/mysql:/etc/mysql
-v /opt/mysql:/var/lib/mysql
-v /etc/localtime:/etc/localtime
docker.io/mysql:5.7
5.启动好后,用mysql客户端工具边接,在未设置之前,先查看一下,mysql5.7是否默认开启,查看脚本如下:
show variables like '%log_bin%'
结果如下:
看得出mysql5.7默认是未开启的,下面就开始设置
6.找到刚挂载到本地的mysql设置目录 /etc/mysql
vim /etc/mysql/mysql.conf.d/mysqld.cnf
在以上修改的文件下方,添加上红框中的两条
这一个参数的作用是mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
第二个参数 ,用的如果是5.7及以上版本的话,重启mysql服务会报错,这个时候我们必须还要指定这样一个参数,随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了。
第三个参数:设置binlog日志保存期限7天
show variables like 'expire_logs_days';#查询保留天数,0为永久
echo -e "#set binlog save days\nexpire_logs_days=7" >> /etc/mysql/mysql.conf.d/mysqld.cnf
7.设置完后重启mysql容器
docker restart mysql
再次查询就会看到已开启mysql的binlog日志,如下图:
这个时候,在数据库中创建一个数据库、表,插入一些数据,就会在/var/lib/mysql容器中看到以下,或者是看挂载出来对应的目录上,
在数据库中查询日志,如下
show binlog events in 'mysql-bin.000001';
show binlog events in 'mysql-bin.000002';
show binlog events in 'mysql-bin.000003';
#FLUSH LOGS
就可以通过以上数据进行数据恢复
也可以直接操作容器如下:
docker exec mysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker exec mysql bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker restart mysql
SHOW GLOBAL VARIABLES LIKE '%log%';
————————————————
通过binlog还原数据库
①、备份故障点之前的sql

-- 备份时间点sql
mysqlbinlog --no-defaults -d 库名 --start-datetime='2019-10-22 17:03:45' --stop-datetime='2019-10-22 17:50:06' /var/lib/mysql/mysql-bin.000053 > temp20191022.sql -- 备份存储过程和函数
docker exec 5978e90c168b mysqldump -R -ndt eibd_oa -u root -p123456 > eibd_oa_funcs-${BACK_DATA}

--start-datetime:代表开始时间 --stop-datetime:代表结束时间
从2019-10-22 17:03:45到2019-10-22 17:50:06的数据进行备份
--database ##与"-d"作用相同,用于指定数据
-d ##与“database”作用相同,用于指定数据库
--start-datetime ##起始时间点
--stop-datetime ##结束时间点
--start-position ##起始位置
--stop-position ##结束位置
②、还原数据
通过source temp20191022.sql进行还原
参考链接:https://blog.csdn.net/harris135/article/details/79712750
Docker下mysql容器开启binlog日志(保留7天)的更多相关文章
- Mysql是否开启binlog日志&开启方法
运行sql show variables like 'log_bin'; 如果Value 为 OFF 则为开启日志文件 如何开启mysql日志? 找到my,cnf 中 [mysqld] 添加如下 ...
- mysql开启binlog日志和慢查询日志
1)首先,为什么要开启binlog日志和慢查询日志呢? binlog日志会记录下数据库的所以增删改操作,当不小心删除.清空数据,或数据库系统出错,这时候就可以使用binlog日志来还原数据库,简单来说 ...
- 开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法
开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法: 创建存储过程时 出错信息: ERROR 1418 (HY ...
- Mysql数据库之Binlog日志使用总结
binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...
- (转)Mysql数据库之Binlog日志使用总结
使用mysqlbinlog提取二进制日志 原文:http://blog.csdn.net/leshami/article/details/41962243 MySQL binlog日志记录了MySQL ...
- 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...
- mysql备份和bin-log日志
总结]:mysql备份和bin-log日志 备份数据: mysqldump -uroot -p123456 test -l -F '/tmp/test.sql' -l:读锁(只能读取,不能更新) -F ...
- mysql 正确清理binlog日志的两种方法
前言: MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间,因此,要对binlog使用正确安全的方法清理掉 ...
- Docker CentOS / Ubuntu容器开启 SSH 服务
Docker CentOS / Ubuntu容器开启 SSH 服务 在CentOS容器内执行 yum install passwd openssl openssh-server -y # Ubuntu ...
随机推荐
- python django 连接 sql-server
1.准备工作 python3.6连接sqlserver数据库需要引入pymssql模块 pymssql官方:https://pypi.org/project/pymssql/ 没有安装的话需要: pi ...
- Oracle 物理结构(一) 文件-Inventory
一.Inventory的定义与作用 oraInventory存放的是Oracle软件安装的目录信息,Oralce的安装升级都需要用到这个目录,来看看Oracle文档中对这个目录的一点说明:All Or ...
- learning express step(八)
To skip the rest of the middleware functions from a router middleware stack, call next('route') to p ...
- leetcode解题报告(9):Implement strStr()
描述 Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if nee ...
- CTS2019自闭记
没想到吧,我竟然还有一篇游记. Day 0 上午开开心心地考完了中考英语听说考试,然后就出发去机场了. 第一次一个人坐飞机还有点小激动? 7点左右到的北京,到酒店就已经9点了,赶紧跟着hz学长学了一下 ...
- confluence乱码问题
1.上传附件需要统一字体,以测试通过:宋体字.雅黑.黑体 2.系统已做编码优化,支持windows字体.如下: 点击查看 3.之前文件有乱码,请重新上传 4.编辑一个 Office 附件文档的要求 当 ...
- CentOS 7.5 ——如何开放80、8080、3306等端口
CentOS 7.5 ——如何开放80.8080.3306等端口 ——说明:CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙——1.关闭firewall: s ...
- UVALive 4254 Processor ——(二分+优先队列处理)
题目是求最小化最大值,很显然是二分,但是二分以后怎么判断mid是否可行并不容易. 代码参考了网上一个博客的代码.巧妙之处在于一秒一秒的考虑,这样可以把处理速度mid直接转化成1秒内实际的量来解决(避免 ...
- Docker安装redis3.2
1.拉取redis3.2镜像 2.使用docker images查看拉去下来的镜像 3.运行容器,命令如下 docker run -p : -v $PWD/data:/data -d redis:3. ...
- BufferedWriter中write与close函数使用
BufferedWriter 是一个缓冲字符输出流,可以将要输出的内容先缓冲到一个字符数组中,等字符数组满了才一次性写到输出流内,默认的字符数组长度为8192.使用BufferedWriter 时需要 ...