定期的にMySQLを起動させる背景
需要は少ないかもしれませんが、記事を上げておきます。
cronで定期的にMySQLを起動させた背景としては、Dos攻撃によるものが理由です。
最近海外からアタックを受けてしまい、データベースを落とされることがたまにありまして...
アタック元を調べてIPの制御はしているのですが、また別なIPからアタックされてしまうことがあり、イタチごっこになってしまって。
根本解決では決してないのですが、クライアントのサーバだと予算も限られているので安易にメモリを上げることもできないため、既存の環境のままでデータベースを落とされてしまってもすぐに復旧できるようにこの対応をしました。
対応方法
※私が対応したサーバはCentOS 6.8でした。
まずはMySQLが起動しているのか確認し、起動していなければ起動させるシェルファイルを作成します。
mkdir /var/www/cron cd /var/www/cron vim database_cron.sh
pcnt=`ps -ef | grep mysqld | grep -v grep | wc -l` if [ $pcnt = 0 ]; then /sbin/service mysqld start echo `date` 'start' >> /var/log/database_cronlog fi
ログの書き方などは自由ですが、今回は上記の通り、起動がされた時点で「/var/log/database_cronlog」に現在事項と「start」という文字が表示されるようになっております。
なので、ログファイルを作成しましょう。
touch /var/log/database_cronlog
この時点で一度MySQLを停止させて動作確認をしてみてください。
sh database_cron.sh
MySQLが起動し、ログも書き出されていれば動作はOKです。
cronの設定
最後にcronの設定です。
何分おきに起動させるか、といったところですが、今回は5分おきに設定するようにしています。
まずはcronが起動しているか確認しましょう。
service crond status
ここで実行中となっていなければcronを起動させてください。
service crond start
そしてcronの登録です。
crontab -e
以下の記述をして保存してください。
*/5 * * * * /bin/sh /var/www/cron/database_cron.sh
最後にcronが反映されていることを確認しましょう。
crontab -l
以上です。
まとめ
簡単に設定できますよね。
もちろんこれは根本解決ではないです。
本来であれば攻撃を仕掛けてくるIPアドレスを特定してブロックをしたり、一定時間あたりのアクセスが異常に多い場合にアクセス元をブロックしたりなど、対処法はあります。
この対応は時間がない場合など一時的なものと思ってください。
それにしてもDos攻撃仕掛けてくる奴はほんとにムカつきますね。
こんなに人に迷惑をかけてるんだから重罪にすればいいのに。
- 作者: 西沢夢路
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/09/22
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 山田祥寛,山田奈美
- 出版社/メーカー: 技術評論社
- 発売日: 2018/02/17
- メディア: Kindle版
- この商品を含むブログを見る
詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE)
- 作者: 奥野幹也
- 出版社/メーカー: 翔泳社
- 発売日: 2016/08/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る