<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL 定時(shí)備份數(shù)據(jù)庫

          共 5229字,需瀏覽 11分鐘

           ·

          2022-01-13 23:51

          ????關(guān)注后回復(fù)?“進(jìn)群”?,拉你進(jìn)程序員交流群????


          來源丨Java專欄


          在操作數(shù)據(jù)過程中,可能會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)誤,甚至數(shù)據(jù)庫奔潰,而有效定時(shí)備份能很好地保護(hù)數(shù)據(jù)庫。本篇文章主要講述了幾種方法進(jìn)行 MySQL 定時(shí)備份數(shù)據(jù)庫。


          ?

          1

          mysqldump命令備份數(shù)據(jù)


          在MySQL中提供了命令行導(dǎo)出數(shù)據(jù)庫數(shù)據(jù)以及文件的一種方便的工具mysqldump,我們可以通過命令行直接實(shí)現(xiàn)數(shù)據(jù)庫內(nèi)容的導(dǎo)出dump,首先我們簡(jiǎn)單了解一下mysqldump命令用法:


          #MySQLdump常用
          mysqldump -u root -p --databases 數(shù)據(jù)庫1 數(shù)據(jù)庫2 > xxx.sql



          2

          mysqldump常用操作示例


          1. 備份全部數(shù)據(jù)庫的數(shù)據(jù)和結(jié)構(gòu)


          mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql


          2.備份全部數(shù)據(jù)庫的結(jié)構(gòu)(加 -d 參數(shù))


          mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql


          3. 備份全部數(shù)據(jù)庫的數(shù)據(jù)(加 -t 參數(shù))


          mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql


          4.備份單個(gè)數(shù)據(jù)庫的數(shù)據(jù)和結(jié)構(gòu)(,數(shù)據(jù)庫名mydb)


          mysqldump -uroot-p123456 mydb > /data/mysqlDump/mydb.sql


          5. 備份單個(gè)數(shù)據(jù)庫的結(jié)構(gòu)


          mysqldump -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql


          6. 備份單個(gè)數(shù)據(jù)庫的數(shù)據(jù)


          mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql


          7. 備份多個(gè)表的數(shù)據(jù)和結(jié)構(gòu)(數(shù)據(jù),結(jié)構(gòu)的單獨(dú)備份方法與上同)


          mysqldump -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql


          8. 一次備份多個(gè)數(shù)據(jù)庫


          mysqldump -uroot -p123456 --databases db1 db2 > /data/mysqlDump/mydb.sql


          ?

          3

          還原 MySQL 備份內(nèi)容


          有兩種方式還原,第一種是在 MySQL 命令行中,第二種是使用 SHELL 行完成還原(點(diǎn)擊下載2021年最新阿里p7面試題教程)?


          1. 在系統(tǒng)命令行中,輸入如下實(shí)現(xiàn)還原:


          mysql -uroot -p123456 < /data/mysqlDump/mydb.sql


          2. 在登錄進(jìn)入mysql系統(tǒng)中,通過source指令找到對(duì)應(yīng)系統(tǒng)中的文件進(jìn)行還原:


          mysql>?source?/data/mysqlDump/mydb.sql


          在 Linux中,通常使用BASH腳本對(duì)需要執(zhí)行的內(nèi)容進(jìn)行編寫,加上定時(shí)執(zhí)行命令crontab實(shí)現(xiàn)日志自動(dòng)化生成。


          以下代碼功能就是針對(duì)mysql進(jìn)行備份,配合crontab,實(shí)現(xiàn)備份的內(nèi)容為近一個(gè)月(31天)內(nèi)的每天的mysql數(shù)據(jù)庫記錄。


          編寫B(tài)ASH維護(hù)固定數(shù)量備份文件


          在Linux中,使用vi或者vim編寫腳本內(nèi)容并命名為:mysql_dump_script.sh


          #!/bin/bash

          #保存?zhèn)浞輦€(gè)數(shù),備份31天數(shù)據(jù)
          number=31
          #備份保存路徑
          backup_dir=/root/mysqlbackup
          #日期
          dd=`date +%Y-%m-%d-%H-%M-%S`
          #備份工具
          tool=mysqldump
          #用戶名
          username=root
          #密碼
          password=TankB214
          #將要備份的數(shù)據(jù)庫
          database_name=edoctor

          #如果文件夾不存在則創(chuàng)建
          if?[ ! -d $backup_dir?];
          then?????
          ????mkdir -p $backup_dir;
          fi

          #簡(jiǎn)單寫法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
          $tool?-u $username?-p$password?$database_name?> $backup_dir/$database_name-$dd.sql

          #寫創(chuàng)建備份日志
          echo?"create $backup_dir/$database_name-$dd.dupm"?>> $backup_dir/log.txt

          #找出需要?jiǎng)h除的備份
          delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }'?| head -1`

          #判斷現(xiàn)在的備份數(shù)量是否大于$number
          count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }'?| wc -l`

          if?[ $count?-gt $number?]
          then
          ??#刪除最早生成的備份,只保留number數(shù)量的備份
          ??rm $delfile
          ??#寫刪除文件日志
          ??echo?"delete $delfile"?>> $backup_dir/log.txt
          fi


          如上代碼主要含義如下:


          1.首先設(shè)置各項(xiàng)參數(shù),例如number最多需要備份的數(shù)目,備份路徑,用戶名,密碼等。

          2.執(zhí)行mysqldump命令保存?zhèn)浞菸募?,并將操作打印至同目錄下的log.txt中標(biāo)記操作日志。

          3.定義需要?jiǎng)h除的文件:通過ls命令獲取第九列,即文件名列,再通過實(shí)現(xiàn)定義操作時(shí)間最晚的那個(gè)需要?jiǎng)h除的文件。

          4.定義備份數(shù)量:通過ls命令加上,統(tǒng)計(jì)以sql結(jié)尾的文件的行數(shù)。

          5.如果文件超出限制大小,就刪除最早創(chuàng)建的sql文件


          使用crontab定期執(zhí)行備份腳本


          在 Linux 中,周期執(zhí)行的任務(wù)一般由cron這個(gè)守護(hù)進(jìn)程來處理[ps -ef|grep cron]。cron讀取一個(gè)或多個(gè)配置文件,這些配置文件中包含了命令行及其調(diào)用時(shí)間。

          cron的配置文件稱為“crontab”,是“cron table”的簡(jiǎn)寫。


          cron服務(wù)


          cron是一個(gè) Liunx 下 的定時(shí)執(zhí)行工具,可以在無需人工干預(yù)的情況下運(yùn)行作業(yè)。


          service crond start //啟動(dòng)服務(wù)
          service crond stop //關(guān)閉服務(wù)
          service crond restart //重啟服務(wù)
          service crond reload //重新載入配置
          service crond status //查看服務(wù)狀態(tài)


          crontab語法


          crontab命令用于安裝、刪除或者列出用于驅(qū)動(dòng)cron后臺(tái)進(jìn)程的表格。用戶把需要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行。每個(gè)用戶都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接創(chuàng)建或者直接修改。該crontab文件是通過crontab命令創(chuàng)建的。


          在crontab文件中如何輸入需要執(zhí)行的命令和時(shí)間。該文件中每行都包括六個(gè)域,其中前五個(gè)域是指定命令被執(zhí)行的時(shí)間,最后一個(gè)域是要被執(zhí)行的命令。

          每個(gè)域之間使用空格或者制表符分隔。


          格式如下:?


          minute hour day-of-month month-of-year day-of-week commands
          合法值 00-59?00-23?01-31?01-12?0-6?(0?is?sunday)


          除了數(shù)字還有幾個(gè)個(gè)特殊的符號(hào)就是"*"、"/"和"-"、",",*代表所有的取值范圍內(nèi)的數(shù)字,"/"代表每的意思,"/5"表示每5個(gè)單位,"-"代表從某個(gè)數(shù)字到某個(gè)數(shù)字,","分開幾個(gè)離散的數(shù)字。


          -l 在標(biāo)準(zhǔn)輸出上顯示當(dāng)前的crontab。?

          -r 刪除當(dāng)前的crontab文件。?

          -e 使用VISUAL或者EDITOR環(huán)境變量所指的編輯器編輯當(dāng)前的crontab文件。當(dāng)結(jié)束編輯離開時(shí),編輯后的文件將自動(dòng)安裝。?


          創(chuàng)建cron腳本


          第一步:寫cron腳本文件,命名為mysqlRollBack.cron。

          15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt? 表示,每隔15分鐘,執(zhí)行打印一次命令?

          第二步:添加定時(shí)任務(wù)。執(zhí)行命令 “crontab crontest.cron”。搞定?

          第三步:"crontab -l" 查看定時(shí)任務(wù)是否成功或者檢測(cè)/var/spool/cron下是否生成對(duì)應(yīng)cron腳本


          注意:這操作是直接替換該用戶下的crontab,而不是新增


          定期執(zhí)行編寫的定時(shí)任務(wù)腳本(記得先給shell腳本執(zhí)行權(quán)限)


          0?2?* * * /root/mysql_backup_script.sh


          隨后使用crontab命令定期指令編寫的定時(shí)腳本


          crontab?mysqlRollback.cron


          再通過命令檢查定時(shí)任務(wù)是否已創(chuàng)建:


          附 crontab 的使用示例:


          1. 每天早上6點(diǎn)?


          0?6?* * * echo?"Good morning."?>> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因?yàn)閏ron把任何輸出都email到root的信箱了。


          2. 每?jī)蓚€(gè)小時(shí)?


          0?*/2?* * * echo?"Have a break now."?>> /tmp/test.txt


          3. 晚上11點(diǎn)到早上8點(diǎn)之間每?jī)蓚€(gè)小時(shí)和早上八點(diǎn)?


          0?23-7/2,8?* * * echo "Have a good dream"?>> /tmp/test.txt


          4. 每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn)?


          0?11?4?* 1-3?command?line


          5.1 月 1 日早上 4 點(diǎn)?


          0?4?1?1?* command line SHELL=/bin/bash?PATH=/sbin:/bin:/usr/sbin:/usr/bin?MAILTO=root //如果出現(xiàn)錯(cuò)誤,或者有數(shù)據(jù)輸出,數(shù)據(jù)作為郵件發(fā)給這個(gè)帳號(hào) HOME=/


          6. 每小時(shí)執(zhí)行/etc/cron.hourly內(nèi)的腳本


          01 * *?* *?root run-parts /etc/cron.hourly


          7. 每天執(zhí)行/etc/cron.daily內(nèi)的腳本


          02 4 * *?* root run-parts /etc/cron.daily


          8. 每星期執(zhí)行/etc/cron.weekly內(nèi)的腳本


          22 4 * *?0 root run-parts /etc/cron.weekly


          9. 每月去執(zhí)行/etc/cron.monthly內(nèi)的腳本?


          42 4 1 * *?root run-parts /etc/cron.monthly


          注意: "run-parts" 這個(gè)參數(shù)了,如果去掉這個(gè)參數(shù)的話,后面就可以寫要運(yùn)行的某個(gè)腳本名,而不是文件夾名?!?


          10. 每天的下午4點(diǎn)、5點(diǎn)、6點(diǎn)的5 min、15 min、25 min、35 min、45 min、55 min時(shí)執(zhí)行命令。?


          5,1525,3545,55?1617,18?* * * command


          11. 每周一,三,五的下午3:00系統(tǒng)進(jìn)入維護(hù)狀態(tài),重新啟動(dòng)系統(tǒng)。


          00 15 * *?1,3,5 shutdown -r +5


          12. 每小時(shí)的10分,40分執(zhí)行用戶目錄下的innd/bbslin這個(gè)指令:?


          10,40 * *?* *?innd/bbslink


          13. 每小時(shí)的1分執(zhí)行用戶目錄下的bin/account這個(gè)指令:?


          以下是我的測(cè)試每分鐘的截圖效果,其對(duì)應(yīng)代碼如下:


          * * *?* *?/root/mysql_backup_script.sh


          效果截圖:



          其中的log.txt記錄備份的操作詳細(xì)日志:



          本文參考:

          1.MySQLdump常用命令

          www.cnblogs.com/smail-bao/p/6402265.html

          2.利用Shell腳本實(shí)現(xiàn)對(duì)mysql數(shù)據(jù)庫的備份:

          www.cnblogs.com/mracale/p/7251292.html

          3.Linux下的Crontab定時(shí)執(zhí)行任務(wù)命令詳解:

          www.cnblogs.com/longjshz/p/5779215.html


          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?面試題?資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

          點(diǎn)擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點(diǎn)這里好文分享給更多人↓↓

          瀏覽 26
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆A∨在线 | 台湾成人综合网 | 嫩草影院成人 | 婷婷五月天国产 | 在线综合国产 |