Docker-compose搭建mysql开启binlog日志
Posted AdobePeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-compose搭建mysql开启binlog日志相关的知识,希望对你有一定的参考价值。
docker-compose.yml 如下:
#版本号
version: "3"
services:
#主数据库
mysql-master:
#镜像
image: mysql:5.7
restart: always
#名称(可以为空)
hostname: mysql-master
#容器名称
container_name: mysql_master
#端口号
ports:
- 3306:3306
#环境变量
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
#挂载文件
volumes:
- ./mysql/data:/var/lib/mysql
command:
#id唯一
--server_id=100
--log-bin=mysql-bin
--sync_binlog=1
--binlog-ignore-db=mysql
--binlog_format=mixed
--expire_logs_days=7
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
安装成功后可以在挂在目录下看到如下文件:
或者可以通过执行语句来确认一下binlog的是否开启:
mysql> SHOW VARIABLES LIKE '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql-bin |
| log_bin_index | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+--------------------------------+
6 rows in set (0.01 sec)
为了方便测试,我们可以先将log清空一下,此时只剩下一个日志文件如下:
RESET MASTER; -- 清空语句
这时我们创建一个库binlogtest,并创建一个表table_01,并在表中插入一条数据如下:
这是我们可以使用命令flush logs;用来生成一个新的日志文件mysql-bin.000002
现在我们直接删库,如下可以看到库已被删除
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
准备恢复,执行语句:
// 先查看对应的mysql容器
[root@adobe1 data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
372953fef56a mysql:5.7 "docker-entrypoint.s…" 32 minutes ago Up 32 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql_master
// 进入容器
[root@adobe1 data]# docker exec -it 372953fef56a bash
// 进入日志目录
root@mysql-master:/# cd /var/lib/mysql
root@mysql-master:/var/lib/mysql# ls
auto.cnf client-cert.pem ib_logfile1 mysql-bin.000001 private_key.pem sys
binlogtest client-key.pem ibdata1 mysql-bin.000002 public_key.pem
ca-key.pem ib_buffer_pool ibtmp1 mysql-bin.index server-cert.pem
ca.pem ib_logfile0 mysql performance_schema server-key.pem
// 执行恢复语句
root@mysql-master:/var/lib/mysql# mysqlbinlog --no-defaults ./mysql-bin.000001 |mysql -uroot -p
Enter password:
// 恢复完成
root@mysql-master:/var/lib/mysql#
此时我们在此查看库以及数据有没有恢复:
是不是很棒,当然也可以通过具体位置恢复或者具体时间恢复语句如下:
恢复指定位置数据
mysqlbinlog ‐‐no‐defaults ‐‐start‐position="408" ‐‐stop‐position="731"./mysql‐bin.000001
|mysql ‐uroot ‐p tuling (数据库)
恢复指定时间段数据
mysqlbinlog ‐‐no‐defaults ./mysql‐bin.000001 ‐‐stop‐date="2018‐03‐02 12:00:00" ‐‐start‐date="2019‐03‐02 11:55:00" | mysql ‐uroot ‐p test(数据库)
可以自行去试一下。
当然我们数据库内容可能很大,所以我们想要完善binlog的话,我们可以定时将我们的日志归档,便于后期恢复。主要控制权限,别被删库的家伙把binlog也删了,那耶稣来了也就不了你了。
以上是关于Docker-compose搭建mysql开启binlog日志的主要内容,如果未能解决你的问题,请参考以下文章
Docker-compose搭建mysql开启binlog日志