日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺析mysql 定時備份任務

瀏覽:141日期:2023-10-14 09:29:27

簡介

在生產環境上,為了避免數據的丟失,通常情況下都會定時的對數據庫進行備份。而Linux的crontab指令則可以幫助我們實現對數據庫定時進行備份。首先我們來簡單了解crontab指令,如果你會了請跳到下一個內容mysql備份。本文章的mysql數據庫是安裝在docker容器當中,以此為例進行講解。沒有安裝到docker容器當中也可以參照參照。

contab定時任務

使用crontab -e來編寫我們的定時任務。

0 5 * * 1 [command]

前面的5個數字分別代表分、時、日、月、周,后面的 command為你的執行命令。假如你需要在每天晚上8點整執行定時任務,那么可以這么寫

0 8 * * * [command]

擴展:

crontab -l 可以查看自己的定時任務 crontab -r 刪除當前用戶的所有定時任務

mysql備份

快速上手

這里我的mysql數據庫是docker容器。假如你需要在每天晚上8點整執行定時任務,那么可以這么寫。首先執行命令crontab -e。

0 8 * * * docker exec mysql_container mysqldump -uroot -proot_password database_name > /var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql

mysql_container 為你的數據庫容器名mysqldump 是mysql數據庫導出數據的指令-u 填寫root賬號-p 填寫root密碼database_name 需要備份的數據庫名/var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql 備份文件,后面是文件名的格式

如果你沒什么要求,單純的只是想要備份,那么上面那個命令就可以幫你進行定時備份。

小坑: mysql備份的時候我使用了docker exec -it mysqldump ... 這樣的命令去做bash腳本,因為-i參數是有互動的意思,導致在crontab中執行定時任務的時候,沒有輸出數據到sql文件當中。所以使用crontab定時的對docker容器進行備份命令的時候不要添加-i參數。

crontab優化

我不建議直接在crontab -e里面寫要執行的命令,任務多了就把這個文件寫的亂七八招了。建議把數據庫備份的命令寫成一個bash腳本。在crontab這里調用就好了如:建立一個/var/backups/mysql/mysqldump.sh文件,內容如下

docker exec mysql_container mysqldump -uroot -pmypassword database_name > /var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql

然后把文件改為當前用戶可執行的:

chmod 711 /var/backups/mysql/mysqldump.sh

執行crontab -e命令修改成如下:

0 20 * * * /var/backups/mysql/mysqldump.sh

那么這樣就比較規范了。

mysql備份優化

因為sql文件比較大,所以一般情況下都會對sql文件進行壓縮,不然的話磁盤占用就太大了。假設你做了上面這一步 crontab優化,我們可以把mysqldump.sh腳本改成下面這樣:

export mysqldump_date=$(date +%Y%m%d_%H%M%S) && docker exec mysql_container mysqldump -uroot -pmypassword database_name> /var/backups/mysql/$mysqldump_date.sql && gzip /var/backups/mysql/$mysqldump_date.sqlfind /var/backups/mysql/ -name '*.sql' -mtime +15 -exec rm -f {} ;

export 在系統中自定義了個變量mysqldump_date,給備份和壓縮命令使用gzip 為壓縮命令,默認壓縮了之后會把源文件刪除,壓縮成.gz文件find ... 這行命令的意思為,查詢/var/backups/mysql/目錄下,創建時間15天之前(-mtime +15),文件名后綴為.sql的所有文件 執行刪除命令-exec rm -f {} ;。總的意思就是:mysql的備份文件只保留15天之內的。15天之前的都刪除掉。

數據恢復

若一不小心你執行drop database,穩住,淡定。我們首先要創建數據庫被刪除的數據庫。

>mysql create database database_name;

然后恢復最近備份的數據。恢復備份的命令:

docker exec -i mysql_container mysql -uroot -proot_password database_name < /var/backups/mysql/20200619_120012.sql

雖然恢復了備份文件的數據,但是備份時間點之后的數據我們卻沒有恢復回來。如:晚上8點進行定時備份,但是卻在晚上9點drop database,那么晚上8點到晚上9點這一個小時之內的數據卻沒有備份到。這時候就要使用binlog日志了。

binlog日志

binlog 是mysql的一個歸檔日志,記錄的數據修改的邏輯,如:給 ID = 3 的這一行的 money 字段 + 1。首先登錄mysql后查詢當前有多少個binlog文件:

> mysql show binary logs;+---------------+-----------+-----------+| Log_name | File_size | Encrypted |+---------------+-----------+-----------+| binlog.000001 | 729 | No || binlog.000002 | 1749 | No || binlog.000003 | 1087 | No |+---------------+-----------+-----------+

查看當前正在寫入的binlog

mysql> show master statusG;

生成新的binlog文件,mysql的后續操作都會寫入到新的binlog文件當中,一般在恢復數據都時候都會先執行這個命令。

mysql> flush logs

查看binlog日志

mysql> show binlog events in ’binlog.000003’;

小知識點:初始化mysql容器時,添加參數--binlog-rows-query-log-events=ON。或者到容器當中修改/etc/mysql/my.cnf文件,添加參數binlog_rows_query_log_events=ON,然后重啟mysql容器。這樣可以把原始的SQL添加到binlog文件當中。

恢復數據

拿回上面例子的這段話。

晚上8點進行定時備份,但是卻在晚上9點drop database,那么晚上8點到晚上9點這一個小時之內的數據卻沒有備份到。。

首先進入到mysql容器后,切換到/var/lib/mysql目錄下,查看binlog文件的創建日期

cd /var/lib/mysqlls -l...-rw-r----- 1 mysql mysql 729 Jun 19 15:54 binlog.000001-rw-r----- 1 mysql mysql 1749 Jun 19 18:45 binlog.000002-rw-r----- 1 mysql mysql 1087 Jun 19 20:58 binlog.000003...

從文件日期可以看出:當天時間為2020-06-21,binlog.000002文件的最后更新時間是 18:45 分,那么晚上8點的備份肯定包含了binlog.000002的數據;binlog.000003的最后更新日期為 20:58 分,那么我們需要恢復的數據 = 晚上8點的全量備份 + binlog.000003的 20:00 - 執行drop database命令時間前的數據。

恢復命令格式:

mysqlbinlog [options] file | mysql -uroot -proot_password database_name

mysqlbinlog常用參數:

--start-datetime 開始時間,格式 2020-06-19 18:00:00--stop-datetime 結束時間,格式同上--start-positon 開始位置,(需要查看binlog文件)--stop-position 結束位置,同上...

恢復備份數據和binlog數據前建議先登錄mysql后執行flush logs生成新的binlog日志,這樣可以專注需要恢復數據的binlog文件。首先我們需要查看binlog日志,在哪個位置進行了drop database操作:

mysql> show binlog events in ’binlog.000003’;+---------------+-----+----------------+-----------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info|+---------------+-----+----------------+-----------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------+| binlog.000003 | 4 | Format_desc | 1 | 125 | Server ver: 8.0.20, Binlog ver: 4 || binlog.000003 | 125 | Previous_gtids | 1 | 156 | || binlog.000003 | 156 | Anonymous_Gtid | 1 | 235 | SET @@SESSION.GTID_NEXT= ’ANONYMOUS’|| binlog.000003 | 235 | Query | 1 | 318 | BEGIN|| binlog.000003 | 318 | Rows_query | 1 | 479 | # INSERT INTO `product_category` SET `name` = ’床上用品’ , `create_time` = 1592707634 , `update_time` = 1592707634 , `lock_version` = 0 || binlog.000003 | 479 | Table_map | 1 | 559 | table_id: 139 (hotel_server.product_category)|| binlog.000003 | 559 | Write_rows | 1 | 629 | table_id: 139 flags: STMT_END_F || binlog.000003 | 629 | Xid | 1 | 660 | COMMIT /* xid=2021 */|| binlog.000004 | 660 | Anonymous_Gtid | 1 | 739 | SET @@SESSION.GTID_NEXT= ’ANONYMOUS’|| binlog.000004 | 739 | Query | 1 | 822 | drop database hotel_server /* xid=26 */ |+---------------+-----+----------------+-----------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------

根據上面的日志,我們可以看到,在End_log_pos= 822 的位置執行了drop database操作,那么使用binlog恢復的范圍就在2020-06-19 20:00:00 - 660 的位置。為什么是660?因為drop database的上一個事務的提交是660的位置,命令如下:

mysqlbinlog --start-datetime=2020-06-19 20:00:00 --stop-position=660 /var/lib/mysql/binlog.000003 | mysql -uroot -proot_password datbase_name

如果你的范圍包括了822的位置,那么就會幫你執行drop database命令了。不信你試試?執行完上面的命令,你的數據就會恢復到drop database前啦!開不開心,激不激動!

總結

因為mysql定時備份是在生產環境上必須的任務。是很常用的。所以我就迫不及待的寫博客。當然也很感謝我同事的幫助。這篇文章已經寫了三天了,因為我也是在不斷地試錯,不斷的更新文章。避免把錯誤的知識點寫出來。如果幫到你了,關注我一波唄!謝謝。

以上就是淺析mysql 定時備份任務的詳細內容,更多關于mysql 定時備份任務的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产免费| 九一精品国产| 日韩欧美2区| 青青草国产精品亚洲专区无| 午夜久久av| 国产精品久久久久久久久久妞妞| 国产精品美女久久久久久不卡| 欧美国产另类| 欧美黑人巨大videos精品| 麻豆视频一区二区| 成人午夜在线| 婷婷综合网站| 91在线成人| 美女久久99| av高清一区| 日韩精品一二三| 免费在线观看一区| 欧美不卡高清| 日本午夜精品视频在线观看| 国产aa精品| 亚洲欧美日本国产专区一区| 欧美日韩伊人| 亚洲h色精品| 日韩制服丝袜先锋影音| 国产精品亚洲四区在线观看 | 激情欧美亚洲| 日本麻豆一区二区三区视频| 成人台湾亚洲精品一区二区| 香蕉成人av| 色综合视频一区二区三区日韩 | 欧美久久精品一级c片| 蜜臀91精品一区二区三区| 欧美亚洲一区二区三区| 国产精品一区二区精品 | 国产一区一一区高清不卡| 亚洲福利免费| 日韩亚洲精品在线观看| 国产成人免费精品| 国产视频一区在线观看一区免费| 亚洲三级国产| 欧美激情麻豆| 精品在线播放| 国产精品地址| 国产真实久久| 国产乱子精品一区二区在线观看| 99久久www免费| 先锋影音国产一区| 日韩成人午夜精品| 日韩理论视频| 日本不卡一区二区三区| 亚洲风情在线资源| 亚洲精品伦理| 丝袜美腿一区| 欧美日韩亚洲国产精品| 亚洲调教视频在线观看| 欧美久久香蕉| 五月婷婷亚洲| 嫩呦国产一区二区三区av| 欧美日韩激情| 久久精品国产亚洲一区二区三区| 欧美中文日韩| 日韩av有码| 日韩欧美中文字幕电影| 精品亚洲美女网站| 国产精品白丝一区二区三区| 国产精品日韩欧美一区| 欧美久久天堂| 欧美精品1区| 日本aⅴ精品一区二区三区| 亚洲免费激情| 久久久噜噜噜| 国产一区二区亚洲| 日韩精品免费视频一区二区三区| 午夜国产一区二区| 国产成年精品| 国产亚洲精品美女久久 | 日韩欧美另类中文字幕| 午夜国产欧美理论在线播放| 国产91欧美| 国产精品17p| 日本成人在线一区| 日韩亚洲精品在线| 日韩电影免费在线观看| 久久av中文| 欧美午夜网站| 欧美日韩一区自拍| 91成人在线网站| 香蕉久久久久久| 亚洲欧美激情诱惑| 久久亚洲精品中文字幕蜜潮电影| 福利视频一区| 国产成年精品| 国产66精品| 精品视频在线观看网站| 日韩高清不卡在线| 日韩av资源网| 免费观看在线色综合| japanese国产精品| 国产精品88久久久久久| 久久久9色精品国产一区二区三区| 国产成人免费视频网站视频社区| 麻豆视频一区| 韩日一区二区| 久久久国产精品网站| 国产精品2区| 久久精品一本| 91一区二区| 日韩精品免费一区二区在线观看| 视频福利一区| 伊人久久大香线蕉av不卡| 久久中文字幕av一区二区不卡| 亚洲www啪成人一区二区| 丝袜美腿诱惑一区二区三区| 天堂日韩电影| 夜夜嗨一区二区| 亚洲影视一区二区三区| 亚洲精品伊人| 日韩动漫一区| 国产伦精品一区二区三区千人斩 | 久久国产中文字幕| 在线日韩视频| 亚洲免费激情| 色婷婷成人网| 国产激情久久| 91亚洲人成网污www| 欧美日韩免费观看视频| 136国产福利精品导航网址| 亚洲婷婷在线| 亚洲精品自拍| 国产精品久久亚洲不卡| 国产粉嫩在线观看| 亚洲调教视频在线观看| 蜜桃视频一区二区三区在线观看| 7777精品| 国产美女高潮在线观看| 9国产精品视频| 国产日韩中文在线中文字幕 | 福利一区视频| 亚洲手机在线| 亚洲2区在线| 国产精选久久| 香蕉视频亚洲一级| 视频一区二区中文字幕| 日韩国产一二三区| 国产91在线精品| 在线亚洲自拍| 国产日产精品_国产精品毛片| 91欧美在线| 日本欧美在线看| 国产乱子精品一区二区在线观看| 国产va在线视频| 久久亚洲一区| 国产一区日韩| 自拍日韩欧美| 麻豆精品蜜桃视频网站| 在线日韩中文| 国产精品一区二区三区av| 日本精品影院| 日韩精品免费一区二区夜夜嗨| 日韩欧美在线中字| 日韩在线黄色| 99久久九九| 久久的色偷偷| 国产模特精品视频久久久久| 精品一区二区三区中文字幕在线| 亚洲综合电影一区二区三区| 麻豆视频一区| 日韩一区二区三区四区五区| yellow在线观看网址| 亚洲日本久久| 久久精品1区| 国产一区 二区| 亚洲一级高清| 国产不卡av一区二区| 日韩区欧美区| 99国产精品99久久久久久粉嫩| 美腿丝袜亚洲一区| 日本在线观看不卡视频| 在线日韩中文| 麻豆国产在线| 国产精品乱战久久久| 亚洲aa在线| 久久成人一区| 精品免费av在线| 久久天堂影院| 国产乱人伦丫前精品视频| 99riav国产精品| 国产在线|日韩| 久久wwww| 久久国产乱子精品免费女| 一区二区精品| 国产亚洲激情| 亚洲午夜在线| 久久精品1区| 日本美女一区| 精品中文在线| 久久免费福利| 久久av综合| 国产日产精品_国产精品毛片| 噜噜噜躁狠狠躁狠狠精品视频 |