Docker-compose搭建mysql开启binlog日志

本文详细介绍了如何在Docker中配置MySQL的binlog,包括设置环境变量、创建数据库并插入数据,以及在数据丢失后如何通过binlog进行恢复。此外,还提到了定期归档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可按以下步骤操作: ### 1. 创建文件夹 新建一个文件夹用于存放相关文件,例如: ```bash mkdir /usr/local/mysql8 ``` ### 2. 创建docker-compose.yml文件 进入新建的文件夹,并创建`docker-compose.yml`文件: ```bash cd /usr/local/mysql8 vim docker-compose.yml ``` `docker-compose.yml`文件内容如下: ```yaml #版本号 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 ``` 其中`--log-bin=mysql-bin`用于开启binlog功能,`--binlog_format=mixed`指定了binlog的格式为混合模式。 ### 3. 启动服务 给编排文件以及安装脚本目录结构设置权限,并启动服务: ```bash chmod +x init-mysql.sh docker-compose.yml #加执行权限 ./init-mysql.sh docker-compose up -d ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值