MySQLでrootのパスワードを設定
何回やっても忘れるのでメモ。
SET PASSWORD FOR root@localhost=PASSWORD(‘hoge‘);
ほんっと、覚えられない。
何回やっても忘れるのでメモ。
SET PASSWORD FOR root@localhost=PASSWORD(‘hoge‘);
ほんっと、覚えられない。
結構これに悩む開発者は多いのではなかろうか。
そもそもこういうことに悩むのが間違いの元だと思う。システム開発者たるもの、事前の想定があってそれに対しての開発をするわけで、適当に「将来増加するかもしれないから」なんてことだけで開発してはいけない(とは言っても・・・とも思うけれど)。
MySQLで主キーにauto_incrementを設定すると仮定する。カラムの型がintegerでunsignedの場合最大約42億まで値を確保できる。42億、というと実際には手に届かないが、接したことのある数字である(算数の計算とかの話)。「億」という言葉が問題なのかもしれない。じゃあ「兆」は、「京」はみたいなことをいうと切りがない。なので、まず実際に使用すると思われる量を計算しなくてはならない。
42億というと1日1件の処理で値が1増加すると仮定すれば、約1150万年も使えるわけだ。その頃には人類は絶滅しているんじゃないかと思うので、すでに考えなくていい。
1日100件の処理が行われるとすると、約1万1千年使えるわけだ。人類が絶滅していなかったと仮定してもMySQLは存在しないだろう。じゃ、やっぱり考えなくていい。
1件あたりの処理で値が100増えるとすれば(1日100件の処理で)、101年となるわけだ。さすがに人類はまだ絶滅していなさそうだし、ひょっとしたらMySQLもまだあるかもしれない。でも100年前のシステムの考え方が通用するだろうか。そもそもそれを使う会社が100年先も存在するだろうか(ま、発注者にはそんな事言えないけど)。となれば、これでも考えなくていい。
といった具合に、見積もりを立てれば問題ない。そしてそれを仕様書にまとめて提出する(できれば「こういう仕様でいきます」という事前確認をしておくほうがいい)。
SQLでinsert、update、delete文を発行して、結果として影響を受けた行数を知りたい場合がある。pdoの場合、rowCount()というメソッドで知ることが出来るのだが、SQLiteでは使えないことがわかった。PHPのマニュアル中のコメントを読むと、どうやら3系からNGのようだ。
SQLはプリペアードステートメントを使って実行しているんだが、やっぱり無理なんだろうか。SQLiteはちょっといろいろ癖があるっぽい感じだ。
何回やってもその都度忘れるのでメモ。
mysqldump db_name > dump.sql
mysql db_name < dump.sql
そしてこのエラーも毎回悩む。
ERROR 1005 at line 23: Can’t create table ‘./masters/answers.frm’ (errno: 150)
mysqldumpでは、innoDBで外部制約を使っていたとしても、それを考慮したSQL文とはなっていない(子テーブルの記述が親テーブルより先にくることがある)。結果として上記のようなエラーになる。
これを回避するには、リストアする前のSQLファイルに以下の1行を加えておく。
SET FOREIGN_KEY_CHECKS=0;
覚えられない。若い頃は「調べればわかるものは覚えない」というポリシーだったが、何度か使うと覚えていた。しかし最近はポリシーこそ変わらないけれど、一向に覚えられない。
老いた。
諸般の事情でMySQLのバイナリログをちゃんととっておかないと・・・という場面に遭遇してしまった。本来開発がメインだからセキュリティとか設定とかそういうのはやらないことにしているのだけれど、事情があってやむを得ず・・・。
MySQLはデフォルトではバイナリログを保存する設定にはなっていない。取得するための設定は/etc/my.cnfの[mysqld]セクションで以下の記述をして、MySQLを再起動。
log-bin=/home/binarylog/mysql-bin
ログを見るにはmysqlbinlogコマンドを使えばいい。
SQLだけ吐き出すにはこんな感じ(らしい)。
mysqlbinlog -D -uroot -pxxxxxxx -database=”db_name” /backup/mysql-bin.000001 > /backup/bin.sql
まぁ、使わずにすむものなら使いたくない。