日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL被黑客攻击勒索5000美元,幸好有备份

發布時間:2024/1/8 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL被黑客攻击勒索5000美元,幸好有备份 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:IT邦德 中國DBA聯盟(ACDU)成員,目前從事DBA及程序編程 (Web\java\Python)工作,主要服務于生產制造 現擁有 Oracle 11g OCP/OCM、 Mysql、Oceanbase(OBCA)認證 分布式TBase\TDSQL數據庫、國產達夢數據庫以及紅帽子認證 從業8年DBA工作,在數據庫領域有豐富的經驗擅長主流數據Oracle、MySQL、PG 運維開發, 備份恢復,安裝遷移,性能優化、故障應急處理等。

文章目錄

  • 前言
    • 一、設計場景
    • 二、技術點
    • 三、服務器信息
    • 四、準備工作
    • 4.1 開啟binlog日志功能
    • 4.2 新建目錄,執行
    • 4.3 修改所屬的用戶/組:(不修改,mysql無法重啟)
    • 4.4 修改mysql配置文件,執行
    • 4.5 重啟mysql,執行
    • 五、編寫全量備份腳本(Mysql-FullyBak.sh)
    • 六、編寫增量備份腳本
    • 七、設置定時任務crontab
    • 八、恢復操作

前言

近期項目馬上要交付了,結果數據庫別黑客惡意攻擊,項目馬上要交付了,面臨違約,幸好有備份,項目順利交付,本文將MySQL備份的方法做了詳細闡述

黑客被攻擊發送的短信

一、設計場景

1)增量備份在周一到周六凌晨3點,復制mysql-bin.00000*到指定目錄; 2)全量備份則使用mysqldump將整個數據庫導出, 每周日凌晨3點執行,并會刪除上周留下的mysq-bin.00000*,然后對mysql的備份操作會保留在bak.log文件中。

二、技術點

Mysqldump、mysqlbinlog、crontab

三、服務器信息

主機:centos7;數據庫:mysql5.7

四、準備工作

4.1 開啟binlog日志功能

binlog日志默認不開啟,記錄的是mysql數據庫dml的操作

mysql> show variables like '%log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+-------+

4.2 新建目錄,執行

which mysql #mkdir /home/mysql #cd /home/mysql #mkdir mysql-bin #增量日志文件目錄

4.3 修改所屬的用戶/組:(不修改,mysql無法重啟)

#chown -R mysql.mysql mysql-bin

4.4 修改mysql配置文件,執行

#vim /etc/my.cnf 其中,server-id表示單個結點的id,這里由于只有一個結點, 所以可以把id隨機指定為一個數,這里將id設置成1。 若集群中有多個結點,則id不能相同(對于5.7以下版本不需要指定server-id); log_bin指定binlog日志文件的存儲路徑,日志文件以mysql-bin開頭。 加入以下內容: server-id=1 log_bin=/home/mysql/mysql-bin/mysql-bin

4.5 重啟mysql,執行

#service mysqld restart --root用戶執行

(5)查看日志文件

#cd /home/mysql/mysql-bin [root@Jeames mysql-bin]# ll total 8 -rw-r----- 1 mysql oinstall 154 Jan 14 05:45 mysql-bin.000001 -rw-r----- 1 mysql oinstall 39 Jan 14 05:45 mysql-bin.index (6)進入數據庫,查看啟動效果 #mysql -uroot -p #show variables like '%log_bin%'; +---------------------------------+---------------------------------------+ | Variable_name | Value | +---------------------------------+---------------------------------------+ | log_bin | ON | | log_bin_basename | /home/mysql/mysql-bin/mysql-bin | | log_bin_index | /home/mysql/mysql-bin/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+---------------------------------------+

五、編寫全量備份腳本(Mysql-FullyBak.sh)

進入/home/mysql目錄 新建目錄:mkdir backup 進入backup目錄,新建daily目錄:mkdir daily 切換到/home/mysql目錄,執行 #vim Mysql-FullyBak.sh --腳本中注意日期中+前面的空格及單引號 -------------------------------------------------------- #mysqldump to Fully backup mysql data per week! source /etc/profile BakDir=/home/mysql/backup LogFile=/home/mysql/backup/bak.log Date=`date +%Y%m%d` Begin=`date +"%Y年%m月%d日 %H:%M:%S"` cd $BakDir DumpFile=$Date.sql GZDumpFile=$Date.sql.tgz /usr/bin/mysqldump -uroot -proot --quick --events --databases wmp --flush-logs \ --delete-master-logs --single-transaction >$DumpFile /bin/tar -zvcf $GZDumpFile $DumpFile /bin/rm $DumpFile oldDate=`date -d '7 days ago' +%Y%m%d` oldBakFile=${oldDate}".sql.tgz" /bin/rm $oldBakFile Last=`date +"%Y年%m月%d日 %H:%M:%S"` echo 開始:$Begin 結束:$Last $GZDumpFile succ >> $LogFile cd $BakDir/daily /bin/rm -f *參數說明: –flush-logs 結束當前日志,生成新日志文件。 –delete-master-logs 清除以前的日志,以釋放空間。 –quick 該選項在導出大表時很有用,它強制 MySQLdump 從服務器查詢取得記錄直接輸出而不是取得所有記錄后將它們緩存到內存中。 –single-transaction 該選項在導出數據之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用于事務表,例如 InnoDB 和 BDB。 –events 導出事件 –master-data=2 其中參數–master-data=[0|1|2] 0: 不記錄 1:記錄為CHANGE MASTER語句 2:記錄為注釋的CHANGE MASTER語句 –master-data=2 選項將會在輸出SQL中記錄下完全備份后新日志文件的名稱, 用于日后恢復時參考,例如輸出的備份SQL文件中含有: CHANGE MASTER TO MASTER_LOG_FILE=’MySQL-bin.000002′, MASTER_LOG_POS=106;

六、編寫增量備份腳本

切換到/home/mysql目錄,執行: #vim Mysql-DailyBak.sh ------------------------------------------- #use cp to bakup mysql data everyday! source /etc/profile BakDir=/home/mysql/backup/daily BinDir=/home/mysql/mysql-bin LogFile=/home/mysql/backup/bak.log BinFile=/home/mysql/mysql-bin/mysql-bin.index /usr/bin/mysqladmin -uroot -proot flush-logs Counter=`wc -l $BinFile |awk '{print $1}'` #產生新的mysql-bin.00000*文件 NextNum=0 #比對$Counter和¥NextNum這兩個值來確定文件是不是最新的 for file in `cat $BinFile` dobase=`basename $file`#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [[ $NextNum -eq $Counter ]]thenecho $base skip! >> $LogFileelsedest=$BakDir/$baseif(test -e $dest)#test -e用于檢測目標文件是否存在,存在就寫exist!到$LogFile去thenecho $base exist! >> $LogFileelsecp $BinDir/$base $BakDirecho $base copying >> $LogFilefi fi donechmod a+x test.sh --給所有用戶執行test.sh讀寫的權限

七、設置定時任務crontab

在命令行輸入: #crontab -e 添加相應的任務,wq存盤退出 #每個星期日凌晨3:00執行完全備份腳本 0 3 * * 0 /bin/bash -x /home/mysql/Mysql-FullyBak.sh >/dev/null 2>&1 #周一到周六凌晨3:00做增量備份 0 3 * * 1-6 /bin/bash -x /home/mysql/Mysql-DailyBak.sh >/dev/null 2>&1 (2)查看定時任務:#crontab -l參數與說明: crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數 ;crontab -l //列出某個用戶cron服務的詳細內容;crontab -r //刪除所有用戶的cron服務;crontab -e //編輯某個用戶的cron服務;例如:root查看自己的cron設置:crontab -u root -l例如:root刪除用戶fred的cron設置:crontab -u fred -r 補充: (1)可直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務(針對整個系統的crontab文件); (2)crontab執行定時任務的記錄會寫入到/var/log/cron這個文件中,該記錄以帳號為區分。

八、恢復操作

恢復過程亦會寫入日志文件,如果數據量很大,建議先關閉binlog日志功能 1、場景:假設早上9點的時候,數據庫被攻擊,drop了整個數據庫! 2、恢復思路: 利用全備的sql文件中記錄的CHANGE MASTER語句,binlog文件及其位置點信息, 找出binlog文件中增量的那部分。 用mysqlbinlog命令將上述的binlog文件導出為sql文件,并剔除其中的drop語句。 通過全備文件和增量binlog文件導出的sql文件,就可以恢復到完整的數據。恢復步驟: (1)首先,解壓最新的全量備份文件,進入備份文件目錄,執行 #cd /home/mysql/backup #tar -zxvf XXX.sql.tgz (2)查看全備之后新增的binlog文件,執行 #grep CHANGE XXX.sql --全備文件 即mysql-bin.000027的154行,因此在該文件之前的binlog文件中的數據都已經包含在這個全備的sql文件中。 (3)將其他binlog文件(除去mysql-bin.000027)導出sql文件,執行 #mysqlbinlog mysql-bin.00000X >00Xbin.sql (4) vim編輯最新的00Xbin.sql刪除其中的drop語句 (5)恢復全備數據,執行: #mysql -uroot -p < XXX.sql 如:#mysql -uroot -p < 20210115.sql(7)恢復增量數據,執行(wmp為數據庫名稱) #mysql -uroot -p wpm<00Xbin.sql 如:#mysql -uroot -p wmp<000027bin.sql補充(若沒刪除,直接通過增量備份恢復) 若要恢復mysql-bin.000027文件的154行之后的信息 進入到mysql-bin.000027目錄,執行(wmp為數據庫名) #cd daily #mysqlbinlog --start-position=154 --database=wmp mysql-bin.000027 | mysql -uroot -p 至此數據庫全部恢復完成

總結

以上是生活随笔為你收集整理的MySQL被黑客攻击勒索5000美元,幸好有备份的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。