IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> binlog、iptables防止nmap扫描、xtrabackup全量+增量备份以及redlog和binlog两者的关系 -> 正文阅读

[大数据]binlog、iptables防止nmap扫描、xtrabackup全量+增量备份以及redlog和binlog两者的关系

作者:treeSkill

binlog 全量备份和增量备份

首先开启开启mysql-binlog日志

[mysqld]
log-bin = mysql-bin ? ? ? ? ?#定义binlog日志名称
binlog-format = MIXED ? ? ? ?#binlog复制的格式有三种STATEMENT模式(SBR),ROW模式(RBR)MIXED模式(MBR)
expire_logs_days = 7 ? ? ? ? #binlog过期清理时间

开启binglog日志后,mysql语句会记录到binlog日志中,所以,增量备份实际就是备份binlog日志。

由于之前的mysql没有配置binlog日志大下限制,max_binlog_size参数没有配置,所以本次备份使用每天刷新一次binglog日志来进行。

#!/bin/bash
##############################################
#desc: 周一凌晨做一次全量备份,其他时间做增量备份
#author: laiwanmifan
#version: 20210808
#############################################
source /etc/profile
binlogdir="/usr/local/mysql"
USE="root"
PWD='123456'
BAK_DIR="/data/mysql-backup"
TIME=$(date |awk ?'{print $1}')
[ -d ${BAK_DIR} ] || mkdir -p ${BAK_DIR}
if [ "$TIME" == ?"Mon" ];then
? #取目前生效的binlog日志名称,在周一全备份数据前,会把周日到周一期间产生的binlog日志先进行备份,然后在备份全量数据
? binfile=$(tail -1 ${binlogdir}/mysql-bin.index |xargs basename)
? #产生新的binlog日志
? mysqladmin -u${USE} -p${PWD} flush-logs
? #将binlog日志备份
? cp ${binlogdir}/${binfile} ?${BAK_DIR}/${binfile}_`date +%F_%H:%M`
? DB_LIST=`mysql -u${USE} -p${PWD} -e "show databases;"|egrep -v "*_schema|mysql|sys|Database"`
? mysqladmin -u${USE} -p${PWD} flush-logs
? for i in ?${DB_LIST}
? ? ? do
? ? ? ? ? ?mysqldump -u${USE} -p${PWD} -B -R --single-transaction $i|gzip >${BAK_DIR}/${i}_`date +%F_%H:%M`.sql.gz
? ? done?
?else
? ? binfile=$(tail -1 ${binlogdir}/mysql-bin.index |xargs basename)
? ? mysqladmin -u${USE} -p${PWD} flush-logs
? ? cp ${binlogdir}/${binfile} ?${BAK_DIR}/${binfile}_`date +%F_%H:%M`
fi

全量备份: mysqldump -u root -p -B -F -R -x  test| gzip  > /backup/1.sql.gz 
        #mysqldump -u 用户 -p 数据库 [表1 表2 …… 表N] > 备份文件路径
        #-B:指定数据库
		#-F:刷新日志
		#-R:备份存储过程等
		#-x:锁表
		#--master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息
		查看备份文件:cd  /backup
					gzip -d 1.sql.gz
					ls
					vim 1.sql
		恢复全备数据: mysql -u root -p < /backup/1.sql
		备份指定库: mysqlbinlog -d test mysql-bin.00000X >00Xbin.sql
		恢复指定库: mysql -uroot -p test<00Xbin.sql

iptables防止nmap扫描

在Iptables上配置这些命令可以有效阻止nmap扫描

[root@bogon goaccess-1.5.4]# iptables -t filter -I INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j REJECT
[root@bogon goaccess-1.5.4]# iptables -t filter -I INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j REJECT
[root@bogon goaccess-1.5.4]# iptables -t filter -I INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j REJECT
[root@bogon goaccess-1.5.4]# iptables -t filter -I INPUT -p tcp --tcp-flags ALL SYN -j REJECT
[root@bogon goaccess-1.5.4]# iptables -t filter -R INPUT 1 -s 192.168.80.138 -p tcp --dport 1: --tcp-flags ALL ACK -j REJECT 

xtrabackup全量+增量备份

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

做增量备份前,首先要进行一次全量备份。
 
 
全量备份:
[root@localhost ~]# innobackupex --user=root --password=root --no-timestamp --bakcup /backup/full
 
[root@localhost full]# cat xtrabackup_binlog_info
mysql-bin.000002	411
[root@localhost full]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 2635485
last_lsn = 2635494
 
 
全量备份之后,在次期间业务数据变化了,打个比方如下
mysql> insert into mytest values(1);
mysql> commit;
 
--------------------------------------------------------------------------------------
 
第一次增量备份 基于full的基础上在做增量备份
[root@localhost ~]#  innobackupex --user=root --password=root --no-timestamp --incremental-basedir=/backup/full --incremental /backup/inc1
 
[root@localhost backup]# cd inc1/
[root@localhost inc1]# cat xtrabackup_binlog_info
mysql-bin.000002	668
[root@localhost inc1]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2635485
to_lsn = 2635839
last_lsn = 2635848
 
 
 
第一次增量备份之后,在次期间业务数据变化了,打个比方如下
mysql> insert into mytest values(2);
mysql> commit;
 
------------------------------------------------------------------------------------
 
第二次增量备份,第二次增量备份的是基于第一次增量备份的,所以目录需要修改为第一次增量备份的目录,这样相当于在第一次增量备份的基础上做了第二次增量备份
[root@localhost ~]#  innobackupex --user=root --password=root --no-timestamp --incremental-basedir=/backup/inc1 --incremental /backup/inc2
 
 
[root@localhost inc2]# cat xtrabackup_binlog_info
mysql-bin.000002	925
[root@localhost inc2]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2635839
to_lsn = 2636177
last_lsn = 2636186
 
 
 
下面还会产生业务数据,这些数据就写在binlog里面了(binlog不能丢,丢了就恢复不到最近的状态了),恢复全量备份+两次增量备份+binlog恢复  这样就是完整的数据恢复
[root@localhost ~]# mkdir /binlog
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# mv mysql-bin.* /binlog/
[root@localhost mysql]# ll /binlog/
total 12
-rw-r----- 1 mysql mysql 177 Jun 30 15:45 mysql-bin.000001
-rw-r----- 1 mysql mysql 925 Jun 30 15:49 mysql-bin.000002
-rw-r----- 1 mysql mysql  38 Jun 30 15:45 mysql-bin.index
 
 
删除数据库,这个时候不能跑路,应该对数据库进行恢复了,利用全备+2次增量备份+binlog
[root@localhost mysql]# rm -rf *
 
-----------------------------------------------------------------------------------------
全备
from_lsn = 0
to_lsn = 2635485
 
第一次增量备份
from_lsn = 2635485
to_lsn = 2635839
 
第二次增量备份
from_lsn = 2635839
to_lsn = 2636177
 
0----->2635485----->2635839----->2636177 你有没有发现一个规律,每次备份起始点是基于上一次备份的to_lsn的位置
 
mysql-bin.000002 411 全量--->mysql-bin.000002 668 第一次增量--->mysql-bin.000002	925 第二次增量

使用全量备份和增量备份进行恢复

[root@localhost mysql]# systemctl stop mysqld
 
基于全量的恢复  合并全备数据目录,确保数据的一致性
--redo-only只应用redo日志,不执行undo回滚未提交的数据,等最后一次增量备份合并完成后再进行应用undo日志回滚数据。
[root@localhost ~]# innobackupex --apply-log --use-memory=32m --redo-only /backup/full
[root@localhost ~]# ls /var/lib/mysql
ib_buffer_pool
 
 
[root@localhost backup]# cd full/
[root@localhost full]# cat xtrabackup_binlog_info
mysql-bin.000002	411
[root@localhost full]# cat xtrabackup_checkpoints
backup_type = log-applied   #可以看到全量恢复之后状态由full-backuped--> log-applied
from_lsn = 0
to_lsn = 2635485
last_lsn = 2635494
 
 
全量恢复0---->2635485
前面的全量备份和两次增量备份0----->2635485----->2635839----->2636177
 
-----------------------------------------------------------------------------------
 
第一次增量恢复  将增量备份数据合并到全备数据目录当中
[root@localhost ~]# innobackupex --apply-log --use-memory=32m --redo-only --incremental-dir=/backup/full/inc1 /backup/full
[root@localhost full]# cat xtrabackup_binlog_info
mysql-bin.000002	668
[root@localhost full]# cat xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 2635839
last_lsn = 2635848
全量恢复+第一次增量恢复0---->2635839
前面的全量备份和两次次增量备份 0----->2635485----->2635839----->2636177
 
----------------------------------------------------------------------------------------
 
第二次增量恢复  将增量备份数据合并到全备数据目录当中
[root@localhost ~]# innobackupex --apply-log --use-memory=32m  --incremental-dir=/backup/inc2 /backup/full
 
[root@localhost full]# cat xtrabackup_binlog_info
mysql-bin.000002	925
[root@localhost full]# cat xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 2636177
last_lsn = 2636186
全量恢复+第一次增量恢复+第二次增量恢复 0------>2636177
前面的全量备份和两次增量备份 0----->2635485----->2635839----->2636177

恢复数据文件

[root@localhost ~]# rm -rf * /var/lib/mysql
[root@localhost ~]# innobackupex --copy-back /backup/full
[root@localhost ~]# ll /var/lib/mysql
total 122924
-rw-r----- 1 root root      302 Jun 30 16:03 ib_buffer_pool
-rw-r----- 1 root root 12582912 Jun 30 16:03 ibdata1
-rw-r----- 1 root root 50331648 Jun 30 16:03 ib_logfile0
-rw-r----- 1 root root 50331648 Jun 30 16:03 ib_logfile1
-rw-r----- 1 root root 12582912 Jun 30 16:03 ibtmp1
drwxr-x--- 2 root root     4096 Jun 30 16:03 mysql
drwxr-x--- 2 root root     8192 Jun 30 16:03 performance_schema
drwxr-x--- 2 root root     8192 Jun 30 16:03 sys
drwxr-x--- 2 root root       56 Jun 30 16:03 test
-rw-r----- 1 root root       21 Jun 30 16:03 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root      540 Jun 30 16:03 xtrabackup_info
-rw-r----- 1 root root        1 Jun 30 16:03 xtrabackup_master_key_id
 
[root@localhost ~]# chown -R mysql. /var/lib/mysql
[root@localhost ~]# systemctl start mysqld
 
 
这个时候恢复只是恢复到最后一次备份时候状态,还需要借助Binlog来恢复备份之后产生的数据

利用binlog恢复到数据库崩溃前状态

借助binlog进行恢复到最近的状态,从925位置开始恢复
[root@localhost backup]# cd inc2
[root@localhost inc2]# cat xtrabackup_binlog_info 
mysql-bin.000002	925
 
 
[root@localhost ~]# mysqlbinlog --start-position=925 /binlog/mysql-bin.000002 > inc.sql
[root@localhost ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30-log MySQL Community Server (GPL)
 
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> source inc.sql;
Query OK, 0 rows affected (0.00 sec)
 
Query OK, 0 rows affected (0.01 sec)
 
Query OK, 0 rows affected (0.00 sec)
 
Query OK, 0 rows affected (0.00 sec)
 
Query OK, 0 rows affected (0.00 sec)
 
Query OK, 0 rows affected (0.00 sec)
 
Query OK, 0 rows affected (0.01 sec)
 
至此数据库恢复完毕到数据库崩溃前状态

redlog和binlog两者的关系

两者都不可以单独使用。

先写read log 而不写bin log 回导致回复不到原来数据

先写bin log 不写read log 会导致还没真正写入就回复了

redo log 和 binlog 都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。

redo log 是先 prepare 状态,等 binlog 写完之后,才是 commit 状态,这种方式就叫"两阶段提交"。
redo log 和 binlog 都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。
如果不采用这种方式,而是就先写 redo log ,再写 binlog ,会怎样?如果在写 binlog 时,发生了异常,更新操作已经到 redo log 中了,但是此时 binlog 并没有进行更新,就出现了数据不一致,先写 binlog 再写 redo log 也是一样的道理。所以,在写时,先让 redo log 处于 prepare 状态,等 binlog 写完之后,再让 redo log 处于 commit 状态,这样就保持了逻辑上的一致。

由binlog和redo log的概念和区别可知:binlog日志只用于归档,只依靠binlog是没有crash-safe能力的。但只有redo log也不行,因为redo log是InnoDB特有的,且日志上的记录落盘后会被覆盖掉。因此需要binlog和redo log二者同时记录,才能保证当数据库发生宕机重启时,数据不会丢失
?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:56:33  更:2022-07-20 19:00:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:22:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码