「Got a packet bigger than ‘max_allowed_packet’ bytes」って出た

databaseのバックアップ/リストアをしたときに以下のようなエラーがでた。。

$ mysql disney -uhogeuser -phogepass < hogehoge.db
ERROR 1153 (08S01) at line 1393: Got a packet bigger than 'max_allowed_packet' bytes

どうも、パケットの最大サイズを超えているらしい。。。
最大サイズがいくつになっているかは、”show variables”で確認できるみたい。

mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

この値を変えるにはmy.cnfで設定します。

$ sudo vi /etc/my.cnf
[mysqld]
max_allowed_packet=64MB

これで、mysqlを再起動すれば、反映されます。

$ sudo /etc/init.d/mysqld restart

ERROR 1005 (HY000): Can’t create table ‘matome.site’ (errno: 121)

ひとつのテーブルのidを別の二つのテーブルからCONSTRAINTでくくりつけようとすると
このエラーがでる。

INDEX `mtm_category2` (`mtm_category_id` ASC),
CONSTRAINT `mtm_category`
    FOREIGN KEY (`mtm_category_id`)
    REFERENCES `matome`.`mtm_category` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,

ここで指定している”mtm_category”という名前がかぶっていたためだった。
これを参照するテーブルでそれぞれ違う名前にしてあげればOK

“show”という名前のテーブルは作れない

showというテーブルを作ろうとしてましたが、失敗。
showという名前がいけないらしく、テーブル名だけ変えたらうまくいきました。

以下に予約語があり、showも思いっきり入ってました。。。
http://dev.mysql.com/doc/refman/4.1/ja/reserved-words.html

my.cnfの”datadir”で指定していた、mysqlのというディレクトリを 間違って移動してしまった。

mysqlのデータディレクトリを一旦移動すると、戻してもデータベースが
全くない状態になってしまった。

そういう時は、いったんMySQLデーモンを再起動します。

# /etc/init.d/mysqld restart

そうすると再びdatadirで設定されたディレクトリを読みに行き、
データベースが読み込まれます。

「Cannot add or update a child row: a foreign key constraint fails」ってでる。

外部キーを持った表にレコードを挿入しようとしたら、「Cannot add or update a child row: a foreign key constraint fails」
と、でてしまった。

mysql> INSERT INTO parent(product_id,status_id,category_id,id,created_at,updated_at) VALUES('3','2','2','5','2012-04-06 21:42:38','2012-10-17 11:34:35');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`tktrac/parent`, CONSTRAINT `fk_reservation_priority` FOREIGN KEY (`priority_id`) REFERENCES `priority` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

ググってみると、存在しない親の外部キーを挿入しようとすると出るとなっているが、ここでエラーとなっている
“priority_id”には挿入しようとはしていない。
“priority_id”にはNOT NULLはつけていないけど、外部キーは値が必須なのかと思い、
“priority_id”も挿入するように変更したらうまくいった。。

mysql> INSERT INTO parent(product_id,status_id,category_id,id,priority_id,created_at,updated_at) VALUES('3','2','2','5','1', '2012-04
-06 21:42:38','2012-10-17 11:34:35');
Query OK, 1 row affected, 2 warnings (0.01 sec)

しかし、ほかにも外部キーはあり、ほかの外部キーは挿入しなくてもエラーとならない。
よくわからないので、挿入対象のテーブルをもう一度作り直したらエラーがなくなった。
なぞ。

「ERROR 1030 (HY000): Got error 28 from storage engine」

いきなり以下のエラーがでるようになった。

mysql> show fields from parent;
ERROR 1030 (HY000): Got error 28 from storage engine

showコマンドで発生したので、なのでなかなか気づけませんでしたが、
どうやらMySQLサーバの容量がなかったのが原因だったようです。

サーバの容量を空けたらエラーはなくなりました。

「Cannot use ‘Parent’ as class name as it is reserved in」と出た。

Parentというクラスを作ったら、以下のエラーが発生した。

PHP Fatal error:  Cannot use 'Parent' as class name as it is reserved in /home/hogehoge/public_html/hogehoge/src/My/TktracBundle/Entity/Parent.php on line 14

どうやら、”Parent”というキーワードでクラスを作ることはできないようです。

名前を変えたら解決しました。

DateTimeオブジェクトを出力するには。

DateTimeクラスはそのまま出力しようとしても、表示されずに
場合によっては、以下のようなエラーになってしまいます。

「An exception has been thrown during the rendering of a template (“Catchable Fatal Error: Object of class DateTime could not be converted to string in /home/hoge/public_html/links/app/cache/prod/twig/80/e6/d7b4a9e6c74db045c844f544aa95.php line 68″) in MyLinksBundle:Site:index.html.twig at line 20. 」

twigテンプレートで以下のようにするとエラーになります。

  {{ site.updatedAt}}

そこで、以下のようにdate関数にわたしてやりフォーマットをしてい
すれば問題なく表示されます。

  {{ site.updatedAt|date('Y/m/d') }}

PHPでMySQLにアクセスすると「mysql_query(): supplied argument is not a valid MySQL-Link resource in xxx.php on line xxx」と出る

これは、mysqlに接続できていない状態にもかかわらず、
mysql_query()などの関数を実行するとでます。

mysqlへの接続がうまくいっていないので、ユーザ名や
パスワード等が間違っていない確認してみてください。

cronでの実行がうまくいかない

phpなどの実行を自動化しようと”crontab -e”でcrontabに実行指示を
記載したが正常に動作しない。。

そのままコマンドラインで実行したり、webからのアクセスだとうまくいくのにだ。

。。。。

どうやらパスの問題だったもよう。

crontabに実行ファイルを”絶対パス”で記載さいたらうまくいくようになった。
そういうものなのかなぁ。