1.匯出整個資料庫(–hex-blob 為有blob資料做的,防止亂碼和匯入失敗用)
mysqldump -u 使用者名稱 -p 資料庫名 > 匯出的檔案名稱
| 代碼如下 |
複製代碼 |
mysqldump -u root -p --default-character-set=gbk --hex-blob i5a6 > i5a6.sql |
2.匯出一個表
mysqldump -u 使用者名稱 -p 資料庫名 表名> 匯出的檔案名稱
| 代碼如下 |
複製代碼 |
mysqldump -u root -p i5a6 users> i5a6.sql |
3.匯出一個資料庫結構
| 代碼如下 |
複製代碼 |
mysqldump -u root -p -d --add-drop-table i5a6 >d:/i5a6.sql |
-d 沒有資料 –add-drop-table 在每個create語句之前增加一個drop table
4.匯入資料庫
常用source 命令
進入mysql資料庫控制台,
如mysql -u root -p
然後使用source命令,後面參數為指令檔(如這裡用到的.sql)
| 代碼如下 |
複製代碼 |
mysql>source d:/i5a6.sql |
上面都是比較散的代碼,下面我們來看shell代碼
我首先要在本文帶給你的是完整指令碼。後面會對該指令碼做說明。我假定你已經知道shell scripting、 mysqldump和crontab。
資料庫匯出代碼
| 代碼如下 |
複製代碼 |
#!/bin/bash #1.資料庫資訊定義 mysql_host="192.168.1.1" mysql_user="root" mysql_passwd="root" #sql備份目錄 root_dir="/backup" back_dir="/backup/databases" data_dir="databases" store_dir="database" if [ ! -d $back_dir ]; then mkdir -p $back_dir fi #備份的資料庫數組 db_arr=$(echo "show databases;" | mysql -u$mysql_user -p$mysql_passwd -h$mysql_host) #不需要備份的單例資料庫 nodeldb="test1" #當前日期 date=$(date -d '+0 days' +%Y%m%d) #zip打包密碼 zippasswd="passwd" zipname="lczh_"$date".zip" #2.進入到備份目錄 cd $back_dir
#3.迴圈備份 for dbname in ${db_arr} do if [ $dbname != $nodeldb ]; then sqlfile=$dbname-$date".sql" mysqldump -u$mysql_user -p$mysql_passwd -h$mysql_host $dbname >$sqlfile fi done
#4.tar打包所有的sql檔案 tar -zcPpf $root_dir/$store_dir/$zipname --directory / $root_dir/$data_dir #打包成功後刪除sql檔案 if [ $? = 0 ]; then rm -r $data_dir fi
|
資料定期清理指令碼
作用
定期清理14天前的備份檔案
| 代碼如下 |
複製代碼 |
#!/bin/bash - #1.參數配置 #mysql檔案備份目錄 backup_dir1="/backup/test1/" backup_dir2="/backup/test2/" backdir_arr=($backup_dir1 $backup_dir2) #到期檔案的時間 keep_time=14 #當前所在星期,crontab在奇數的星期7執行 week=$(date +%W) flag=`expr $week % 2` #2.清理到期檔案,只在奇數星期7執行 if [ $flag -eq 1 ]; then for dir in ${backdir_arr[*]} do if [ -d $dir ]; then #尋找14天之外的檔案資料 clean_arr=`find $dir -type f -mtime +$keep_time -exec ls {} ;` for cleanfile in ${clean_arr} do rm $cleanfile done fi done fi |
crontab配置
| 代碼如下 |
複製代碼 |
0 5 * * 7 執行清理指令碼 |