欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

mysql decode语句_mysql数据灾难恢复方案

发布时间:2025/4/17 数据库 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 mysql decode语句_mysql数据灾难恢复方案 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

数据库备份:将数据库中存在的现有数据,进行存放成为副本数据,可以解决数据容灾,提高系统的高可用性和灾难恢复性,数据崩溃时,以最小代价重新恢复数据。数据备份的分类:
  • 物理备份:指对数据库操作系统的物理文件(数据文件、日志文件)等的备份;

  • 冷备份:必须在数据库关闭的状态下进行备份,能够更好的保证数据库的完整性;

  • 热备份:能够在数据库处于正常运行的情况下备份,能够更高的保证服务的可用性;

  • 逻辑备份:指对数据库的逻辑组件(数据库、表、数据对象)进行备份;

  • 完全备份:将数据进行完整的备份,包含完整的库、表、索引、视图等,需要花费更长的时间

  • 差异备份:备份自上次完全备份到现在发生改变的数据库内容,备份的文件比完整备份的文件小,备份的速度更快;

  • 增量备份:备份至上次完全备份或增量备份后被修改的数据库内容

  • 增量备份之前需要查看配置文件,是否开启log_bin。进行mysql命令终端使用命令查看修改配置文件,查看配置文件位置my.cnf添加如下配置      系统变量binlog_format 指定二进制日志的类型。分别有statement、row、mined三种值。mysql5.7.6之前默认为statement模式。MySQL 5.7.7之后默认为row模式。这个参数主要影响主从复制。复制的模式有下面几种:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, mbr)。重启mysql服务器,在命令终端查看查看二进制日志文件的状态

    查看某个二进制日志文件的变化

    show binlog events in "mysql_binlog.000002";

    故障恢复

    全量数据恢复source /home/mysql/xxx.sql增量数据部分恢复 mysqlbinlog --start-position=1 --stop-position=795 /home/mysql/mysql_binlog.000002 |mysql -uroot -p密码 增量数据全部恢复  mysqlbinlog /home/mysql/mysql_binlog.000001 |mysql -uroot -p密码  查看二进制的内容  mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_binlog.000002

    新增用户赋予权限用来用备份(这部可以忽略)

    脚本代码 增量保留,并且删除一个月之前的binlog文件

    backupDir=/home/mysql/binlogBinDir=/var/lib/mysqlLogFile=/home/mysql/log/binlog.logBinFile=/var/lib/mysql/mysql_binlog.indexmysqladmin -uroot -p123456 flush-logs#读取mysql_binlog.index 文件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=$backupDir/$base if(test -e $dest) #test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。 then echo $base exist! >> $LogFile else mv $BinDir/$base $backupDir echo $base copying >> $LogFile fi fidoneecho `date +"%Y年%m月%d日 %H:%M:%S"` Backup success! >> $LogFileecho "delet a mothon ago log data";#1个月清空一次log文件find /home/mysql/binlog/ -mtime +30 -name "*.log*" -exec rm -rf {} \;echo "delete success";

    脚本代码 全量保存 一个月删除一次

    #!/bin/bash#需要备份的数据库dbNames=(db1 db2 db3 db4)Date=$(date --date="now" +%Y%m%d)ODate=$(date --date="-1 month" +%Y%m%d)newDir=/home/mysql/data/$Date#需要删除的目录oldDir=/home/mysql/data/$ODate#数据库密码password=123456#删除过期备份数据if [ -d $oldDir ]then echo "当前的路径为"$oldDir #rm -rf $oldDirfi#创建新备份文件加,如果创建不会重新创建if [ ! -d $newDir ]then mkdir $newDirfi#对需要备份的数据库进行备份for dbname in ${dbNames[*]}do dumpFile=$dbname-$Date.sql.gz mysqldump -uroot -p$password $dbname | gzip > $newDir/$dumpFiledoneecho "succ";

    生成环境数据备份策略

    • 在数据库压力小的时段继续全量备份,根据自已公司的业务情况,设置某个时间端进行全量备份

    • 数据更新频繁且比较重要,可以选择增量备份,记住定期删除日志文件

    我采取的备份方案:

    每周末进行一次全量备份,每天进行一次增量备份,如果发生故障可以先进行全量恢复,再根据mysqlbinlog命令根据posititon值或者时间点进行恢复。具体操作根据实际情况调整。

    编辑任务 contab -e

    重启crontab加载配置 service crond reload 就能开启定时任务备份

    至此mysql如何进行备份实战就至此结束了,觉得我的文章有用的就分享给身边的小伙伴。

    总结

    以上是生活随笔为你收集整理的mysql decode语句_mysql数据灾难恢复方案的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。