linux上mysql数据备份(全量备份策略+增量备份策略)

2023-09-20 13:36:01

执行备份策略前,先做好scp命令的准备
解决思路:

生成SSH公钥/私钥后,您需要将公钥添加到服务器上,从而使服务器可以使用该公钥来验证您的身份。

生成SSH公钥/私钥的命令为

ssh-keygen -t rsa -b 4096

什么都不用输入,直接下一步即可

在这里插入图片描述

生成SSH公钥/私钥后,您需要将公钥添加到服务器上,从而使服务器可以使用该公钥来验证您的身份。-p指定端口

ssh-copy-id -p85 root@112.94.31.288

在这里插入图片描述

添加成功后,您可以使用以下命令测试身份验证是否成功:

ssh -p85 root@112.94.31.288

出现一下截图表示成功

在这里插入图片描述

mysql数据备份

先查看my.cnf是在哪个目录

locate my.cnf

在这里插入图片描述

二.mysql数据备份

先查看my.cnf是在哪个目录

locate my.cnf

在这里插入图片描述

查看mysql默认读取的my.cnf

mysql --help|grep 'my.cnf'

在这里插入图片描述

1.增量备份(本地服务器+正式环境)

1.1 开启二进制并配置my.cnf

查看是否开启二进制日志,输入一下命令

show variables like 'log_bin';

如果出现一下截图的话,表示二进制日志未开启。

在这里插入图片描述

vi /etc/my.cnf目录下开启二进制日志

ps:自己定义二进制日志存存放的路径,默认是放在/var/lib/mysql 路径

先新建目录

cd /home

mkdir mysql

cd mysql

mkdir binlog

#为目录设置mysql权限

chown -R mysql.mysql /home/mysql/binlog

chown -R mysql.mysql /home/mysql/

在/etc/my.cnf增加配置

#二进制存放的文件格式
log-bin=/home/mysql/binlog/mysql-bin
#当前机器的服务ID
server-id=254
#二进制日志的格式
binlog_format = MIXED	
#设置binlog清理时间
expire_logs_days = 30



#看到我们写入的sql语句格式
binlog_rows_query_log_events = 1
#binlog缓存大小
binlog_cache_size = 4m

#binlog每个日志文件大小 默认大小,如果超过该值,则产生新的二进制文件,后缀名+1
max_binlog_size = 1024m

二进制日志的格式
A) binlog_format 在mysql5.7默认是row, 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨

例如:update a < 10 的数据,statement模式会记录这一条sql,而row模式的话,会记录a=1,a=2到a=9所有的记录的更改

B) STATEMENT模式 每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题

C) MIXED模式 以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

在这里插入图片描述

重启mysql

systemctl restart mysqld

可能会出现报错

在这里插入图片描述

解决方案:

执行一下命令

setenforce 0

然后再进行重启即可

在这里插入图片描述

查看mysql状态

systemctl status mysqld

查看日志

tail -2000f /var/log/mysqld.log 

去查配置是否生效,可以看出,已经生效了

在这里插入图片描述

1.2 bin日志的备份和还原演示

(1) 首先我们先建立一个test数据库,并且里面有temp_test 表

在这里插入图片描述

这时候我们执行下命令 可以输出二进制日志

mysqlbinlog --no-defaults --base64-output=decode-rows -v /home/mysql/binlog/mysql-bin.000002

可以看到,对应的sql语句都记录下来了

在这里插入图片描述

  • 根据时间点增量进行备份还原

在这里插入图片描述

然后再把temp_test这张表给删除

然后我们看一下bin日志

mysqlbinlog --no-defaults --base64-output=decode-rows -v /home/mysql/binlog/mysql-bin.000002

在这里插入图片描述

根据时间点进行恢复

mysqlbinlog --no-defaults --start-datetime='2023-09-06 09:21:13' --stop-datetime='2023-09-06 09:26:37' mysql-bin.000002 | mysql -u root -p  

在这里插入图片描述

输入mysql密码

可以看到这段时间范围的数据已恢复,注意,开始时间和结束时间要大于日志记录的时间,比如结束时间记录的是 2023-09-06 09:26:36 你要写成 2023-09-06 09:26:37

![

1.3 定时执行备份脚本(本地服务器+正式环境)

本地服务器要新建目录脚本,以时间进行命名

在目录/home/backups/mysql/binlogdata 下新建 date.sh(本地服务器)

#!/bin/bash     
echo '开始新建binlogdata 目录'
DATE=`date +%Y%m%d`            #定义时间的格式,注意需要反引号。
DIR=/home/backups/mysql/binlogdata        #这里定义创建文件夹的地址。
mkdir  -p  $DIR/$DATE          #创建文件夹的语句,把上面两个变量引用进来。
echo '新建binlogdata 目录完成'

赋值权限

chmod 777 date.sh

并且也设置脚本执行的时间

crontab -e

输入备份的时间(每天23:59都进行备份作业)

58 23 * * *  /home/backups/mysql/binlogdata/date.sh> /tmp/load.log 2>&1

在/home/mysql/binlogdata目录下新建脚本(正式服务器

新建binlog.sh脚本

touch binlog.sh

#并赋予权限
chmod 777 binlog.sh

添加下面脚本内容

#!/bin/bash     
DATE=`date +%Y%m%d`            #定义时间的格式,注意需要反引号。
REMOTEDIR=/home/backups/mysql/binlogdata  #远程本地服务器地址路径

localData=/home/mysql/binlog/    #本机数据地址路径
echo "开始进行数据迁移到本地服务器"
expect << EOF
set timeout -1
spawn scp -P 85 -r $localData  root@112.94.31.288:$REMOTEDIR/$DATE
expect eof
exit
EOF
echo "数据迁移到本地服务器结束"

执行备份策略

crontab -e

输入备份的时间(每天23:59都进行备份作业)

59 23 * * * /home/mysql/binlog.sh> /tmp/load.log 2>&1

查看任务列表

crontab -l

2.全量备份(只需正式环境部署脚本)

增量备份策略:每周六凌晨1点执行备份策略

在 /home/mysql/allsql 目录下新建脚本

touch backupsql.sh

输入一下内容

#!/bin/bash     
echo '开始新建目录'
DATE=`date +%Y%m%d`            #定义时间的格式,注意需要反引号。
NYSQLDIR=/home/mysql/allsql         #这里定义创建文件夹的地址。
mkdir  -p  $NYSQLDIR/$DATE          #创建文件夹的语句,把上面两个变量引用进来。
REMOTEDIR=/home/backups/mysql/allsql      #远程本地服务器配置路径      
echo '新建目录完成'

echo '开始执行 smkj-pro-backend备份操作'
mysqldump -u dev -pPassword@hwgy01dev --databases smkj-pro-backend > $NYSQLDIR/$DATE/smkj-pro-backend_$(date +%Y%m%d_%H%M).sql


echo '开始执行 smkj-pro-backend备份操作'
echo '=================================='

echo '开始执行 smkj-pro-base备份操作'
mysqldump -u dev -pPassword@hwgy01dev --databases smkj-pro-base > $NYSQLDIR/$DATE/smkj-pro-base_$(date +%Y%m%d_%H%M).sql
echo '开始执行 smkj-pro-base备份操作'
echo '=================================='


echo '开始执行 smkj-pro-shop备份操作'
mysqldump -u dev -pPassword@hwgy01dev --databases smkj-pro-shop > $NYSQLDIR/$DATE/smkj-pro-shop_$(date +%Y%m%d_%H%M).sql
echo '开始执行 smkj-pro-shop备份操作'
echo '=================================='

echo '开始执行 smkj-pro-user备份操作'
mysqldump -u dev -pPassword@hwgy01dev --databases smkj-pro-user > $NYSQLDIR/$DATE/smkj-pro-user_$(date +%Y%m%d_%H%M).sql
echo '开始执行 smkj-pro-user备份操作'
echo '=================================='


echo '开始执行 smkj-pro-job备份操作'
mysqldump -u dev -pPassword@hwgy01dev --databases smkj-pro-job > $NYSQLDIR/$DATE/smkj-pro-job_$(date +%Y%m%d_%H%M).sql
echo '开始执行 smkj-pro-job备份操作'

echo '======全部备份结束========='




echo "开始进行数据迁移到本地服务器"
expect << EOF
set timeout -1
spawn scp -P 85 -r $NYSQLDIR/$DATE  root@112.94.31.288:$REMOTEDIR/
expect eof
exit
EOF
echo "数据迁移到本地服务器结束"


执行定时任务启动脚本

crontab -e

输入 (意思是每天凌晨20份执行脚本,考虑到目前数据库数据整体大小不大,后续数据库量大再进行策略调整)

20 0 * * *  /home/mysql/allsql/backupsql.sh > /tmp/load.log 2>&1

查看任务列表

crontab -l
更多推荐

javaee之黑马乐优商城5

分析一下spu与sku的数据结构再来说一下什么是spustandardproductunit标准产品单元:SPU级别的规格参数通常是与整个产品类型或产品系列相关的通用参数。比如华为手机下面的p系列、荣耀系列,都可以标识为spu级别规格参数skustockkeepingunit库存保管单位:SKU级别的规格参数是具体到每

Git基础操作

前言本文会向您介绍如何安装git,以及快速地上手add,commit,push,版本回退操作基础配置关于windous上的安装git官网已经介绍的很清楚了,您可以直接点入链接windows安装如果你的平台是centos,以centos7.6为例:⾸先,你可以试着输⼊git,看看系统有没有安装Git:-bash:git:

java面向对象(七)

文章目录一、单例设计模式是什么?1.概念2.如何实现1.饿汉式2.懒汉式3.区分饿汉式和懒汉式二、main()方法的使用1.使用说明三、类的成员之四:代码块(或初始化块)1.概念2.静态代码块3.非静态代码块四、final关键字五、多态性的补充六、类变量和实例变量的内存解析七、static声明的属性被所有对象所共享提示

virtualbox配置ubuntu1804虚拟机相关流程

virtualbox配置ubuntu1804虚拟机相关流程相关版本能解决的问题安装流程1:新建虚拟机安装流程2:配置虚拟机安装流程3:安装虚拟机系统安装流程4:设置ubuntu相关版本virtualbox使用VirtualBox官网下载的6.1.34r150636版。ubuntu使用清华大学开源软件镜像站下载的1804

计算机毕业设计 基于SSM+Vue的农业信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟————————————————计算机毕业设计题目《10

重构技战术(一)——通用型重构技巧

书接上回,重构从现在开始一文中我们讨论了重构的含义、意义以及时机,并说明了测试的重要性。从本文开始将介绍重构具体的技巧,首先登场的是一些通用型技巧。1提炼函数提炼函数应该是最常见的重构技巧。我们都不希望把一大堆东西塞在一个函数里,使得一个函数做了一大堆事,这样无论是阅读还是修改都会很累(我曾经在字节跳动就见过一个600

Spring Cloud Gateway快速入门(二)——断言工厂

文章目录前言1.什么是Gateway断言工厂2.为什么要使用断言2.1.调试和开发:2.2.防御性编程:2.3.文档和可读性:2.4.测试:3.常用的Gateway断言工厂3.1Path断言工厂3.2Method断言工厂3.3Header断言工厂3.4时间断言工厂4.自定义Gateway断言工厂5.使用Gateway断

代码随想录Day1 数组基础

本文详细说明和思路来源于:代码随想录视频讲解:手把手带你撕出正确的二分法|二分查找法|二分搜索法|LeetCode:704.二分查找_哔哩哔哩_bilibiliLeetcodeT704题目链接704.二分查找-力扣(LeetCode)题目概述1:思路:1.因为数组是升序排列,且数组的元素不重复,所以使用二分查找法2.注

八、逻辑覆盖

不要让你的弱点妨碍你的优势。有两种互补的逻辑测试方法。第一种被称为语义逻辑覆盖,这种覆盖只考虑逻辑表达式的含义而不管表达式的构成。语义逻辑覆盖的优点在于即使谓词被写成一种表面不同但是具有等价语义的形式,依然可以产生相同的测试用例。第二种被称为语法逻辑覆盖,这种覆盖专门根据逻辑表达式的构成来生成测试用例。语法逻辑覆盖的优

bloaty

安装教程参考:https://github.com/google/bloatyBloaty是一个用于分析二进制文件大小的工具,它可以深入分析二进制文件,使用自定义的ELF、DWARF和Mach-O解析器,将二进制文件的每个字节准确地归因于生成它的符号或编译单元。以下是一些使用Bloaty的基本步骤:安装Bloaty:你

【C++】STL详解(六)—— list的模拟实现

​​📝个人主页:@Sherry的成长之路🏠学习社区:Sherry的成长之路(个人社区)📖专栏链接:C++学习🎯长路漫漫浩浩,万事皆有期待上一篇博客:【C++】STL详解(五)——list的介绍及使用文章目录list的三个类及其成员函数接口总览结点类的模拟实现构造函数迭代器类的模拟实现迭代器类存在的意义迭代器类的

热文推荐