<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ù)據(jù)庫(kù)備份與還原指南

          共 6010字,需瀏覽 13分鐘

           ·

          2024-07-24 18:26

          備份(mysqldump)

          實(shí)現(xiàn)功能:

                1、備份指定的數(shù)據(jù)庫(kù)

                2、刪除指定天數(shù)前的備份文件,默認(rèn)設(shè)定了1天

          腳本示例(mysql_bak.sh)

          
              

          # 數(shù)據(jù)庫(kù)備份根目錄

          BACKUP_DIR="/usr/local/mysqlbackups/tsmbak/"



          #指定mysql所在主機(jī)的主機(jī)名

          DB_HOSTNAME='hostname'



          #指定mysql登錄用戶名

          DB_USERNAME='root'



          #指定mysql登錄密碼

          DB_PASSWORD='xxxx'



          #指定備份的數(shù)據(jù)庫(kù)名

          DB_NAME="xxxx"



          #定義當(dāng)前日期為變量

          CURRENT_DATE=$(date +"%Y%m%d$H")



          #定義刪除N天前的文件變量

          DEL_DAYS_BEFORE_FILES=1



          #指定mysqldump所在目錄

          MYSQLDUMP_DIR="/usr/bin"



          #按日期創(chuàng)建目錄(數(shù)據(jù)庫(kù)備份目錄)

          BASH_PATH=${BACKUP_DIR}/${CURRENT_DATE}



          echo "---------------------------------------------------------"



          # 判斷目標(biāo)路徑是否存在

          if [ ! -d ${BASH_PATH} ];then

          echo "文件不存在,創(chuàng)建文件夾:${BASH_PATH}"

          mkdir -p ${BASH_PATH}

          else

          echo "${BASH_PATH} 文件夾已存在"

          fi



          echo "開始備份 ${DB_NAME} 數(shù)據(jù)庫(kù)"



          #備份指定數(shù)據(jù)庫(kù)

          if $($MYSQLDUMP_DIR/mysqldump -h ${DB_HOSTNAME} -u${DB_USERNAME} -p${DB_PASSWORD} ${DB_NAME} > "${BASH_PATH}/${DB_NAME}_${CURRENT_DATE}.sql");then

          cd ${BASH_PATH}

          gzip ${DB_NAME}_${CURRENT_DATE}.sql

          echo "---------------------------------------------------------"

          echo "${CURRENT_DATE}--Backup database ${DB_NAME} successfully!"

          echo "---------------------------------------------------------"



          else

          echo "----------------------------------------------------------"

          echo "${CURRENT_DATE}--Backup database ${DB_NAME} unsuccessfully"

          echo "----------------------------------------------------------"

          fi



          #刪除指定N天前的備份文件及目錄

          #如 +2:表示3天以前 -2:2天以內(nèi) 1:1天以前的24小時(shí) 0:表示1天以內(nèi)

          find ${BACKUP_DIR} -name "*" -type f -mtime ${DEL_DAYS_BEFORE_FILES} -exec rm -rf {} \;

          echo "已刪除${DEL_DAYS_BEFORE_FILES}天前的備份文件及目錄"



          echo "---------------------------------------------------------"

          賦予文件執(zhí)行權(quán)限

          
              

          chmod +x mysql_bak.sh

          運(yùn)行測(cè)試

          
              

          # 當(dāng)前目錄下

          ./mysql_bak.sh

          如果報(bào)/bin/bash^M: 壞的解釋器:沒有那個(gè)文件或目錄 ”換了幾種編譯方法就解決了,但這次還是不行,于是又換:
          bash mysql_bak.sh

           

          原因可能是因?yàn)槲以趙in下操作的時(shí)候,修改到了此文件。

                  在win下編輯的時(shí)候,換行結(jié)尾是\n\r , 而在linux下 是\n,所以才會(huì)有 多出來(lái)的\r

          
              

          # 將文件中\(zhòng)r替換為空白

          sed -i 's/\r$//' mysql_bak.sh

          再次編譯!成功?。?/p>

          find -mtime 介紹

                  find為查詢命令,-time是根據(jù)時(shí)間查詢,可作為條件,具體設(shè)置不同,查詢結(jié)果不同

          mtime參數(shù)的理解應(yīng)該如下:

          -mtime n 按照文件的更改時(shí)間來(lái)找文件,n為整數(shù)。

          n 表示文件更改時(shí)間距離為n天
          -n 表示文件更改時(shí)間距離在n天以內(nèi)
          +n 表示文件更改時(shí)間距離在n天以前

          示例:

          -mtime 0 表示文件修改時(shí)間距離當(dāng)前為0天的文件,即距離當(dāng)前時(shí)間不到1天(24小時(shí))以內(nèi)的文件。
          -mtime 1 表示文件修改時(shí)間距離當(dāng)前為1天的文件,即距離當(dāng)前時(shí)間1天(24小時(shí)-48小時(shí))的文件。
          -mtime+1 表示文件修改時(shí)間為大于1天的文件,即距離當(dāng)前時(shí)間2天(48小時(shí))之外的文件
          -mtime -1 表示文件修改時(shí)間為小于1天的文件,即距離當(dāng)前時(shí)間1天(24小時(shí))之內(nèi)的文件

          為什么-mtime+1 表示文件修改時(shí)間為大于1天的文件,即距離當(dāng)前時(shí)間48小時(shí)之外的文件,而不是24小時(shí)之外的呢?因?yàn)閚值只能是整數(shù),即比1大的最近的整數(shù)是2,所以-mtime+1不是比當(dāng)前時(shí)間大于1天(24小時(shí)),而是比當(dāng)前時(shí)間大于2天(48小時(shí))

          定時(shí)任務(wù)

          創(chuàng)建定時(shí)任務(wù),比如每天凌晨?jī)牲c(diǎn)執(zhí)行備份操作

          
              

          # Linux內(nèi)置的用于定期執(zhí)行程序的命令 -l 查看當(dāng)前所有定時(shí)程序任務(wù)

          crontab -e

           編輯一下內(nèi)容并保存退出:

          
              

          # 定時(shí)執(zhí)行程序,且將日志保存到指定目錄

          * 2 * * * /usr/local/mysqlbackups/mysql_bak.sh &> /usr/local/mysqlbackups/tsmbak/mysql_bak.log

           編輯完之后按下Esc鍵,輸入:冒號(hào),輸入wq 保存退出即可

          還原

          由于備份后的文件是經(jīng)過(guò)壓縮的如下,所以先解壓

          使用gunzip命令如下:

          
              

          gunzip xxxxxx_20220303.sql.gz

          解壓后為.sql后綴文件,沒錯(cuò)查看內(nèi)容其實(shí)就是sql語(yǔ)句,如下

          接下來(lái)就是執(zhí)行sql語(yǔ)句了

          1、進(jìn)入mysql數(shù)據(jù)庫(kù)

          mysql -u root -p 回車,然后輸入密碼

          2、查看當(dāng)前所有數(shù)據(jù)庫(kù),并指定需要還原的數(shù)據(jù)庫(kù)

          show databases;  ------ 查看所有數(shù)據(jù)庫(kù)

          use 'databaseName'; -----指定使用的數(shù)據(jù)庫(kù)

          create database test01; ----- 建立新庫(kù)

          3、使用source調(diào)用sql進(jìn)行

          source /usr/local/mysqlbackups/tsmbak/xxxxxxx_20220303.sql   ----- 等待執(zhí)行完成

          4、查看還原的表或數(shù)據(jù)

          show tables;  ----- 查看當(dāng)前庫(kù)所有的表

          至此,就完成啦

          部分操作截圖如下:

           

          無(wú)論風(fēng)雨,和自己一決勝負(fù)吧

          鏈接:https://www.cnblogs.com/aerfazhe/p/15958700.html

                                                                        (版權(quán)歸原作者所有,侵刪)


          溫馨提示


          掃碼在線咨詢  

          免費(fèi)領(lǐng)取資料

          免費(fèi)7天試學(xué)

          瀏覽 76
          點(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>
                  波多野结衣一区二区三区漫画 | 黄视频大几吧操逼 | 超碰在线久久 | 亲子伦视频一区二区三区 | 91乱伦视频 |