首页 > 数据库 >liunx系统mysql全量备份和增量备份

liunx系统mysql全量备份和增量备份

时间:2023-02-16 11:45:32浏览次数:40  
标签:bin usr 备份 mysqldump mysql local 全量

前提

​ 在互联网项目中最终还是读数据进行操作,都离不开曾删改查,那么数据是重中之重,数据库的备份就显得格外重要。

​ 但是每次都直接导出整个数据库的sql文件,显然是不现实的。对数据库的性能影响比较大。

 

## mysql备份的三种方式
  • 热备 : 不关闭mysql服务的情况下,请求可以继续操作数据库,实现备份
  • 温备 : 不关闭mysql服务的情况下,支持读,不支持写,实现备份
  • 冷备 : 关闭mysql服务的情况下,实现备份

备份的类型

* 全量备份 : 一次性备份整个数据库的数据结构为sql文件
* 增量备份 : 备份增量的日志文件,日志文件中有操作数据库数据结构的记录,我们可以使用这个来作为增量备份的恢复文件

问题

mysql mysqladmin: command not found

解决方案: ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin
原因是此命令没有在系统默认的默认目录下

说明:/usr/local/mysql/bin/mysqladmin 是mysql安装目录得bin/mysqladmin

mysqldump: command not found mysqldump命令不存在的问题

Linux中找不到mysqldump命令的原因:系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令。

解决方法:1、知道mysql命令或mysqldump命令的完整路径,可以使用find命令查找

# find / -name mysqldump -print

比如mysql的路径是:/usr/local/mysql/bin/mysqldump

2、映射一个链接到/usr/bin目录下,相当于建立一个软链接文件

# ln -s /usr/local/mysql/bin/mysqldump /usr/bin

此时再使用mysqldump命令就可以了

 

方案

​ 1.mysqldump 是mysql中自带的一个备份工具

​ 使用mysqldump备份数据库,使用mysqladmin备份数据日志,编写两个脚本一个全量备份数据库的脚本databak.sh,一个增量备份日志的脚本binlogbak.sh,使用crontab定时任务,每个星期日凌晨3:00执行完全备份脚本,周一到周六凌晨3:00做增量备份。

实践

1.mysql开启增量备份,在my.cnf添加 : log-bin=/usr/local/mysql/mysql-bin

vim /usr/local/mysql/my.cnf

my.cof :

[mysqld]
port = 13336
skip-name-resolve
lower_case_table_names=1
tmp_table_size = 32M
max_connections=2000
max_allowed_packet=80M
wait_timeout=250
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#datadir=/mnt/www/data
#socket=/usr/local/mysql/mysql.sock
log-bin=/usr/local/mysql/mysql-bin

[mysqldump]
max_allowed_packet= 400M
user=xxx
password="xxx"

[mysqladmin]
max_allowed_packet= 400M
user=xxx
password="xxx"

 

 

2.创建备份文件存放的路径

mkdir -p /mnt/www/mysql/backup

3.创建mysql全量备份的脚本

vim /mnt/www/mysql/databak.sh

databak.sh :

#!/bin/bash

export LANG=en_US.UTF-8
#生成备份存放的目录

BakDir=/mnt/www/mysql/backup

LogFile=/mnt/www/mysql/backup/bak.log
#数据库名称
db_name='welfare_matchmaker'


Date=`date +%Y%m%d`

Begin=`date +"%Y年%m月%d日 %H时%M分%S秒"`
current_time=$(date +'%Y年%m月%d日 %H时%M分%S秒')
filepath=$BakDir$current_time'.sql.gz'

cd $BakDir

DumpFile=$Date.sql

GZDumpFile=$Date.sql.tgz


#此处没有使用 $db_password $db_user, 已经写入到配置文件中

echo '开始导出数据库...'

#/usr/local/mysql/my.cnf这个是mysql具体的配置文件,根据自己实际安装路径填写

mysqldump --defaults-extra-file=/usr/local/mysql/my.cnf $db_name > $DumpFile

echo '导出成功,文件名为: '$filepath
tar -czvf $GZDumpFile $DumpFile

rm $DumpFile

 

count=$(ls -l *.tgz |wc -l)

if [ $count -ge 5 ]

then

file=$(ls -l *.tgz |awk '{print $9}'|awk 'NR==1')

rm -f $file

fi

#只保留过去四周的数据库内容

 

Last=`date +"%Y年%m月%d日 %H时%M分%S秒"`

echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile

cd $BakDir/daily

rm -f *

 

4.创建mysql增量备份的脚本

vim /mnt/www/mysql/binlogbak.sh 

binlogbak.sh :

#!/bin/bash

export LANG=en_US.UTF-8

BakDir=/mnt/www/mysql/backup/daily

BinDir=/usr/local/mysql

LogFile=/mnt/www/mysql/backup/binlog.log

BinFile=/usr/local/mysql/mysql-bin.index

mysqladmin -uroot -p123456 flush-logs

#这个是用于产生新的mysql-bin.00000*文件

Counter=`wc -l $BinFile |awk '{print $1}'`

NextNum=0

#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。

for file in `cat $BinFile`

do

base=`basename $file`

#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./

NextNum=`expr $NextNum + 1`

if [ $NextNum -eq $Counter ]

then

echo $base skip! >> $LogFile

else

dest=$BakDir/$base

if(test -e $dest)

#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。

then

echo $base exist! >> $LogFile

else

cp $BinDir/$base $BakDir

echo $base copying >> $LogFile

fi

fi

done

echo `date +"%Y年%m月%d日 %H:%M:%S"` Bakup succ! >> $LogFile

5.为databak.sh和binlogbak.sh添加执行权限

cd /mnt/www/mysql

chmod 777 binlogbak.sh databak.sh

6.开启定时任务

vi /etc/crontab

crontab:

#每个星期日凌晨3:00执行完全备份脚本

0 3 * * 0 /mnt/www/mysql/databak.sh >/dev/null 2>&1

#周一到周六凌晨3:00做增量备份

0 3 * * 1-6 /mnt/www/mysql/binlogbak.sh >/dev/null 2>&1

使上述定时任务生效

crontab /etc/crontab

查看定时任务

crontab -l

 

标签:bin,usr,备份,mysqldump,mysql,local,全量
From: https://www.cnblogs.com/wjsqqj/p/17126119.html

相关文章

  • hadoop+hive+mysql+sqoop+spark完全分布式集群搭建
    hadoop+hive+mysql+sqoop+spark完全分布式集群搭建零、配置网络(固定ip)(可以不做,但是后面关闭后ip会重复变动,后面步骤中有再次提到,后面操作在做)1.固定ip因centos 7 ip......
  • OpenEthereum数据备份
    数据导出导出数据格式openethereum[options]exportblocks--format=[FORMAT]--from=[BLOCK]--to=[BLOCK][FILE]停止服务#systemctlstopopenethereum导出数据......
  • 群晖 Synology Photos 无法备份或上传照片
    群晖SynologyPhotos无法备份或上传照片错误代码:无法进行操作,请稍后再试(apiexception:602)pc端提示需要开启个人空间,但是此功能是开着的,尝试关闭重新打开一下......
  • 设计思路-mysql进行分词搜索
    有时候我们数据量很少,但是需要全文检索,如果用es的话就太重了。要引入新的技术栈,当然mysql高版本支持全文检索但是我们再低版本情况下怎么做 工具类@Slf4jpubliccla......
  • MySQL 数据库(表字段)命名规范
    一、数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(一般经常不需要加)加上下划线_组成,命名简洁明确,多个单词用下划线_分隔,一个项目一个数据库,多个项目慎用同一......
  • mysql事务隔离
    前言简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。你现在知道,MySQL是一个支持多引擎的系统,但并不是所有的引擎都......
  • mysql事务隔离级别及实现原理,深度理解
    1、事务是什么?事务是数据库一个不可分的工作单元,可以将多个操作步骤表示为一个步骤。2、事务的四大特性Atomicity原子性,Consistency一致性,Isolation隔离性,Durability持......
  • 备份trino/presto的表结构
    ###1.列出trino中所有的表trino--serverIP:8080--cataloghive--userbatch_dev--schema=SCHEMA--execute="showtables">table_list###2.剔除不必要的表,并......
  • 解决mysqlclient安装报缺少Microsoft Visual C++ 14.0 is required
    安装mysqlclient报错error:MicrosoftVisualC++14.0isrequired.Getitwith“MicrosoftVisualC++BuildTools”1.不要去下载VisualStudio!!!==没什么用(对我而言)......
  • 2.mysql存储过程、存储函数与触发器
    --创建一个存储过程DELIMITER$CREATEPROCEDURE存储过程名称(返回类型参数名1参数类型1,....)[......]BEGIN--具体组成存储过程的SQL语句....END$DE......