コンピュータやソフトウェアのあれこれ@道民(&元道民)
MySQL
UbuntuにMySQLを入れる
1月 26th
MovableTypeのテスト環境を作りたいの続きです。
$ sudo aptitude install mysql-serverするだけなんですが、
MySQLインストール時にrootのパスワード聞かれるんですね。
てっきり、インストール後にパスワードの設定を行うものだと思ってました。
で、てっきりハマるもんだと思ったんですけどね、
MySQLは公式サイトに日本語リソースもあってすんなり。
1. mysqlのインストール
$ aptitude install mysql-server $ mysql --version mysql Ver 14.14 Distrib 5.1.54, for debian-linux-gnu (x86_64) using readline 6.2
2. 文字コードの設定
“/etc/mysql/my.cnf”の[client]と[mysqld]に以下を追記
default-character-set = utf8
3. MySQLの再起動
文字コードの設定を有効にするために再起動
$ service mysql restart
4. データベースの追加
rootでmysqlにログイン
mysql> create database (データベース名)
5. ユーザーの追加
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER
-> ON (データベース名).*
-> TO (追加するユーザ名)@localhost
-> IDENTIFIED BY '(パスワード)';
次回、「メールの設定はちょっと・・・」の巻。
おしまい。
MySQLが起動しない
8月 28th
phpを5.3.6から5.3.8にアップデートしようと思って、
phpとmysqlをアップデートしたら、
mysqlだけ、restart出来なくて涙目になったお話をします。
ログ(”/var/log/mysqld.log”)を見ると、Abortingの前に、
[ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'
と、書き込まれていて、”/etc/my.cnf”が怪しいご様子。
お願いgoogle先生!っていう訳で、
結果的に、default-character-setは廃止になったみたいなので、
以下のように修正。
#default-character-set=utf8
character-set-server=utf8
無事起動しました。
ちなみに、MySQLは5.5.15になりました。
追記(8/29)
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
って出てたのを無視してたので、”mysql_upgrade”を実行して、
無事、アップデートを完了しました。
おしまい。
phpとmysqlをアップデートしました
7月 8th
ServersMan@VPSを使ってるのですが、
WordPress3.2を入れるには外部リポジトリからphpとmysqlをアップデートする必要があって、
これまた不慣れなのでおっかなびっくりやったのですが、なんとかなりました。
まずは、「php serversman」とかでググるといろいろ出てくるのですが、
アップデート後、こんなエラーに遭遇しました。
PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/lib/php/modules/imagick.so'
- /usr/lib/php/modules/imagick.so:
undefined symbol: php_set_error_handling in Unknown on line 0
php-pearがアップデートから漏れてたので、
先にこれをアップデートした後、こんな感じで回避しました。
$ pecl uninstall imagick
$ pecl install imagick
おしまい。
[MySQL]InnoDBのネクストキーロックによるデッドロックの例
1月 20th
あまりMySQLのことは自信ないですが。
一見問題なさそうに見える操作でデッドロックしてしまうケースがあったので動画にしてみました。
SELECTしてみて「有ればUPDEATE、無ければINSERT」や、あるいは「有れば何もせず、無ければINSERT」を行ないたい場合に、SELECT FOR UPDATEして無ければINSERTとしてしまうと、動画の最初の例のようにデッドロックしちゃいます。存在しない行に対してSELECT FOR UPDATEするとちょっと広めに行ロックがかかってしまう感じでしょうか。
「有ればUPDATE、無ければINSERT」であれば、INSERT ... ON DUPLICATE KEY UPDATEを使うのが良さそう。「有れば何もせず、無ければINSERT」なら、いきなりINSERTしてみて一意制約違反ではじいてもらうのがいいのかな。
動画の2つめの例は、i = 100が存在するときに、WHERE i = 200 FOR UPDATEすると、100より大きい側はロックされるが100より小さい側はロックされないようだ、という実験。
動画の3つめの例は、存在する行に対してSELECT FOR UPDATEした場合の例です。
あと、存在しない行に対するDELETEやUPDATEでも、ちょっと広めの行ロックが発生するようです。
関連
MTをインストールしてみました
12月 19th
ハッカソンに参加したときに、
MovableTypeをインストールしたのでメモ。
DLしたのはVer. 5.04
そのときは、b-mobileを使って、DLとアップロードしました。
それぞれ5分くらい掛かったけど、
使えなくもないかなぁ、って速度です。
その後は、cpanmをインストールしたけど、活躍せず。
(多分、数日中に使いまくる予定)
インストールは、zipのままアップロードしたものを、
サーバー上でunzipしてリネーム、
そして、フォルダにアクセスすればインストール開始。
特にハマりポイントはない予定でしたが、
MySQLでハマりました。
普段は、WordPressを使っているので、
MySQLのユーザーに与えた権限は、
DELETE, INSERT, SELECT, UPDATEだけでしたが、
INDEX, ALTERを求められたので、
この権限も含めて設定しました。
あと、メールの設定が、まだ終わっていないので、
この辺は残念な感じでしたが、インストールは出来ました。
次に記事を書こうとしたら、ブログの作成を求められたので、
複数のブログを管理できるタイプなのかなーって思いました。
ここもWordPressと違って、焦りました。
そんなこんなで、今日も少し勉強をしました。
おしまい。
