centos - centos7でcrontabを使用してmysqlのスケジュールバックアップを行う。
1. mysql3306_backup.sh ファイルを作成する。
ファイル名とパスはカスタマイズ可能ですが、個人的にはスクリプト、スクリプトログ、バックアップデータをmysqlのデータパス下に置いて、見つけやすくしています。
mysql3306_backup.shの内容です。
#! /bin/bash
# Please change the following configuration information yourself
mysql_user="USER" #MySQL backup user
mysql_password="PASSWORD" #MySQL backup user's password
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8" #MySQL encoding
backup_db_arr=("db1" "db2") #The name of the database to be backed up, multiple separated by spaces such as ("db1" "db2" "db3")
backup_location=/opt/mysql # backup data storage location, please do not end with "/", this can keep the default, the program will automatically create the folder
expire_backup_delete="ON" #Whether to turn on expired backup delete ON is ON OFF is OFF
expire_days=3 #Expire time days The default is three days, this is only valid when expire_backup_delete is on
# No need to change the following from this line
backup_time=`date +%Y%m%d%H%M` #Define the detailed backup time
backup_Ymd=`date +%Y-%m-%d` # Define the year, month and day time in the backup directory
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #Date before 3 days
backup_dir=$backup_location/$backup_Ymd #Full path to the backup folder
welcome_msg="Welcome to use MySQL backup tools!" #Welcome message
# Determine if MYSQL is started, if mysql is not started then backup exits
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $welcome_msg
fi
# Connect to mysql database, if you can't connect then backup stop
mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end
flag=`echo $? `
if [ $flag ! = "0" ]; then
echo "ERROR:Can't connect mysql server! backup stop!"
exit
else
echo "MySQL connect ok! Please wait...... "
# Determine if there is a database defined for backup, if so, start backup, otherwise quit backup
if [ "$backup_db_arr" ! = "" ];then
#dbnames=$(cut -d ',' -f1-5 $backup_database)
#echo "arr is (${backup_db_arr[@]})"
for dbname in ${backup_db_arr[@]}
do
echo "database $dbname backup start... "
`mkdir -p $backup_dir`
`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_ dir/$dbname-$backup_time.sql.gz`
flag=`echo $? `
if [ $flag == "0" ];then
echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
else
echo "database $dbname backup failed!"
fi
done
else
echo "ERROR:No database to backup! backup stop"
exit
fi
# If delete expired backups are enabled, then do the delete operation
if [ "$expire_backup_delete" == "ON" -a "$backup_location" ! = "" ];then
#`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
echo "All database backup success!
exit
Thank you!
2. シェルファイルに実行可能なパーミッションを与える
# Set the owner can read and write, others cannot read and write to execute
chmod 600 /data/mysql3306_backup.sh
#Give "executable" privileges
chmod +x /data/mysql3306_backup.sh
3. crontabを使って毎日午前1時にシェルファイルを実行し、出力ログを/data/mysql3306_backup.logにカスタマイズする。
コマンドとコンフィギュレーションです。
crontabコマンドが見つかりませんでした。crontabがすでにインストールされているかどうかを確認してください。
#Convenient editing of timed tasks
crontab -e
#Configure
00 01 * * * * /data/mysql3306_backup.sh >> /data/mysql3306_backup.log 2>&1
4. 4. 時限タスクの編集を終えたら、忘れずに保存: wqし、crondを再度読み込み、時限タスクが正常に設定されているかどうか確認します。
コマンドです。
# Reload crond again
systemctl reload crond.service
#View tasks
crontab -l
備考
1. mysql3306_backup.log ログに "mysql: command not found" または "mysqldumpl: command not found" と記録されている。
その理由は以下の通りです。
デフォルトでは、/usr/bin以下のコマンドを探すようになっており、mysqlやmysqldumplはこのディレクトリにないため、見つからないと表示されるのです。
そこで、/usr/bin ディレクトリにソフト接続する必要があります。
コマンドを実行します。
ln -s /apps/mysql/bin/mysql /usr/bin
ln -s /apps/mysql/bin/mysqldumpl /usr/bin
apps/mysql がある場所: mysql がインストールされているパス
2. Linuxコマンドのreloadとrestartの違いについて
類似点 どちらも設定ファイルを再読み込みする
相違点
reload (再読み込み), reloadは設定ファイルを再読み込みします、サービスが中断されることはありません。そして、reloadはconfの構文などをテストし、何か問題があれば、最後に正しい設定ファイルでロールバックし、正常に動作するようにします。スムーズな再起動とも呼ばれ、すでに接続されているサービスには影響を与えません。
restart (再起動) (停止してから起動), サービスを再起動します。この再起動は一瞬のサービスの停止を引き起こし、設定ファイルのエラーによってサービスの起動に失敗した場合は、より長い時間のサービスの停止となります。
注意:設定ファイルを修正する前に、必ずバックアップをとってください オンラインサービスの高可用性を確保するために、reloadを使用することをお勧めします。
関連
-
SSHパスワードフリーログイン設定後、stdinがターミナルでないため、疑似ターミナルが割り当てられない。
-
undefinedmakefile:n: *** セパレータがありません。
-
Makefile:9: *** セパレータがありません。
-
ConnectionRefusedErrorです。[Errno 111] 接続が拒否されました。
-
Nvidia グラフィックスカード 初期化に失敗しました NVML Driver/library version mismatch エラー解決法
-
MongoDBインストール+解決エラー。mongod.service の起動に失敗しました:until not found
-
Ubuntu 18.04をインストールしたらどうする! 充実の詳細チュートリアル!
-
ubuntuでグローバルシステムエージェントを設定する
-
Ansibleの通常ユーザーsudoがコマンドを実行します。
-
dpkg: パッケージの処理エラー ***(--install): 依存関係の問題 - 未設定にする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux の ssh 公開鍵の追加
-
解決 ERROR: EnvironmentError のため、パッケージをインストールできませんでした。[Errno 28] デバイスに空き領域がありません。
-
MySQL5.7 のパスワード変更で ERROR 1054 (42S22) が発生しました。fie'内の不明なカラム'password'が見つかりません。
-
変数 "xxx" はイニシャライザを持ちますが、型は不完全です。
-
Python easy_install は "ImportError: pkg_resources という名前のモジュールがありません" というエラーが発生しました。
-
centos 7.2 make: *** `default' が必要とする `build' をターゲットとするルールがありません。停止します。
-
gdbが実行可能なファイル形式でない ファイル形式が認識できない
-
シェルスクリプトに$0, $? , $! , $$, $*, $#, $@ などのシェルスクリプトとlinuxコマンド実行時の戻り値の意味
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
'float' オブジェクトは整数として解釈できません。