承接上文k8s自動化運維三
代碼備份
上文談到了通過cron定時拉取代碼的方式實現代碼備份,這裡提供出比較完善的方式:獲取指定項目所有的分支以及每個分支最新的代碼
# 進入到具體一個項目目錄下cd "$baiwang/xibaoxiao-h5"# 拉取每個分支的最新代碼git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; git checkout ${remote#origin/};git fetch;git pull;sleep 1s;done
git branch是獲取所有的分支
循環遍歷每個分支並切換到當前分支 git checkout
拉取最新的代碼 git pull
數據庫的備份機制全量備份
腳本源碼
https://gitee.com/pingfanrenbiji/MySQL_backup/blob/master/backup.sh
通過mysqldump命令做數據庫的全量備份
--single-transaction
--single-transaction參數的作用,設置事務的隔離級別為可重複讀,即REPEATABLE READ,這樣能保證在一個事務中所有相同的查詢讀取到同樣的數據,也就大概保證了在dump期間,如果其他innodb引擎的線程修改了表的數據並提交,對該dump線程的數據並無影響,在這期間不會鎖表
--flush-logs
關閉當前的二進制日誌文件並創建一個新文件,新的二進制日誌文件的名字在當前的二進制文件的編號上加1。
--set-gtid-purged=OFF
在原數據庫導出時加了--set-gtid-purged=OFF,導入新數據庫時,才會觸發記錄到新數據庫的binlog日誌。如果不加,則新數據庫不記錄binlog日誌。所以在我們做主從用了gtid時,用mysqldump備份時就要加--set-gtid-purged=OFF,否則你在主上導入恢復了數據,主沒有了binlog日誌,則主庫數據不會被從庫同步
--events 事件
--triggers 觸發器
--routines 導出存儲過程以及自定義函數
--master-data=2
A. =1和=2的區別很明顯,只是自動執行和手工執行的區別 =1時,直接導入備份文件,start slave不需要指定file和position
=2時,file和position是被注釋掉的,需要手動指定file和position-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin2.000001', MASTER_LOG_POS=107;
B. --master-data用於在master端dump數據,用於建立slave --dump-slave用戶在slave端dump數據,建立新的slave,至少是第2個slave,也就是已經有A-->B,現在從B上導出數據建立A-->C的複製增量備份(備份binlog文件)
腳本源碼
https://gitee.com/pingfanrenbiji/MySQL_backup/blob/master/daily.sh
binlog概述
binlog日誌也稱作二進制日誌,是MySQL服務日誌文件的一種。記錄除查詢之外的所有SQL命令(即show、select、desc等查詢命令)。可用於數據的備份和恢復。配置mysql主從同步的必要條件。
查看是否開啟了binlog
show variables like 'log_bin';
如果顯示OFF則代表未開啟。在MySQL8以前,這個功能是默認關閉的,需要手動開啟
vim /etc/mysql/my.cnf
[mysqld]#保存日誌的位置,實際生成的日誌會在後面添加對應的標誌log-bin = /var/lib/mysql/mysql-bin#日誌保存天數expire-logs-days = 14#日誌大小max-binlog-size = 500M#用於同步時區分mysql實例,唯一,5.7以上版本必須填寫server-id = 1#日誌格式,MIXED,ROW,STATEMENTbinlog_format ='MIXED'
重啟mysql,再次運行show variables like 'log_bin';
在mysql配置文件中定義好數據目錄的位置
在數據目錄中可以看到binlog二進制文件
binlog.index 索引文件
binlog.000031 第31個二進制文件
查看當前正在使用的二進制文件
show master status;
生成新的日誌文件
通過重啟數據庫服務
手動執行 flush logs; 可以生成新的日誌文件
刪除指定編號之前的binlog日誌文件
purge master logs to "binlog文件名";
刪除所有binlog日誌,重建新日誌
reset master;
查看日誌文件內容
mysqlbinlog 目錄/binlog日誌文件名;
插入之前的偏移量是156,插入2條數據之後的偏移量是708。查看日誌文件內容
查看當前日誌格式
當前日誌的格式為ROW行模式,如果想讓日誌內容顯示的是sql命令,就將日誌格式修改為mixed混合模式,再查看日誌內容就可以看到具體的執行操作了
還可以指定範圍進行數據恢復
mysqlbinlog --start-position=325 --stop-position=790 binlog.000001 | mysql -uroot -p123456-- 恢復起始偏移量為325,結束偏移量為790範圍內的數據