Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2861

【WordPress】ロリポップの自動バックアップ機能を自力で実装する方法

$
0
0
ロリポップが用意しているバックアップ機能は何かとお金がかかります。 https://lolipop.jp/service/specs/backup/ そこで、自力でWordPressのバックアップ機能を実装しました。 ※急ぎの方は以下のクローンを作成し、「bkup.sh」の入力箇所だけ修正し、cronの設定を行ってください https://github.com/hgssnk/wp_dump.git 復元に必要なファイル WordPressの復元に最低限必要なもの。 データベース wp-content もう少し削減できるかもしれませんが、 とりあえずこれら2つのバックアップを考えていきます。 シェルスクリプト作成 まずはロリポップのサーバーにSSHでアクセスします。 接続方法:https://lolipop.jp/manual/user/ssh/ ※以下、CUIでの操作を行いますが、WinSCPなどのGUI操作でも実装可能です。 接続後、バックアップファイルを格納するディレクトリ作成 mkdir ~/web/bkup シェルスクリプトを作成します vi ~/web/bkup/bkup.sh 以下の内容をコピペし、「入力箇所」のダブルコーテーション内を編集してください。 ~/web/bkup/bkup.sh #!/bin/bash # 入力箇所 hostname="データベースホスト名" user="ユーザ名" dbname="データベース名" password="データベースのパスワード" bkupdir="バックアップ先のフルパス(末尾にスラッシュ不要)" wpdir="wp-contentのフルパス(末尾にスラッシュ不要)" shdir="シェルスクリプトを格納しているディレクトリのフルパス(末尾にスラッシュ不要)" daletenum="バックアップファイルの上限数" # 基本的に編集不要 date=`date +%Y%m%d%H%M%S` dumpdir="${bkupdir}/$date" dbquery="/usr/bin/mysqldump -h $hostname -u $user -p$password --databases $dbname" # 実行 eval "mkdir $dumpdir" eval "$dbquery > ${dumpdir}/dbdump.sql" eval "cp -a $wpdir ${dumpdir}" eval "cd $bkupdir && zip -rm ${date}.zip ${date}" # 古い順に削除 eval "cd $shdir && python rm.py $daletenum" 実行権限の付与 chmod 744 ~/web/bkup/bkup.sh 次に、バックアップファイルが上限数に達した場合、 古い順に削除するという処理をpythonで実装します。 (ロリポップにはデフォルトでpythonが入っています) ※シェルスクリプトと同じディレクトリに配置してください vi ~/web/bkup/rm.py コピペでOKです。 ~/web/bkup/rm.py import os import sys MAX_CNT=int(sys.argv[1]) from operator import itemgetter filelists = [] for file in os.listdir(): base, ext = os.path.splitext(file) if ext == '.zip': filelists.append([file, os.path.getctime(file)]) filelists.sort(key=itemgetter(1), reverse=True) for i,file in enumerate(filelists): if i > MAX_CNT - 1: print('{}は削除します'.format(file[0])) os.remove(file[0]) 実行権限の付与 chmod 744 ~/web/bkup/rm.py 試しに実行し、バックアップできているか確認します。 zipファイルが作成されているはずです。 また、バックアップファイルの上限数を超えた場合、 古い順に削除されているか確認するのも良いかもです。 sh ~/web/bkup/bkup.sh && ls -la ~/web/bkup/ cron設定 ロリポップサイトにログインします 次に「サーバーの管理・設定」 > 「cron設定」を押下 実行ファイルパスに先ほど作成したシェルのパスを記入(web/より後ろのパスを記入) 実行スケジュールはお好みで。 ※ディスクの容量に注意してください 参考資料 バックアップ機能実装 https://matatabisoft.com/114/ 古い順に削除の実装 https://tonari-it.com/python-file-remove/ 追記 2021-08-07 ・ダンプをzip圧縮する処理を追記。 ・バックアップの古い順に削除する機能を追加。 2021-08-08 ・ディスクの容量に注意してください。 私の場合、一つのzipファイルで113MBほどあります。 これを毎月×12ヶ月分保存するとなると、1.4GBほどになります。 人によってはさらに頻度が高く、個数を多く保存すると思います。 その場合、定期的にバックアップファイルを自身のPCなどにダウンロードし、サーバのバックアップファイルは全削除すると良いと思います。 ファイルの定期転送についても気が向いたら自動化してみたいと思います。

Viewing all articles
Browse latest Browse all 2861

Trending Articles