shellスクリプトmysqlデータベースを毎日自動的にバックアップ

3691 ワード

一、mysqlはmysqldumpのツールを提供し、インポートデータベース情報を簡単にエクスポートすることができる.
二、コマンドラインshellテストを使用してmysqldumpを実行し、必要なパラメータを理解し、生成したsqlバックアップファイルが需要に合っているかどうかを確認する./usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
注記:1、実行/usr/bin/mysqldump;2、--optはquick、add-drop-table、add-locks、extended-insert、lock-tablesのいくつかのパラメータの合称で、一般的に使用して、具体的な意味は自分で検索します;3、-uデータベースユーザー名-pデータベースユーザーパスワード-hデータベースアドレスデータベース名>エクスポートファイルパス;4、date +%Fはshellで生成された現在の日付であり、2015-11-05のような形式であるため、エクスポートに成功したときに生成されたファイル名はdb_である.2015-11-05.sql; 5、生成したsqlファイルをダウンロードし、テキストエディタでチェックを開き、テストデータベースをローカルにインポートし、問題があるかどうかを確認する.
三、比較的柔軟なshellスクリプトを整理し、再利用しやすい.
#!/bin/sh

# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher"

# Others vars
BIN_DIR="/usr/bin"            #the mysql bin path
BCK_DIR="/mnt/mysqlBackup"    #the backup file directory
DATE=`date +%F`

# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS 
-h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql

データベースのリストア
mysql-frontで前日の*をインポートします.sqlファイルでデータを復元
ファイルに保存するか/usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBakにアップロードします.sh
四、Shellスクリプトのテスト
1.このスクリプトファイルディレクトリchmod+x sqlAutoBakに入る.sh実行権限を追加しないとPermission denied 2、./sqlAutoBak.sh、Windowsでアップロードしたファイルを作成した場合、エラーが発生する可能性があります/bin/sh^M: bad interpreter: No such file or directory
これは異なるシステムの符号化フォーマットによるものである:windowsシステムで編集された.shファイルに非表示文字がある場合がありますので、Linuxシステムで実行すると上記の異常情報が表示されます.WindowsでNotepad++を使用してUnix形式に変換できます(メニューで「編集」>「アーカイブ形式変換」>「UNIXに変換」を選択します).3、変更後アップロードして実行を続行します./sqlAutoBak.sh、間違っていません.エクスポートしたsqlファイルを確認します.
五、mysqlのバックアップデータを圧縮する
1、導き出されたsqlファイルを見ると、そのファイルサイズが非常に大きいことがわかり、mysqldumpはgzip圧縮ファイルを生成するパラメータ設定を提供した2、sqlAutoBak.shを以下に変更する
#!/bin/sh

# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher"

# Others vars
BIN_DIR="/usr/bin"            #the mysql bin path
BCK_DIR="/mnt/mysqlBackup"    #the backup file directory
DATE=`date +%F`

# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
# $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql

$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME | gzip > $BCK_DIR/db_$DATE.sql.zip

#      
#   *.sql.zip   gunzip               *.sql   
#  mysql-front       *.sql         

3、修正後アップロードを継続する./sqlAutoBak.sh、間違っていません.テキストエディタでエクスポート*を表示する場合.sql.gzファイルは、文字化けしているはずです.4、ローカルにダウンロードして解凍ソフトを使って開けて、解凍して中の本当の*を見ることができます.sqlファイルです.
六、linuxタイミングタスクを設定してこのスクリプトを実行する.
1、タイミングタスクリストの編集crontab -e
2、通常5時のウェブサイトへのアクセスが最も低いため、次の行を挿入します.00 05 * * * /bin/sh /usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBak.sh # 5:00am
3、タスクが正常に作成されたかどうかを確認するcrontab -l
七、翌日に自動生成されたsqlファイルが要求に合致するかどうかを検査する
生成されたファイルと解凍して問題がなければ、この自動タイミングバックアップデータベースのスクリプトは完了します.生成されるファイルが多くなると一定のスペースが消費されるので、定期的に(例えば1ヶ月)ファイルを整理することをお勧めします.
$、補足
1.データベースのユーザーがロックテーブルを割り当てる権限を持っていない場合、バックアップはwhen using LOCK TABLESをエラーで報告します.それはmysqldumpコマンドがデフォルトでエクスポート時にテーブルをロックするため、解決方法は2つあります.1つは、ユーザーにロックテーブルを開く権限です.もう1つは、コマンドにskip-lock-tablesというパラメータを追加することです.すなわち、$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME --skip-lock-tables| gzip > $BCK_DIR/db_$DATE.sql.gz