質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

2回答

3462閲覧

エックスサーバーでエラーログがテラバイト単位で蓄積される原因の解明

ssmxgo

総合スコア178

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2017/01/02 17:39

編集2017/01/03 07:58

掲題の通り、素人がシェルで動くMySQLをアプリケーションに組み込んでしまったため、共有サーバで多大な迷惑をかけてしまいました。色々お叱りがあると思いますが何卒お手柔らかにお願い致します。

まず、細かい経緯はさておき、シンプルにシェルからのMySQLコマンドに問題はあるでしょうか?これがわかれば以下の詳細は目を通す必要がないかもしれません

lang

1 mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} < $(cd $(dirname $0) && pwd)/db.dump

db.dump は以下の出力結果です。データベースの中身はワードプレス本体です。

lang

1 mysqldump --single-transaction -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${EX_DB_NAME} > $(cd $(dirname $0) && pwd)/db.dump

そもそもSQLの素人が、ネットを検索しながら書いたものなので色々と不理解がありますがよろしくお願いします

一番心配なのはエクスポートした際のデータベース名、ホスト名と、インポート先のデータベース名、ホスト名が違います。特にdb.dumpを編集はせず、上記のコードのみ実行しました。

これは phpMyAdmin にてdb.dump を手動でインポートする際に特に中身を編集せずに違うデーターベース名、違うホスト名にそのまま取り込めたことに起因します。

追記です

lang

1 7 if [ ! $1 ]; then 2 8 while [ ! $EX_DB_NAME ] 3 9 do 4 10 echo "元データベース名を入力してください" 5 11 read EX_DB_NAME 6 12 done 7 13 else 8 14 #引数1番めの指定を反映 9 15 EX_DB_NAME=$1 10 16 fi

に対して以下の指摘も受けました

▼下記のエラーが多数出力されておりました

/home/xaccount/mydomain.com/public_html/shell/db_exp.sh: line 11: read: read error: 0: Invalid argument
/home/xaccount/mydomain.com/public_html/shell/db_exp.sh: line 11: read: read error: 0: Invalid argument

追記2

lang

1#!/bin/sh 2#オリジナル=>テスト環境コピー 3DB_USER=xxxx 4DB_PASS=xxxx 5DB_HOST_DEF=mysqlxxxx.xsrv.jp 6DOMAIN=mydomain.com 7 8if [ ! $1 ]; then 9 echo "元データベース名を入力してください" 10 read EX_DB_NAE 11 TEMP=${EX_DB_NAME:=def_db_name} 12else 13 #引数1番めの指定を反映 14 EX_DB_NAME=$1; 15fi 16#echo $EX_DB_NAME 17 18if [ ! $2 ]; then 19 while [ ! $IM_DB_NAME ] 20 do 21 echo "送り先データベース名を入力してください" 22 read IM_DB_NAME 23 done 24else 25 #引数2番めの指定を反映 26 IM_DB_NAME=$2; 27fi 28#echo $IM_DB_NAME 29 30if [ ! $3 ]; then 31 while [ ! $SUBDOMAIN ] 32 do 33 echo "インストール先のサブドメイン(ディレクトリ名)を入力してください" 34 read SUBDOMAIN 35 done 36else 37 #引数3番めの指定を反映 38 SUBDOMAIN=$3; 39fi 40#echo $SUBDOMAIN 41 42if [ ! $4 ]; then 43 echo "データベースホストを入力してください(デフォルト: ${DB_HOST_DEF})" 44 read DB_HOST 45 TEMP=${DB_HOST:=$4} 46 TEMP=${DB_HOST:=${DB_HOST_DEF}} 47else 48 #引数4番めの指定を反映 49 DB_HOST=$4; 50fi 51#echo $DB_HOST 52 53if [ ! $5 ]; then 54 echo "カスタマIDをを入力してください(デフォルト: null)" 55 read HID 56 TEMP=${HID:=$5} 57 TEMP=${HID:=NULL} 58else 59 #引数4番めの指定を反映 60HID=$5; 61fi 62#echo $HID 63 64echo "●設定" 65 66#dev db->export 67echo "DB->export ${EX_DB_NAME}" 68mysqldump --single-transaction -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${EX_DB_NAME} > $(cd $(dirname $0) && pwd)/db.dump 69 70#new db<-import 71echo "DB<-import ${IM_DB_NAME}" 72mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} < $(cd $(dirname $0) && pwd)/db.dump 73 74#set wp-options 75echo "Wordpress setting... ${IM_DB_NAME}" 76mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} -e "UPDATE wp_options SET option_value='http://${SUBDOMAIN}.${DOMAIN}/wp' WHERE option_name='siteurl';" 77mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} -e "UPDATE wp_options SET option_value='http://${SUBDOMAIN}.${DOMAIN}' WHERE option_name='home';" 78 79#wordpress config 80echo "Wordpress setting... " 81cat $(cd $(dirname $0) && pwd)/../wp/wp-config-base.php | sed -e "s/database_name_here/${IM_DB_NAME}/g" | sed -e "s/localhost/${DB_HOST}/g" > /home/xaccount/${DOMAIN} 82/public_html/${SUBDOMAIN}/wp/wp-config.php 83 84 85echo "スクリプト終了"

これらがとんでもない量のエラーログを吐き出す原因になるのでしょうか?今はエックスサーバーのアカウントログインを制限されログを確認することができません

以下、詳細です


経緯

当初は表面上は問題もなく動いていたのですが、エックスサーバーからエラーログが大量に作成されサーバー負荷が高いと指摘される。
『ページリダイレクト問題絡みでシェルが何度も走ってしまった』と思い、リダイレクトの懸念があった場所を回避させる形で、『直りました報告』し、制限解除されてからの再度の過負荷で当然のアカウント制限までかけられてしまいました。

##しがない考察
個人的に結論として、数百GB〜数TBのログ(にわかには信じられなかった)が一般公開していないページのリダイレクト不具合で貯まるとも考え難く、シェルの書き方、MySQLの理解に問題があったのではないかと思い問題解決の手がかりのご教授いただきたく書き込ませていただきました。

追記
シェルに while文が使われてますねぇ。こいつがタイムアウトせず延々と走り続けるということはあるのでしょうか。ここも改めて見直してみます

アプリケーションの仕様

エックスサーバーでの運用
(今になって失敗したなと思っていますが、未公開サイトでしたのでエックスサーバーで直接開発。ローカル環境ではテストしていません → この状況になり今環境を作っている最中)

構成
アプリケーションはワードプレスと、自作の管理ツールで形成されます。
雛形ワードプレスサイトの複製し量産、量産した個々のサイトをワードプレス管理画面からカスタマイズした後、ワードプレスのデータベースをダンプし、サイトの全ファイルと共に圧縮。
別途契約されたエックスサーバー内で解凍しデータベースをインポートしカスタマイズされた量産ワードプレスサイトの設置完了。

問題部分

①~③のタイミングでシェル側から発行したMySQL自体に問題がある?と考え、数GB~数TBまでエラーを吐き出してしまう問題があればご指摘をお願いします

①雛形ワードプレスサイトの量産(カスタマイズ用)

lang

1 #雛形ワードプレス用データベースのエクスポート 2 mysqldump --single-transaction -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${EX_DB_NAME} > $(cd $(dirname $0) && pwd)/db.dump 3 4 #カスタマイズ用量産ワードプレスのデータベースへのインポート(これが怪しい) 5 mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} < $(cd $(dirname $0) && pwd)/db.dump 6 7 #カスタマイズ用量産ワードプレスのデータベースの設定値の変更 8 mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} -e "UPDATE wp_options SET option_value='http://${DOMAIN}/wp' WHERE option_name='siteurl';" 9 mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} -e "UPDATE wp_options SET option_value='http://${DOMAIN}' WHERE option_name='home';"

②量産されたカスタマイズ用ワードプレスサイトのエクスポート

lang

1 #カスタマイズ用量産ワードプレスのデータベースのエクスポート 2 mysqldump --single-transaction -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${EX_DB_NAME} > $(cd $(dirname $0) && pwd)/db.dump

③カスタマイズされた量産ワードプレスを別サーバーに設置

lang

1 #設置用量産ワードプレスのデータベースへのインポート(これが怪しい) 2 mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} < $(cd $(dirname $0) && pwd)/db.dump 3 4 #量産ワードプレス用データベースの設定値の変更 5 mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} -e "UPDATE wp_options SET option_value='http://${DOMAIN}/wp' WHERE option_name='siteurl';" 6 mysql -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${IM_DB_NAME} -e "UPDATE wp_options SET option_value='http://${DOMAIN}' WHERE option_name='home';"

ただし、②、③は①に踏襲するので、①のみをチェックしていただけることで解決できることと思います。

以上、問題の解決の緒がわかる方がいらっしゃいましたらご教授お願いします

補足

後ほど、ローカル環境でログを取ることができましたらログを書き込む予定です。
→エラーというほどの内容は吐かれず正常にインポートできているような…

補足2

エックスサーバーからの指摘のエラー内容は以下

▼下記のエラーが多数出力されておりました

/home/xaccount/mydomain.com/public_html/shell/db_exp.sh: line 11: read: read error: 0: Invalid argument
/home/xaccount/mydomain.com/public_html/shell/db_exp.sh: line 11: read: read error: 0: Invalid argument

その部分のコードは以下です。ここは直接SQLとは関係ないところです

lang

1 7 if [ ! $1 ]; then 2 8 while [ ! $EX_DB_NAME ] 3 9 do 4 10 echo "元データベース名を入力してください" 5 11 read EX_DB_NAME 6 12 done 7 13 else 8 14 #引数1番めの指定を反映 9 15 EX_DB_NAME=$1 10 16 fi

なんか、ここでGBクラスのログが吐かれるとは思ってもいなかったのですが、よく見たらwhile文が使われてますねぇ(汗)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2017/01/02 23:28

ログによればdb_exp.shのwhile文で無限ループしており、ループ内のreadで失敗して、エラーを出力し続けているのではないかと... db_exp.shがどのように実行されているのか書かれていないのでよくわかりません。
ssmxgo

2017/01/03 01:21

ありがとうございます。長文拵えて最後の最後でその可能性を考えました(^_^;) 後でアップしようと思いますが、このようなループがあった場合、ウェブの場合タイムアウトすると思いますがシェルも当然タイムアウトすると考えてぃしたがそうではないのでしょうか?
matobaa

2017/01/03 01:43

db_exp.shをどのように起動していますか? CGIのようにWebからの指示でしょうか。その場合でも、シェルスクリプトは通常はタイムアウトしません。ウェブでタイムアウトするのはブラウザ側の機能であって、起動したサーバ側プロセスは接続が切れても走り続けます。whlieは危険です。
matobaa

2017/01/03 01:44

タイトルが質問の内容を端的に示していないので修正してください。
ssmxgo

2017/01/03 01:48

ありがとうございました。シェルスクリプトです。タイムアウトしないんですね(汗)(汗)かなりこの部分が怪しいですね。タイトル、言われてみればその通り、後ほど修正します(なる早で…(_ _;)スミマセン)
popobot

2017/01/03 10:39 編集

タイムアウトはしませんね。ただ、どうして上記のエラーがでているのかはよくわかりません。db_exp.shの実行方法がわかればわかるかもしれません。まぁ特別な理由がないなら、readで標準入力するのはやめて、引数で渡せばいいだけかもしれませんね。
ssmxgo

2017/01/03 16:38

icchiiさん、ありがとうございます。実行方法は純粋に sh db_exp.sh です。確かに引数で渡されない場合、対話形式に勧めていくという親切設計で作ったシェルが結果的に悪さをしていたかもしれません。ただ問題はエックスサーバー社に対し対策案を提示するにも【ここがこのような理由で問題を起こしていた】が提示できないと説得するのに弱いなと心配です。これから再現テストをローカルで行って見る予定です
guest

回答2

0

ベストアンサー

zico_teratail さんの回答のコメントにしようかとも思いましたが、意見として責任も持ちたいので、回答として立てました。

ローカルに検証環境もなく、WordPress でサイト構築しているなんて、害悪以外何者でも無いと思いますよ。ボットネットのカモです。
ローカルに検証環境がないということは、当然セキュリティ情報も追いかけてないでしょうし、アクセスログの検証もされてないのではないでしょうか?

WordPress のボットネット化は、インターネット環境で非常に迷惑となっている現象の一つです。

自身の作ったシステムに責任を持てるようになるまで、システムの公開はやめていただけないでしょうか。少なくとも切り貼りでシステムを作って公開なんてことはやめて下さい。理解しないで作ったシステムは他者に迷惑をかける可能性が高いです。

投稿2017/01/05 01:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssmxgo

2017/01/05 01:46

コメント真摯に受け止めています。 殆どがワードプレスそのままであり、シェルを利用して設定を簡易にさせるつもりでしたが、結果的にWindowsの改行コードが混ざることでシェルが誤動作していたようです。 今回はエックスサーバーの自動インストール機能に対してちょこちょこっと付けた付加機能…にほぼ近い形のシステムだったので、セキュリティの問題の認識はあまりありませんでした。 また、切り貼りとは書きながらも理解しながら行っていたのでまさか正常に動いていたものが突如このようなことになったことに対して、開発の難しさというか、ローカル開発が絶必であることを痛感いたしました。
退会済みユーザー

退会済みユーザー

2017/01/05 02:20

私個人の認識ですが、WordPress は自由度が高すぎて、素人が容易に扱えるシステムではありません。どちらかと言うと幅広い技術に通じている人が楽をするためのシステムです。 *私はセキュリティ的に負荷が高くなると判断し、利用するのを諦めました。 システムとして、ブログサイトを複数立ち上げる必要があるのであれば、もっと自由度の低いシステムを採用されたほうが良いと思います。検証すべき考慮点も絞られますので。
ssmxgo

2017/01/05 03:07 編集

確かに的を得たご指摘です。開発環境の問題はありますが、結局、今回は正常に動くスクリプトに混じりこんだ改行コードに起因する問題でした。 ですが、極端な話、サーバー会社が設置するワードプレス自動インストール機能でさえ、扱うプラグインによっては問題を起こしかねませんね 別回答でシステムの複製をスパムだと煽ってた方(@zico_teratail)がいましたが、その方の定義ですとワードプレスのインストールそのものがスパムの量産だ、という乱暴な話しに聞こえなくもありませんでしたが、te2ji様のようにご指摘いただければさもありなん、と感じました。 無事エックスサーバーも復旧手続きに入っていただけたようなのでベストアンサーとさせて頂きます 的を得たご指摘、感謝いたします。同時に本当に皆様にはご迷惑おかけいたしました
退会済みユーザー

退会済みユーザー

2017/01/05 02:53

私個人の認識ですが、 > ワードプレスのインストールそのものがスパムの量産だ にそれほど違和感は感じません。WordPress でブログシステムを量産することは、スパム記事量産の温床ですし、デフォルトのままでは結構システム的に緩いようなので、スパマーにも狙われやすいです。 サイトを運用すればわかると思いますが、WordPress のシステムの間隙を狙うアクセスも多数来ます。正直、レンタルサーバで、ボタンでポンのシステムはなくなってしまえば良いと考えています。 今回、この回答は質問の回答になっていないので、できれば改行コードで解決した旨自己回答でベストアンサーとされることをおすすめします。
ssmxgo

2017/01/05 03:17 編集

なるほど、そうですね。 なんかコレだけガッツリ書いたのですが改行コードが…と少し忍びないというか誰得な質問になってしまいました。 ちなみに、ワードプレス自体が…というお話ですが実はCodeigniterに対するセキュリティ問題についても同じ指摘をされたことがあります。(PHPを高度に理解していれば問題なし、とのこと) つまり、システム運用者からすれば世界的利用されているWordPressなり、Codeigniterなりはスパムの量産サイトであり、では誰がそこまで高度でセキュアな運用ができるか、システムを作れるのだろうか?というジレンマが常につきまといますね。 別に誰が悪いという話ではないし、スパマーが問題なのですが、現実としてセキュアなシステムの入手や構築というのは一部の人の特権であり、しかしそうじゃない人が悪人の手先になって横行しているという話ですね すごい早口になってるのかな?w いろいろ考えさせられました。ありがとうございました
zico_teratail

2017/01/05 03:24 編集

>その方の定義ですとワードプレスのインストールそのものがスパムの量産だ そんなこと誰も言ってねぇよ。 勝手に我田引水でこじつけするな。 ワードプレスには一言も触れてないから。 俺が言ったのは、「量産ってことはスパムでしょ?」って言ってんの。わかる? ワードプレスを使おうが使うまいが、量産=ゴミスパムだろうから、迷惑行為はやめろと言っただけ。理解できるか? ワードプレスの利用云々とか話をすりかえるな。 それとteratail運営に一言。 なぜスパマーの肩を持つのか? 一方的に検閲してコメント削除権を乱用すべきではない。
ssmxgo

2017/01/06 15:21 編集

『でしょ?』『量産=ゴミスパムだろうから』という推測でしょ? 推測をもとに炎上煽るの辞めなって。100%スパムだとなぜ断定できるんですか? 推測と事実に相違がある可能性を想定できないんですかね? 人に『理解できるか?』と人に許容する前に、理解する努力をしたら如何ですか? しかも、コメント辞めてくださいと何度も書いてます。 ワードプレスの利用云々とか話をすりかえるな。 あなたの書き込みに対しては個別返信してます。 そこまで考察して発言してるなんて毛頭思ってませんよ。あなたの発言によりこちらがその様な考え方もあると捉えただけ。 で、技術の微塵にも参考にもならないTeratailを荒らすコメント書くなと言ってるんです。わざわざ自己弁護不要です。
zico_teratail

2017/01/06 15:41

めっちゃ早口で自己弁護乙詐欺師
ssmxgo

2017/01/08 07:31 編集

皆からマイナス評価受けて、事務局からコメント消されて乙。 (^_^)/~バイバーイ (もう、引くに引けないんだね?書くほど暇ならマトモなキャッチボールし…イラね)
guest

0

bash の8-9行目のwhile文あたりに不可解な文字コードが入っていたもよう。
デバッグ作業で改行部分をいじっていたら正確な挙動になりました。

無事サーバー復旧出来そうです

ありがとうございました
また、ご迷惑おかけした皆様申し訳ありませんてした

投稿2017/01/05 03:11

編集2017/01/05 03:14
ssmxgo

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問