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.启动Mysql
5.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
mysql下载csdnvim /etc/f.d/mysqldf
在以上修改的⽂件下⽅,添加上红框中的两条
这⼀个参数的作⽤是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/f.d/mysqldf
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/f.d/mysqldf"
docker exec mysql bash -c "echo 'server-id=123454' >> /etc/f.d/mysqldf"
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 > temp 20191022.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进⾏还原
参考链接:blog.csdn/harris135/article/details/79712750

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。