首頁  >  文章  >  資料庫  >  MySQL介紹增量備份與還原

MySQL介紹增量備份與還原

coldplay.xixi
coldplay.xixi轉載
2021-02-14 10:02:153869瀏覽

MySQL介紹增量備份與還原

免費學習推薦:mysql影片教學

文章目錄

  • 一、MySQL 增量備份
    • 1.增量備份的概念
      • 1.1 為什麼要使用增量備份
      • 1.2 增量備份的特性
    • 2.增量備份範例
  • 二、MySQL 增量恢復
    • 1.增量恢復的場景
    • 2.丟失完全備份之後更改的資料的恢復步驟
    • 3.完全備份之後丟失所有資料的恢復步驟
    • 4. 基於時間點與位置的恢復
      • 4.1 基於時間點的恢復
      • 4.1 基於位置的操作
    • 5. 指定企業備份策略的想法



##增量備份可以在完全備份的基礎上,減少備份檔案的大小,從而加快備份和還原的速度

    ##1.增量備份的概念
  1. 1.1 為什麼使用增量備份
#前面章節講到了完全備份有兩種方式,一種是使用tar 打包資料文件,另一種是

使用mysqldump 進行完全備份完全備份存在的問題很容易看到,每次都是把所有的數據內容進行備份,備份數據中有大量的重複數據,而完全備份的時間與還原的時間很長

    解決完全備份存在的問題就是使用增量備份的方式,增量備份就是備份自上一次備份之後增加或改變的檔案或內容

1.2 增量備份的特點MySQL介紹增量備份與還原
MySQL介紹增量備份與還原

增量備份的優點是沒有重複數據,備份量不大,時間短
  1. #缺點也很明顯,需要上次完全備份及完全備份之後所有的增量備份才能恢復,而且對所有增量備份進行逐個反推恢復,操作較為繁鎖
MySQL 沒有提供直接的增量備份方法,但可以透過MySQL 的二進位日誌(binary

logs)間接實現增量備份MySQL介紹增量備份與還原
MySQL介紹增量備份與還原

二進位日誌對備份的意義如下:

MySQL介紹增量備份與還原

MySQL介紹增量備份與還原

MySQL介紹增量備份與還原

MySQL介紹增量備份與還原
MySQL介紹增量備份與還原


#二進位日誌保存了所有更新或可能更新資料庫的操作

二進位日誌在啟動MySQL 伺服器後開始記錄,並在檔案達到max_binlog_size 所設定的大小或接收到flush logs 指令後重新建立新的日誌檔案

只需要定時執行flush logs 方法重新建立新的日誌,產生二進位檔案序列,並及時把這些日誌保存到安全的地方就完成了一個時間段的增量備份
  • 2.增量備份範例

開啟二進位日誌功能

###
vim /etc/my.cnf...[mysqld]log-bin=mysql-binbinlog_format = MIXED#指定二进制日志(binlog)的记录格式为 MIXEDsystemctl restart mysqld.service#重启服务cd /usr/local/mysql/datals -l /usr/local/mysql/data/mysql-bin.*#查看二进制文件#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式)#默认格式是 STATEMENT
######### ############每週選擇伺服器負載較輕的時間段,或使用者存取較少的時間段進行備份######
mysqldump -uroot -p123123 SCHOOL CLASS01 > /opt/SCHOOL_CLASS01_$(date +%F).sql#对表进行完全备份mysqldump -uroot -p123123 --all-databases SCHOOL > /opt/SCHOOL_$(date +%F).sql#对库进行完全备份crontab -e#也可以使用计划性任务来执行30 3 * * 3 mysqldump -uroot -p123123 SCHOOL CLASS01 > /opt/SCHOOL_CLASS01_$(date +%F).sql30 3 * * 3 mysqldump -uroot -p123123 --all-databases SCHOOL > /opt/SCHOOL_$(date +%F).sql每周三的凌晨 3:00 对数据库和表进行完全备份
########## ###########可每天進行增量備份操作,產生新的二進位日誌文件,這樣在插入新的資料後,新的二進位檔案對應的就是資料庫的變更的內容#### ##
ls /usr/local/mysql/datamysqladmin -uroot -p123123 flush-logs
###############插入新的數據,以模擬數據的增加或變更######
use SCHOOL;insert into CLASS01 values(3,'wangsan','woman','games');insert into CLASS01 values(4,'wangsi','man','runing');select * from CLASS01;
############# ##產生新的二進位檔案並查看其內容######
cd /usr/local/mysql/data/lsmysqladmin -uroot -p123123 flush-logs
##########
cp mysql-bin.000002 /opt/#将记录变更的二进制文件02复制至/opt目录下cd /opt/lsmysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002#使用64位编码机制去解码,按行读取详细内容
############################################################################################################################ ##二、MySQL 增量復原############增量復原比完全復原作業更為繁瑣######每個增量備份都是單獨的個體,資料不重複,需要控制得更精確############1.增量復原的場景#######
  • 当数据发送错误时,应根据实际情况选择使用完全备份恢复,还是增量备份
  • 增量备份的场景是:
    • 人为的 SQL 语句破坏了数据库
    • 在进行下一次全备之前发送系统故障导致数据库数据丢失
    • 在主从架构中,主库数据发送了故障
  • 根据数据丢失的情况可以分为两类:
    • 只丢失了完全备份之后更改的数据
    • 完全备份之后丢失所有的数据

2.丢失完全备份之后更改的数据的恢复步骤

  • 当完全备份之后更改的数据丢失,需要把完全备份之后的所有增量备份文件逐个恢复
  • 步骤如下:
mysql -uroot -p123123use SCHOOL;delete from CLASS1 where id=3;delete from CLASS1 where id=4;#删除插入的两条数据,模拟完全备份后数据丢失的故障select * from CLASS01;#检查quitmysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p123123#使用二进制文件进行恢复操作mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"#检查表内容是否恢复

MySQL介紹增量備份與還原
MySQL介紹增量備份與還原

3.完全备份之后丢失所有数据的恢复步骤

  • 当完全备份和增量备份之后,所有的数据丢失,需要把完全备份和所有增量备份文件逐个恢复
  • 步骤如下:
mysql -uroot -p123123use SCHOOL;drop table CLASS01;#直接删除整个表,假设完全备份后所有数据都丢失了quitmysql -uroot -p123123 SCHOOL <p><img src="https://img.php.cn/upload/article/000/000/052/c368a93d80781ae407afafe02a2ac327-11.png" alt="MySQL介紹增量備份與還原"><br><img src="https://img.php.cn/upload/article/000/000/052/1481568b3321e7dca79c49d509572b7b-12.png" alt="MySQL介紹增量備份與還原"></p><p><strong>4. 基于时间点与位置的恢复</strong></p>
  • 利用二进制日志可实现基于时间点与位置的恢复,例如由于误操作删除了一张表,这时完全恢复是没有用的
  • 因为日志里还有误操作的语句,我们需要的是恢复到误操作之前的状态,然后跳过误操作的语句,再恢复后面操作的语句

4.1 基于时间点的恢复

  • 基于时间点的恢复,就是将某个起始时间的二进制文件导入数据库中,从而跳过某个发生错误的时间点实现数据的恢复
  • 使用 mysqlbinlog 加上 --stop-datetime 选项,表示在哪个时间点结束,后面误操作的语句不执行
  • –start-datetime 选项表示执行后面的语句
  • 结合使用它们就可以跳过误操作的语句,完成恢复工作
  • 需要注意的是,二进制文件中保存的日期格式需要调整为用“-”分割
#恢复用户“wangsan”的数据,而不恢复“wangsi”mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS01;"mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --stop-datetime='2021-02-06 15:58:39' /opt/mysql-bin.000002 |mysql -uroot -p123123mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL介紹增量備份與還原

#恢复“wangsi”的数据mysqlbinlog --no-defaults --start-datetime='2021-02-06 15:58:39' /opt/mysql-bin.000002 |mysql -uroot -p

MySQL介紹增量備份與還原

4.1 基于位置的操作

  • 基于位置的恢复,就是使用基于时间点的恢复
  • 可能会出现在一个时间点里既同时存在正确的操作又存在错误的操作,基于位置是一种更为精确的恢复方式
mysqlbinlog --no-defaults --stop-position='609' /opt/mysql-bin.000002 | mysql -uroot -p#使用64位编码机制去解码并按行读取二进制文件02(增量备份)的详细内容......略

MySQL介紹增量備份與還原

#仅恢复“1810”之前的数据,即不恢复“wangsi”的数据mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS01;"mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --stop-position='1810' /opt/mysql-bin.000002 | mysql -uroot -pmysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL介紹增量備份與還原

#仅恢复“wangsi”的数据,跳过“wangsan”的数据恢复,即仅有第四条记录mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"mysqlbinlog --no-defaults --start-position='1810' /opt/mysql-bin.000002 | mysql -uroot -p123123mysql -uroot -p123123 -e "select * from SCHOOL.CLASS01;"

MySQL介紹增量備份與還原

5. 指定企业备份策略的思路

  • 指定企业备份策略要根据企业数据库的实际读写的频繁性与数据的重要性进行
  • 数据更新频繁,则应该进行较为频繁的备份
  • 数据较为重要,则在有适当更新时进行备份
  • 在数据库压力小的时段进行全备,如一周一次,然后每天增备
  • 根据公司的规模,中小公司可一天一次全备,大公司可每周一次全备,每天进行一次增备,并且尽量为企业实现主从复制架构

相关免费学习推荐:mysql数据库(视频)

以上是MySQL介紹增量備份與還原的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除