MySQL mysqldump 資料備份
1、mysqldump命令工具說明
引數註解: mysqldump 是採用SQL 級別的備份機制,它將資料表導成 SQL 指令碼檔案,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。現在來講一下 mysqldump 的一些主要引數: --compatible=name 它告訴 mysqldump ,匯出的資料將和哪種資料庫或哪個舊版本的 MySQL 伺服器相相容。值可以為 ansi 、mysql323 、mysql40 、postgresql 、oracle 、mssql 、db2 、maxdb 、no_key_options、no_tables_options 、no_field_options 等,要使用幾個值,用逗號將它們隔開。當然了,它並不保證能完全相容,而是儘量相容。 --complete-insert--triggers 同時匯出觸發器。該選項預設啟用,用 --skip-triggers 禁用它。
2、例子
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
mysql>use 資料庫
然後使用source命令,後面引數為指令碼檔案(如這裡用到的.sql)
mysql>source d:/i5a6.sql
5、Shell指令碼
上面都是比較散的程式碼,下面我們來看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 執行清理指令碼
4、其他
最近在備份還原mysql 的時候發現,檢視還原報錯,無法建立檢視,在網上查了下資料,找到以下資訊:
1 、如果備份的資料庫含有檢視, 還原時需要把my.ini 中的character-set 改為latin1, 才能夠還原檢視。 2 、還原後, 需要把latin1 改為gb2312, 否則儲存過程不能使用. 3 、儲存過程不能隨著資料庫備份,對於儲存過程的還原,還是通過手工複製SQL 語句,在QUERY 裡執行。 感覺有點麻煩,於是又尋找其它方法,通過以下方法備份mysql 資料庫後,再進行還原,就沒有報錯,檢視也還原進去了: #windows 下mysql 備份還原,可不用修改my.ini 來還原檢視( 已驗證) mysqldump -uroot -p123 --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x db_name > f:\db.sql mysql -uroot -p123 -f db_name < f:\db.sql linux: SQL 來備份 MyISAM 表: /usr/local/mysql/bin/mysqldump -uroot -p123 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x db_name > db_name.sql 使用以下 SQL 來備份 Innodb 表: /usr/local/mysql/bin/mysqldump -uroot -p123 --default -character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob --single-transaction db_name > db_name.sql新增時間:
mysqldump -uroot --default-character-set=utf8 --hex-blob -p"kEy31kG_" gameonline | gzip > /data/mysqlback/gameonline`date +%Y-%m-%d_%H%M%S`.sql.gz