タグ「MySQL」が付けられているもの

先日、WordPressで運営しているブログの管理画面(/wp-admin/)にアクセスしようと思ったら、以下のようなエラーが出た。

利用できないデータベーステーブルがあります。データベースの復元が必要かも知れません。」。。。と。

はい???

で、「復元」を押してみると、以下のようなメッセージが。

CakePHPでとあるシステムを組んでいたとき、ファイルアップロード時に以下のようなエラーをCakePHPがはき出しました。

Warning (512) : SQL Error: 1153: Got a packet bigger than 'max_allowed_packet' bytes [CORE/cake/libs/model/datasources/dbo_source.php, line 527]

ん???

max_allowed_packetという数値より、アップロードしたファイルサイズがオーバーしているようである。

ということで、my.cnfに以下のように設定しました。

[MySQL] 格納データの文字列一括置換方法

mysql-logo

空目アワーというサービスを作っているのですが、MySQLにデータとして格納されているつぶやきで、「@」がついたものが多数あります。

で、botも作っていて、そのbotでそのつぶやきの中からランダムでTwitterにPOSTしています。なので、「@」が付いたものに関してはそのままPOSTすると、空目アワーbotとその@が付いた人の両方をフォローしていないと見れないということが発生します。

これはまずいんじゃない?

ということで、「@」を「.@」に変換することにしました。

WordPress(wp)

WordPressは、使っていけば行くほど、データベースにオーバーヘッド等に余計なデータが残ってしまったりして、サイトのパフォーマンスが落ちてしまう場合があります。

そこで、データベースを最適化したいわけですが、phpMyAdminなどを使って最適化するのは結構面倒だし、なにより、phpMyAdminを普段使ってないと、怖くて使えませんよね。

そこでご紹介するプラグインは、WordPressの管理画面から、データベースの最適化を実行できるものです。

ダウンロードは、以下から。

[MySQL] 激重の原因はDNS逆引きでした

MySQL

会社で、あるWEBシステムを外注したのだが、あまりに大量なアクセス数にMySQLサービスが止まってしまい、システムの停止を余儀なくされた、というのを以前書きました

それから、いろいろ調べました。

ボトルネックはどこなのか?

外注した先に、どこか原因は考えられないの?と聞いても、「我が社で構築している部分ではデータの輻輳は発生しておりません」と。。。

で、Webサーバ、バックボーンネットワーク、ルータ、NAT、Windows Server OS、MySQL、などをいろいろな角度から調べていった結果。。。。

その会社が作ったシステムのうち、MySQLに原因がありました。orz

Transaction Generator

先日、会社で外部の業者に作らせたシステムが「Windows Server 2003 + MySQL」というシステムであった。

これでデータベースエンジンはInnoDBで作っているらしいので、当然トランザクションを使う。

まぁ、システムを作る段階で、なぜWindows Serverをチョイス?という疑問があったが、Windowsベースでのアプリケーションしかつけれない会社なので、しょうがないと言えばしょうがない。。。

なお、説明しておくと、このシステムの受注範囲は、CGIスクリプトとデータベースサーバ+クライアント。

うちの会社の主幹システムは強固なものであり、CGIスクリプトはきちんとロードバランサーなどが整備された強靱なシステムで動いているので問題はない。

しかし、そのスクリプトで受けたPOSTデータを流し込むのは、ルーターやNATなどを5つぐらい通った後のネットワークに接続されたWindows ServerのMySQL。

CentOS

CentOSにphpMyAdminの最新版を入れようと思ったら、PHP 5.2以降じゃないとダメだとエラーが出てしまいました。なので、PHPを5.2にアップグレードしたメモです。ちなみに、PHPだけやろうとすると依存性の問題でエラーが出たので、ついでにMySQLも5.1.34にアップデートしました。

参考URL


まずは今PHPがどのような状態かを調べる。
# php -v
PHP 5.1.6 (cli) (built: Apr 7 2009 08:00:04)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

yumではどのようにインストールされているかというと、以下の感じ。

DBDesigner4からMySQLに接続できないときの対処

MySQL

DBDesigner4で、localhostではないサーバのMySQLに接続できなくなってしまったので、その対処方法をメモ。

あるホストに対して、MySQLの純正ツール「MySQL QueryBrowser」などでは接続できるのに、DBDesigner4で接続しようとすると、以下のようなエラー画面が出てしまった。

データベースに接続できない

純正ツールでは接続できると言うことは、MySQLのユーザー情報もあっているし、クライアント側のユーザーネーム・パスワードもあっているということになる。

ではなぜ接続できないのか・・・

グーグル先生に聞いてみた。

[MySQL] MySQLへ外部ホストからの接続設定

MySQL

MySQLのデータベース設定など、phpMyAdminなどが使われることが多いが、MySQL WordbenchやDBDesigner4などのツールを使って、リモートで同期をかけたい場合が多々ある。

その場合、MySQLに外部ホストからの接続を許可する必要がある。

その場合、外部接続用のユーザー設定を以下のように追加する。

[CakePHP] CakePHPは複合キーに対応していない?

cakephp-wall

表題の通りなんだけれども、CakePHPはデータベースの複合キーに対応していない、らしい。(CakePHP 1.2.2.8120 時点)

参考になる記事はこちら。


  • "モデルAがモデルBを1個以上もつ、というのをやっている解説はありますか?" フォーラム - CakePHP Users in Japan

  • "複合キー" フォーラム - CakePHP Users in Japan


私は、データベースの設計はDBDesigner4を利用しているのだが、このソフト、多対多のリレーションを作ると、中間テーブルは勝手に複合キーのテーブルになってしまう(ToT)

もっとわかりやすく説明しよう(^^;)

まず、以下のような2つのテーブルがあるとする。

MySQLの文字化け対策・決定版

MySQLを使用していると、よく文字化けに遭遇する。PHPスクリプトの表示では正しく表示されるのに、phpMyAdminでは文字化けする、とか、その逆でphpMyAdminで正しく表示されるのに、スクリプト側が文字化けしちゃったり。。。とか。

その文字化けを解消する方法の決定版です(^^;)

やり方は簡単。

まず、PHPなどのスクリプトと、MySQLの文字コードを一致させる。

↑まずはこれ必須ね。

で、MySQLの設定ファイルである、/etc/my.cnfに以下を追加する。(文字コードがUTF-8の場合)

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

これだけ(^^;)

CakePHP 1.2でのSQLインジェクション対策

いや~~、はまったはまった。。。なので、メモ。

CakePHPでのセキュリティーとして、SQLインジェクション対策があります。

悪意のあるユーザーの場合、フォーム入力などで不正なコードを入力しデータベースを破壊等をしてしまいかねません。

以下のようなコードが実行されてしまうシステムだと、セキュリティー的にアウトです。

select count(*) as count from "users" as "user" where id=1; delete from users

最後の「delete from users」がデータベースに対するコマンドとなって実行されてしまいます。

CakePHPでも同様に、きちんとSQL文の条件式を記述しないと、不正なコードが実行されてしまいます。

以下のコードだと、上記のコードが実行されてしまいます。

function index($id){
$this->User->find('id' = $id);
}

そこで、SQLインジェクション対策として、以下のように記述します。

MySQLTunerでMySQLをチューニング

MySQLのチューニングツールとして、以前のブログで「mMeasure」というのを紹介したが、あらたに「MySQLTuner」というツールを見つけたので紹介します。


このツールは、シェル上からコマンドラインとして使うツールです。

以下のようにインストールしましょう。

# wget http://mysqltuner.com/mysqltuner.pl
# chmod +x mysqltuner.pl

上記のように実行権をつけたら、実行します。

# ./mysqltuner.pl

すると以下のような結果が帰ってきます。

 Movable Typeの最新版、4.2の正式版がリリースされたと言うことで、早速アップグレードしてみました。

 いちを、公式ページのアップグレードガイド小粋空間さんのページ等を参考にしてアップグレードしてみました。

 アップグレードは問題なく成功しました。

 が、、、、

 いろいろ環境を前バージョン(4.1)から引き継ごうといろいろやっていると、とんでもないことに気がついてしまいました。

 カスタムフィールドの中身がすべて消えている!!

 こりゃ大変だ!!、と思っていろいろググって見たが、出てこない。。。

 上記の小粋空間さんのページのコメント欄にはすでに同じような人が出てきているし。。。。

 これはやばい!、と思って、Movable Typeを元の4.1にダウングレードしました。。。。(ToT)

 

MAMP環境CakePHP1.2のbakeでSQL接続エラー

  • 投稿日:
  • by
  • カテゴリ:

自宅のローカルマシン(Mac)でローカルサーバー環境を作って、CakePHP開発を行おうと思ったのですが、いろいろエラーが出てしまったのでメモ。

Mac OS X にて、MAMPをインストールし、ローカルWEBサーバ+PHP+MySQLの環境を作りました。
そこでCakePHPを開発しようと思い、CakePHP1.2を入れてみたのですが、bakeからMySQLに接続できない。。。

まず、CakePHPを各種設定ファイル(core.php、database.php)を設定し、ページを開いたら、きちんと、

Cake is able to database.

と表示されます。
しかし、

# php cake.php bake

とbakeでモデルを作ろうと思うと、MySQLに接続できないのです。

まずは一つ目のエラー。

Use Database Config: (test/default)
[default] >

Warning: mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /wwwroot/rnd-aff/cake/libs/model/datasources/dbo/dbo_mysql.php on line 118
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /wwwroot/rnd-aff/cake/libs/model/datasources/dbo/dbo_mysql.php on line 123
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /wwwroot/rnd-aff/cake/libs/model/datasources/dbo/dbo_mysql.php on line 131
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /wwwroot/rnd-aff/cake/libs/model/datasources/dbo/dbo_mysql.php on line 153
Error: Your database does not have any tables.


というエラーが出た。

解決方法としては、

MySQLのデータをデータベース毎ちまちまバックアップするのではなく、全体を丸ごと定期的にバックアップしたいと思い、検索していたらすばらしいスクリプトを見つけました。


設定も簡単で、MySQL全体を一気にバックアップしてくれます。

まずは下記のサイトからスクリプトをダウンロードしてきます。


ダウンロードしたスクリプトファイルの中身を編集します。
すぐに使いたいのであれば、修正ポイントは4つだけ。
USERNAME = mysqlのユーザ名
PASSWORD = 上記ユーザのパスワード
DBNAMES = “all” ※存在する全てのDBのバックアップを取りたい場合はallを指定する
BACKUPDIR = “/var/mysql-backups”

「mysql」ではなく「mysql-server」だった

Fedora Linuxの話なんですが、会社でLinuxサーバを立てていて、それにMySQLサーバを立てようと思ったんです。
で、yumでインストールしようと思い、「yum install mysql」とインストールしてみた。

が、起動スクリプトがどこにもない。
通常なら「/etc/rc.d/init.d/」に入るのだが。。。

で、ネットで検索してみたら、なんのことはない。。。

MySQLサーバのインストールは、「mysql」ではなく、「mysql-server」だった。。。

ということで、正しい?インストールは下記のコマンド。

# yum install mysql-server

参考URL