友人が立てたSNS(OpenPNE)の管理者になって
気づいたら10年越えてた。
最初からDBの使用容量について心配していたんだけど、パッと調べた限り見つからなかったので
まぁ大丈夫だろうと思っていた。
思っていたのは良いんだが、実はちゃんと書いてあった。
スタンダードプランなので1契約1.5GBとのこと。
【レンタルサーバ】データベースの作成・追加・削除 – さくらのサポート情報
昨今の情報量を考えると1.5GBってかなり少ない。
ファイル類は100GB割り当てられているのに。
で、使用量は・・・
5GB越えてる( ;゚;ж;゚;)`;゙:;`;
ダンプファイルの大きさだから実際にはもっと少ない。
・・・が、どう考えても越えてる。
今のプランに引っ越してDBを構築したときから既に。
放っておいて大丈夫なんだ・・・?
良く言えば「おおらか」、悪く言えば「ザル」w
いや、本当は最初からずっと気になっていたんだ。
直視しないようにしていただけで。
ところが、「DBの使用量を超過していたら問答無用で消された」という話を聞き
危険度レベルが一気に最上位の「激ヤバ」に上がった。
面倒だけどなんとかしますか・・・。
まずはバックアップ
まずは、いきなり消されても大丈夫なように以下のバックアップを取る。
- DB
- ディスク上のOpenPNE関係ファイル
後者は緊急ではないけど検証するのに必要なので。
ディスクは前述の通り100GB割り当てられていて、実際の使用量は106MB(0.1%)w
この時点で、"何をどうやって対応するか"はほぼ頭の中に描けていた。
DBのバックアップは利便性を考えてテーブル毎にエクスポートする。
シェルを組んで全テーブルをエクスポート&圧縮していく。
mysqldump -h ※ホスト名※ -u※ユーザ名※ -p※パスワード※ ※DB名※ ※テーブル名※ > ※テーブル名※.sql
gzip ※テーブル名※.sql
こういうので原始的にw
終わったらFTPで回収。
ついでにSNSを構築しているファイル類も回収。
DBデータ、圧縮されている状態で3.45GB(展開したら5.12GB)かぁ・・・w
実データとは関係ない文字も含まれているから厳密には多めになるけど
どう見ても1.5GBに収まっていません。本当にありがとうございました(懐
VM検証環境に構築(1)
諸々検証用するために、VMに必要最低限のインストールをしたLinux(Fedora29)を用意してある。
※SSH、Samba、httpd、PHP、MySQLぐらい。ブラウザ経由で画面が出るところまで。
引っ越しは前に検証してるからね。楽勝でしょ。
ファイルを適当な場所(/var/www/html/sns
を作ってその配下)に展開。
DBはSNSで使っている名称に合わせて新規作成する。
そもそもDBに接続するためのユーザを作っていなかったので作成。
grant all privileges on *.* to ※ユーザ名※@localhost identified by '※パスワード※';
げ、エラーになったぞ!?
調べてみたら、ユーザを作るのにこの方法は使えなくなったそうだ。
なので
create user '※ユーザ名※'@'localhost' IDENTIFIED BY '※パスワード※';
でユーザを作って・・・今度は「パスワードが簡単すぎじゃボケ」とエラーになった。
validate_password_policy
のレベルを一時的に下げても良かったんだけど
面倒だったので、絶対すぐに忘れるような複雑なパスワードにしてユーザ作成。
grant all on *.* to '※ユーザ名※'@'localhost' with grant option;
flush privileges;
←権限の反映。不要かもしれないだけど念のためw
DBは置いた場所でダンプをインポート。これもシェルを作って一気に。
mysql -u※ユーザ名※ -p※パスワード※ ※DB名※ < ※テーブル名※.sql
そういやこのVM、ディスク20GBしか割り当ててないけど大丈夫か?とdf
したら
/
(ルート)の使用量が100%だったw
残り数百KB。ホントにギリギリ入った感じだ。
インポート元のファイルを消しても80%後半。このままだとキツいか?
仕方ないのでストレージを10GB追加して、パーティション切って、
/var/www/html/sns
にマウント。
あー、もー面倒だなぁ・・・(たいした手間じゃないけど
VirtualHostのファイルを新規に追加して/etc/httpd/conf.d
に配置。
systemctl restart httpd
で再起動。
で、適当なドメインをhostsに定義して名前解決。
OpenPNEのconfig.phpを検証用に変更。
- l.7
define('OPENPNE_URL', '※さっきhostsに書いた適当なドメイン※');
- l.14
'username' => '※MySQLのユーザ※',
- l.15
'password' => '※上記MySQLのユーザのパスワード※',
- l.16
'hostspec' => '', ※自分自身なので何も書かない
- l.27
define('MAIL_SERVER_DOMAIN', 'hoge.com'); ※使わないので適当
- l.168
define('OPENPNE_SSL_URL', '※さっきhostsに書いた適当なドメイン※');
これも使わないから適当。
で、ブラウザでアクセスしてログイン画面が
出ねーよオイ('A`)
500エラーか。よりによって。
エラーを画面に出すためにconfig.php
の
define('OPENPNE_DEBUGGING', 0);
を
define('OPENPNE_DEBUGGING', 1);
にする。
Fatal error: Uncaught Error: Call to undefined function mb_language() in /var/www/~~/config.php:436
・・・・?(;・∀・)
あ、mbstringが入ってねーわw
yum install php-mbstring
でインストール。
これで大丈b
超大量のエラー。
マジかオイ('A`)
片っ端から潰していくしかないのか・・・。
ini_set('mbstring.http_input' , 'auto'); ini_set('mbstring.http_output' , 'pass'); ini_set('mbstring.internal_encoding', 'UTF-8');
mbstring.http_input
、mbstring.http_output
、mbstring.internal_encoding
は非推奨になった。
上の3行は消して
ini_set('default_charset', 'UTF-8');
を追加する。
ini_set('mbstring.script_encoding' , 'UTF-8');
も同じように
ini_set('zend.script_encoding' , 'UTF-8');
にする。
Parse error: syntax error, unexpected 'new' (T_NEW) in~
これもPHP7で変更になったもので、オブジェクトを参照渡しができなくなったのが原因。
PHP5では警告だったけど、PHP7ではエラーになる。
$a = &new $ec($code, $mode, $options, $userinfo);
↓
$a = new $ec($code, $mode, $options, $userinfo);
と直せば良い。
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP
これめっちゃいっぱい出てるんだが・・・。
PHP7からクラス名と同じメソッド名をつけてはいけないことになったようだ。
function OpenPNE_KtaiEmoji() ↓ function __construct()
と直せば良い。
が、量が多すぎる。
1個直してそこが通るようになったせいで、もっと沢山のエラーが出て心が折れる。
2時間近く頑張ったけど
もうダメ。限界。
. ∵ ./ ./|
_, ,_゚ ∴\//
(ノ゚Д゚)ノ |/
/ /
 ̄ ̄ ̄ ̄ ̄ ̄
PHP4で設計されているものをPHP7で動かそうというのが間違いだ。
VMはバックアップから戻して仕切り直しだ。
VM検証環境に構築(2)
今入っているPHP7をアンインストールして、PHP5系を入れよう。
取りに行けるリポジトリがあれば良いのだが・・・。
ダメだ・・・どこもエラーになって取得できない(ノ∀`)
やり方が悪い可能性の方が高いけど。
Fedora用じゃないけど、PHP5.2のrpmをダウンロードできるページを見つけたので
- そこから落としてきて
- 入れようとしたら依存関係で怒られて
- また探しに行って
を繰り返すこと1時間。
先に進んでいる感じが全然しないw
そしてついに検索しても引っかからないライブラリが出てきた。
・・・・・・。
. ∵ ./ ./| やってられるかー!
_, ,_゚ ∴\//
(ノ゚Д゚)ノ |/
/ /
 ̄ ̄ ̄ ̄ ̄ ̄
色々なパッケージを入れてワケわからない状態に汚染されたので、
またバックアップから戻す。
この時点で2日経過。