經常要清空資料庫,於是寫了乙個小指令碼,還是學到很多東西.
1.保留資料表結構,只刪除所有表資料
方法1:匯出乙個沒有資料的資料庫,再drop原來的資料庫,create 乙個新的(空的,沒有表結構),再source一下之前匯出的沒有資料的sql
mysqldump -u$ -p$ -h$ $ --no-data >villadb-nodata.sql
mysql -u$ -p$ -h$ $ -e "drop database $"
mysql -u$ -p$ -h$ -e "create database $"
學習點:
1.mysql -e cmd 可以用shell操作mysql,不在mysql提示符下操作,非互動式,適合嵌入shell指令碼
2.shell 單引號和雙引號的區別,單引號屬於強引用,不對引號內任何特殊字元轉義,只當普通字元.雙引號屬於弱引用,會對括起來的特殊字元做處理.如$,>等.上面的例子用到$,要用雙引號,才能保留${}的特殊意義,即傳遞乙個變數,而不是簡單字串.
3.mysqldump --no-data 引數(跟-d 一樣),表示只匯出資料庫表結構,不匯出資料.用-t則表示只匯出資料,不匯出表結構.
4.刪除資料庫有3種方法:
drop database $:會刪除整個資料庫表結構,資料,和
方法2:
除錯時用到的技巧
1.shell指令碼在開頭加上"set -x"表示除錯模式,會把每句命令都列印出來,再列印每句命令的執行結果
2.vim中批量注釋.用vim命令開啟檔案
方法1:塊操作模式
適合連續的行注釋,游標移動到要注釋的第一行,按ctrl+v進入塊模式,按方向鍵向下,直到你要注釋的最後一行,按大寫的i,注意大寫的哦,輸入#,再按2次esc鍵,就看到選中的行首都增加了乙個#.
取消注釋:在塊模式下選中要取消注釋的行,按一下"d",即可
方法2:替換命令
按esc進入命令模式,輸入":set nu",顯示行號;再按一下esc,輸入":1,$ s/^/#/g" 表示從1到最後一行,每個行首都增加# . 其中"1,$" 表示從1到最後一行,可更改為實際的起始行和結束行
取消注釋:在命令列模式,輸入":1,$ s/^#//g".
附:完整指令碼
#!/usr/bin/bash
set -x
hostname=『127.0.0.1『
username=『root『
password=『engine『
database=『villadb『
result()
if [ $? -eq 0 ];then
echo -e "\033[47;32m ----------- $1 succeed! ---------- \033[0m"
else
echo -e "\033[47;31m ----------- $1 failed! ----------- \033[0m"
fiecho -e "\033[47;34m ------------ step 1: dump a no-data sql of villadb ------------- \033[0m"
mysqldump -u$ -p$ -h$ $ --no-data >villadb-nodata.sql
result step1
echo -e "\033[47;34m ------------ step 2: dump important config like vdc,serviceoffering,etc ------------- \033[0m"
mysqldump -u$ -p$ -h$ $ vdctype serviceoffering totaltemplate vdc configuration > config.sql
result step2
echo -e "\033[47;34m ------------ step 3: drop villadb ------------- \033[0m"
mysql -u$ -p$ -h$ $ -e 『drop database villadb『
result step3
echo -e "\033[47;34m ------------ step 4: create a new villadb ------------- \033[0m"
mysql -u$ -p$ -h$ -e 『create database villadb if not exists villadb『
result step4
echo -e "\033[47;34m ------------ step 5: import the backup table-structure ------------- \033[0m"
mysql -u$ -p$ -h$ $ -e 『source /home/clouder/userful-sql/villadb-nodata.sql『
result step5
echo -e "\033[47;34m ------------ step 6: import the backup config ------------- \033[0m"
mysql -u$ -p$ -h$ $ -e 『source /home/clouder/userful-sql/config.sql『
result step6
乙個Mysql自動備份指令碼
寫了乙個mysql備份的指令碼,大家看看,有什麼不妥地方。這是我寫的第乙個shell指令碼,大家幫忙看看,有誰需要的,我可以發給他。可以將這個指令碼放進crontab,每天凌晨執行一次,自動備份 這個指令碼每天最多隻執行一次,而且只保留最近五天的備份在伺服器上。bin bash this is a ...
乙個備份mysql 資料庫的指令碼
獲取當前系統日期,格式為 2009 2 21 date date f 定義mysql 服務的主目錄 db dir usr 定義備份後的路徑 bak dir usr local backup bak path bak dir date 判斷備份檔案存放的路徑是否存在 if d bak path the...
用shell寫乙個mysql資料備份指令碼
思路 其實很簡單 寫乙個shell指令碼通過mysql的mysqldump,將資料匯出成對應的sql檔案 使用linux的crontab定時執行對應指令碼,將sql,檔案儲存到對應的目錄下 可想而知,隨著資料量的增加和備份的頻率都會導致備份伺服器的硬碟資源使用率也會直線攀公升 為了解決這個問題,我們...