现有需求开启用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)
数据库镜像版本mysql
[root@localhost cloud]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql 5.7 5195076672a7 13 days ago 371 MBsql
2.下载mysql 数据库镜像
docker pull mysql:5.7docker
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服务会报错,这个时候咱们必须还要指定这样一个参数,随机指定一个不能和其余集群中机器重名的字符串,若是只有一台机器,那就能够随便指定了。vim
第三个参数:设置binlog日志保存期限7天centos
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日志,以下图:bash
这个时候,在数据库中建立一个数据库、表,插入一些数据,就会在/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%';
————————————————
①、备份故障点以前的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