MySQL Beginners Talk #1に参加してきたので、そのメモ

参加してきました。思い切りそのままメモ転載。

初心者向けMySQLの始め方 - tmtmsさん

  • MySQLオープンソース(GPL)なRDBMS
  • たいていのLinuxには含まれている
  • 今なら5.5系を使いましょう
  • 公式バイナリを使うのがいい
  • 設定ファイル(my.cnf)は読まれる場所は全部読まれて、あと勝ちになるので注意が必要
  • skip-name-resolve, innodb-file-per-tableとかshow-warningsとか
    • skip-name-resolveをしておくと、クライアントが接続してきたときに逆引きしなくなる
  • mysqld_safeは最近は安定しているので使わなくてもいいと思う
  • kill -9 はダメ、絶対!
  • 待受ポートはTCP:3306とUNIX Socket:/tmp/mysql.sock
  • パスワードの設定はプロンプトの画面で set password [for user@host] = password('hogehoge');
  • -pの後ろに空白は要らない
  • (初期状態では)匿名ユーザ(適当な名前のユーザ)はパスワードなしでtest DB(information_schema)にアクセスできる
    • 気持ち悪いので消しておいたほうがいい(基本的には自分自身からしか繋げないけど)
    • root@localhostだけ残して消しても問題ない
  • たいていは grant all on DB名 to user@host; で権限を与えれば良い
    • 細かくもできるがDB単位くらいで
  • 127.0.0.1localhostは違うよ!
  • 日本語
    • 初心者は黙って utf8
      • [mysqld] character-set-server = utf8 / [mysql] default-character-set = utf8
      • アプリなどは、それぞれで指定
  • charset と collation
    • charsetはコードと文字の対応(ざっくりいうと)
      • mysql-5.5からはutf8mb4も使える
    • collationは文字の照合順序
      • utf8_general_ciはデフォルト大文字小文字を区別しない
      • utf8_binは大文字小文字を区別する
      • utf8_unicode_ci はUCAによるcollation。全角半角も区別しない。

ORACLEさん、ハイパー宣伝タイム

  • MySQLの普及率 60.5% (2009年調べ)
  • 資格認定試験 = MySQL 5 Database (Administrator|Developer) など
    • 実際の運用管理の現場で求められる知識とスキルの認定
  • 資格に対応した講習もあるよ
    • TuningやClusterの講習もあるが、テキストが英語です!
      • 秋くらいには日本語でできるかも(確約はできません)
  • トレーニング・オンデマンドというビデオ教材での研修もある
    • テキストはPDF
    • 有効期限は購入より3ヶ月
      • 半額で3ヶ月延長可能
    • iPadでも見られるよ!
      • HTML5 の動画なので
    • MySQLの講習は日本語化されていません!
      • ITの世界は英語必須だから、問題ないよね
      • しゃべっている内容が字幕で出るので、全文検索もできて便利

MySQLインストールお作法 - @meiji さん

  • あまりよく考えずにソースからインストールするのはやめましょう
    • 本に書いてあるからってダメ!絶対!
    • 公式のバイナリがいいよ
    • RPM全部入りのやつもあります
      • その中でどれ入れたらいいの?
      • Cのライブラリ(libmysqlclient.so.xx)が必要なら、MySQL-sharedが必要。shared-compatパッケージには旧バージョンのライブラリが入っている
      • 5.1まではshered-compatとsharedの共存は不可(compatに最新版も含まれているため)
      • libmysqlclient.soを使わないプログラムを書く場合は、MySQL-connectorが必要
    • Windowsはbitを気にすればいいだけ
      • インストール時のcharset周りのpath周りだけ気をつけてね
  • データとバックアップ/バイナリログは別の場所(ディスク)にしておこう

MySQL日本語利用徹底入門 - @nippondanjiさん

MySQL文字コード

  • 照合順序
    • 文字の並び順
    • ソートや比較の処理に影響
    • show collation
  • 文字コードがセッションごと/テーブルごと/カラムごとに異なるかも
    • 柔軟さの現れだが、扱いには十分注意
    • カラムごとに指定可能で、指定しなければテーブルのデフォルト文字コード、テーブルの文字コード指定がなければDBの文字コード、DBの文字コード指定がない場合はcharacter_set_serverが使われる
    • 基本はcharacter_set_serverを指定しておく
  • 照合順序の指定
    • カラムであればcollate utf8_binのように指定
  • 確認方法
    • show create table テーブル; で文字コードを確認すること大事
    • show full fields テーブル; でcollationの確認ができる(collationがわかれば文字コードもわかる)
    • information_schemaを使って確認することもできる
  • 文字コード関連のオプション
    • character_set_server
    • character_set_database
    • character_set_connection
    • character_set_client
    • character_set_results
    • character_set_system
    • character_set_filesystem
  • skip_character_set_client_handshake
    • クライアントが指定した文字コードを無視
      • C APIPHPの時に便利
      • Connector/Jでは効かない
  • default_character_setはserver側の文字コード指定では使えない(MySQL5.5以降)
    • クライアント側では使える

文字コード関係のトラブル

  • 文字化け
  • LOAD DATA IN FILE
    • ファイルの文字コードがcharacter_set_databaseになっていることを期待される
    • テーブルの文字コードと同じ場合には bunary に一時的にSETしてあげる
    • mysqlimportを使う
  • SELECT ... INTO OUTFILE
    • 後で LOAD DATAで読む場合は binaryを指定するといい
    • CHARACTER SET 〇〇 のように指定するといい
  • latin1で格納されている?
    • セッションの文字コードもテーブルの文字コードもlatin1の場合には化けずに格納できてしまう
    • はまりやすい
      • SELECT INTO OUTFILEなんかでbinaryでダンプして作りなおす必要あり
  • 5C問題
    • Shift JISの2バイト目が0x5C (\) の場合に起こる
  • ラウンドトリップ変換
    • ダッシュサインなんかがいい例
    • 検索の時に引っかからなくなる

まとめ

  • 自動変換が起こらないようにする
  • 迷ったらすべてutf8いで統一する
  • showコマンドやinformation_schemaで色々捗ります
  • 鍵本が近日増刷予定!

LTセッション

studio0340_comさん

  • スロークエリどうにかならない?
    • innodb_buffer_poolを増やして対応
      • 本当に改善って言っていいの?
  • インデックス使っていないスロークエリを探せ!
    • min_examined_row_limit
      • 指定行以上のテーブルから読み込んだクエリをスロークエリに記録する
      • これがデフォルト10000行以上 デフォルト値は0なので記録されない。潜在的な性能劣化をさせる危険性を秘めているクエリを見つけるために10000行とかにしておく。ただ、これを超えないと記録されないので、値の設定は吟味が必要。
  • mysqldumpではまった
    • ダンプ中に更新が走ったものは、その間(ロックされている間)は更新されない
  • dump-slave
    • ダンプ中はreplicationが止まる!
    • パッチができて、対応(実際はFlush logsに関するもの)

Beginnerならきっと役立つMaster-Slave環境 - @yut148さん

  • Paasで無料なのもあるよ!
    • ただ使うだけなら自前で環境作らなくてもよいのではないかということ
    • 流れるデータには注意

MySQL Casual Talks - @myfinderさん

  • ガチュアルではなくカジュアルです!
  • ノウハウの共有 ≠ 事業価値の毀損
    • 画像がDBに入っていたっていいじゃない
    • autoincrementでもいいじゃない
  • あなたの疑問は誰かの疑問
  • LTは直前でも申し込みOK
  • #mysql-casual@freenode (IRC) で開催について最初に話されるよ(多分)

1台から500台までのMySQL運用(Beginners編) - @kazeburoさん

  • Livedoorは基本的には開発者がサーバを見てきた
    • サービスごとに差が生まれる
    • いくない
  • 仮想化によるサーバ集約で4桁台あったサーバが400台に
  • 基本的にはMySQL 5.1.x
    • 必ずinnoDB-pluginを使う
      • Fast Index Creation 様さま!
  • my.cnfを共通化
    • セットアップツールの提供
      • よくあるチューニングを施してある
  • my-moder.cnf
    • 標準のはいまいち
    • オレオレmy.cnfに自身がある人いない?
  • No MyISAM
    • 絶対に使わない
    • kill -9 しても壊れない
  • xtrabackup
  • ログ系のテーブル
    • Expire処理を忘れるとひどいことに
      • 必ず消すことを忘れないように!
    • 件数が多くなると、削除するほうが大変です!削除戦略をしっかり立てておきましょう。
  • モニタリング
    • 必須です

私がMySQLを始めた理由 - オラクルのやまさきさん

  • MySQLGPL
    • 発展が多くの人に価値をもたらす

感想など

@tmtmsさんのお話は、初めて触る方がどんなことに注意しながら使っていったらよいかという視点で、実際に動かしてある程度何かをしてみるまでの導入部分をすべて網羅しているんじゃないかなと思いました。自分のように触り始めてある程度たった人でも、基本的な部分を見なおしてみるのにはすごくいい機会になりました。

さすがに@nippondanjiさんの話はBeginnerの枠を超えていたような気がしなくも無いですが、最初に文字コード周りの話を理解しておくことでハマりポイントを減らすことができるので、いいですね。さすがエンジニア目線だけでなくサポート目線も持っている方だなぁと、あっけにとられながらも勉強させていただきました。鍵本は増刷されたらぜひとも購入させていただきたいと思います(まだ買ってないのかなんて言わないで><)。

自分は大規模なサービスでMySQLを使ったことが無いですし、ガチなチューニングなんかもしたことがないので、ペラッペラな知識や経験しかないのですが、こういった基礎的な部分を再確認させてもらえる機会があったのはすこくプラスになりました。ガチュアルと呼ばれる人たちに少しでも近づけるよう、最低限基礎は染み込ませておきたい。

追記

  • 2012.06.11コメントでの指摘を受けて min_examined_row_limit のところを修正