DB関連

wp_list_categories・get_categoriesでデータが取得できない

WordPressであり、Wordpressとは関係ない話。

WordPress管理画面の「カテゴリー」画面で、カテゴリー一覧にまったく表示されない現象になってしまいました。

wp-config.phpでデバッグをtrueにしても、Noticeが並ぶだけで何もエラーは表示されない。

フロントエンドでも、wp_list_categories・get_categoriesが使えない状態に。

これまでの経験でいえば、カテゴリーの並び替え系プラグインが原因で、一度並び替えを行って保存すると直ることが多いのですが、今回はそれでも直らない。

仕方ないので、Wordpress本体の中身を追っていくうち、wp-includes/taxonomy.phpの中にあるfunction get_termsにSQLが書かれていたので、出力して、phpMyAdminで実行したところ、以下のエラーが表示されました。

Got error 28 from storage engine

調べてみたところ、サーバの容量が不足していると起こる現象のようです。

参考元:MySQLで「Got error 28 from storage engine…」と出るときの対処法

Tera Termで「df -h」を実行したところ、確かに100%になってました・・・

クライアントのサーバなので、勝手にファイルを削除するわけにもいかないから、とりあえず削除してよいか問い合わせているところ。

まさかこんなところが原因とは。

プラグインやテーマが原因かと思って、切ったりつけたり編集したり、無駄に時間食った・・・

総合管理者 | 2015年03月15日 | コメント(0) | トラックバック(0) | CMS関連 | DB関連 | サーバー関連

Postgresqlはテーブル名に注意

Postgresqlでテーブルを作った後、PHPにてSQL

SELECT * FROM (テーブル名)

と実行したのですが、存在するテーブルなのに、

ERROR:  relation "(テーブル名)" does not exist

というエラーが出てしまいました。

調べてみると、どうやらテーブル名はダブルクォートでくくらなければならないらしい。

SELECT * FROM "(テーブル名)"

ただし、これはテーブル名に大文字が含まれている場合のみで、小文字のみであればダブルクォートは不要とのこと。

たしかに、テーブル名は大文字で作成してました。

なんならSQLを実行した後、エラーで表示されるテーブル名が小文字になっているから、おかしいなとは思っていたのですが。

Postgresqlの場合は、実行時にテーブル名が小文字になってしまうのかな?

だから、大文字を含む際はダブルクォートが必要なのか。

 

参考サイト

PostgreSQLのテーブル名はダブルクォート有無で別名になった. - それマグで!

nandani | 2014年10月08日 | コメント(0) | トラックバック(0) | DB関連 | PHP関連

さくらインターネットに大容量のDBデータをインポートする

さくらインターネットに標準で用意されているphpMyAdminは、インポートするファイルの容量に限界があります(16MB)。

さてどうしたものか、sqlを実行するPHPプログラムでも作ってみるかと思ったのですが、・・・まてよ?

phpMyAdminをサーバのウェブ領域にアップして、そっちを使ったらいいんじゃね?

ってことで、phpMyAdminをダウンロードし、サーバにアップロードして試したところ普通にうまく行きました。

PHPのアップロードサイズはデフォルトでは数MB程度ですが、コントロールパネルの「PHP言語に関する設定>PHP設定の編集」で

memory_limit = 〇M
post_max_size = 〇M
upload_max_filesize = 〇M

と記述することにより、好きに設定できるので(限界はあると思いますが)インポートファイルの容量は(よほどでない限り)気にすることはありません。

インポートが完了したらアップしたphpMyAdminを削除して完了。

よかったよかった。

Connection error: Too many connections

メモ。

ファーストサーバのライトビズにて、MTをインストールしようとしたところ、テーブルの作成段階で以下のエラーが表示されてしまい、インストールが止まってしまいました。

Connection error: Too many connections

何度やってもダメ。

どうやらDBサーバの調子が悪い時か、コネクションが多すぎる場合に出るようなのですが、契約直後のサーバなのにコネクションが多すぎるということはないはず・・・(共有サーバだから他の利用者がコネクションしまくっているということはあるのか?)

いろいろと調べた結果、「max_connections」を引き上げるといいみたいということが分かり、この値を100に変更してみることにしました。

phpMyAdminにて、以下のSQLを実行。

set global max_connections=100;

その後、インストール作業を再開したところ、何とかインストールが完了。

ちなみに

show status like 'Max_used_connections';

にて、コネクション最大値を調べたところ、設定前が「11」。設定後が「18」になりました。

デフォルトは11ってことなのかな?

 

【追記2013/02/12】

どうやらMT5.2.2自体に問題があるそうです。
MT5.2.3なら大丈夫みたい。

http://www.movabletype.jp/documentation/mt5/release/movable-type-523.html

 

参考サイト

MySQLのチューニング? - satospo

nandani | 2013年02月08日 | コメント(0) | トラックバック(0) | CMS関連 | DB関連

SQLだけでフィールド間のコピーを行う

メモ。

たとえば以下のようなテーブルがあったとして

「entry」テーブル
ID title body save_name
1 タイトル1 内容1
2 タイトル2 内容2
3 タイトル3 内容3

「title」フィールドの値を、「save_name」フィールドにまるまるコピーしたい!という場合は以下のようなSQLを実行しましょう。

UPDATE `entry` SET `save_name` = `title`;

■実行結果

「entry」テーブル
ID title body save_name
1 タイトル1 内容1 タイトル1
2 タイトル2 内容2 タイトル2
3 タイトル3 内容3 タイトル3

 

そのままコピーするのではなく、コピー元の値に文字列を追加して、新しいフィールドに格納したい場合は、以下のようになります。

例)「title」フィールドの値に「hoge_」という文字列を足して、「save_name」フィールドに格納する。

UPDATE `entry` SET `save_name` = concat("hoge_",`title`);

■実行結果

「entry」テーブル
ID title body save_name
1 タイトル1 内容1 hoge_タイトル1
2 タイトル2 内容2 hoge_タイトル2
3 タイトル3 内容3 hoge_タイトル3

 

この文字列の結合方法が分からず

`save_name` ="hoge_"+`title`

とか

`save_name` ="hoge_".`title`

とか訳わからんをしてしまいました^^;

ちゃんと勉強しなきゃね。

 

■参考にさせていただいたサイト

nandani | 2011年09月08日 | コメント(0) | トラックバック(0) | DB関連

Copyright(c) 2010 - 2017 ダリの雑記