― Web Technology and Life ―

MySQL Beginners Talk#1に参加したご報告

2012-06-10
さる2012/05/29にオラクル社でMySQL Beginners Talkが開かれて参加してきたので、今更ながらそのレポートです。

全体的に

概要

主要セッションはMySQLユーザー会の方やオラクルのMySQL担当の方々による発表で、Webサービス提供会社などLTは様々な立場でMySQLを利用している方々による発表となりました。オラクル社はとても快適な環境でとても居心地も良かったです。主催の方のまとめページはこちらです。

感想

全体的に、MySQLに関する入門的な内容になっており、決してデータベースに関する入門ではありませんでした。当然といえば当然なんですが、もう少しスキーマに関してやSQL文に関しての内容もあっても良かったんではないのかなーと思いました(そんなものは残念ながらないということなのかもしれませんが)。

LTは個人的にすぐに使えるネタがいくつかありました。メインセッションは最初以外は、なかなかMySQL内部の濃い話でちょっとついていけずという感じでした。振り返りをしっかりしたいなーと思いました(そしたらすっかりとレポートを書くのが遅くなってしまいました、すみません)。とはいえ、知らないことが多かったので、とてもいい刺激になったかなーというところです。

会の後、Perl Mongerの方々がいて「簡単に挨拶をば」と思ってくっついていたら、なんか有志の飲み会に参加して、「マジな初心者ですみません・・・」と心のなかで思いつつ、リアルROMっていましたが、屈指のPerl Mongerの方々は普通にトークしていて「すげー」と思いました。「がんばろー!」という気持ちを持って帰れるのも、勉強会&懇親会のいいところです!

以下個人的な会のメモとその後の実践内容です。

セッションの個人的なメモ

初心者向けMySQL概説(by tmtmsさん)

今回のセッションのうちもっとも初心者向けの内容だったんではないでしょうか。全体的にとても参考になりました。

インストールについて

  • 5.5.xバージョンを落とそう
  • 公式バイナリから落とそう

my.cnf

いろいろなパスにあるものを読み込んで、後勝ち上書きされる
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf(公式バイナリ)
$MYSQL_HOME/my.cnf
--defaults-extra-fileで指定したもの)
$HOME/.my.cnf - (--default-file)で指定すれば、いろいろなパスにcnfがあることを気にしなくてよい
オススメcnf設定
skip-name-resolve(MySQLの接続が早くなるらしい)
innodb-file-per-table(テーブルごとにInnoDBのデータを蓄積できる、検索が高速に)

ユーザー設定

コンパイルすると匿名ユーザーがいるので注意

localhostと127.0.0.1の違い

  • mysql -uroot -p -hlocalhost(127.0.0.1)みたいなはなし
  • localhostはUNIXソケット /tmp/mysql.sockを利用する
  • 127.0.0.1はTCP/IPを利用する

日本語

charset(show charsetで確認)
utf8mb4(4バイト、5.5から),utf8(3バイト)
collation(show collation)
utf8を使うと、utf8_general_ci(大文字小文字を一緒のものにする)
utf8_bin(何でも別扱い)
utf8_unicode_ci(いろんなものを同じものとして扱ってくれる(大文字小文字全角半角))

utf8だけでもいっぱい

日本オラクルのMySQL研修と認定資格(by yokatsukiさん)

  • MySQLの資格が、2011年7月から提供されるようになった。(5以降について)
  • 講習は一部英語テキスト。
  • オンデマンドのビデオ教材もある(英語)
  • 動画のセリフを検索できる

MySQLインストールのお作法(by meijikさん)

  • 「インストゥール」
  • 上級者のインストゥールについて「configure;make;make install に決まっとるだろう」というかもしれない

MySQL日本語利用徹底入門(by nippondanjiさん)

かなりついていけず、挫折感。。。

LT

ガチBeginnerが1年間でやったこと(Beginner詐欺ナシ)(by studio3104_comさん)

  • コンフィグにmin-examined-row-limitに設定した値以下の行数のSQL文に関しては、スロークエリログにいれないというオプション
  • single-transactionオプションを使うとdumpした瞬間をスナップショットしてくれる

MySQL ガチュアル Casual Talksの紹介(by myfinderさん)

Casualもっともりあがれ。

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

  • InnoDB Plugin
    • Fast Create index
  • 各社の秘伝のたれのmy.cnfの公開が待たれる
  • No MyISAM
  • [InnoDB]mysqldump --single-transaction(便利、ホットバックアップ)
  • ExtraBackup

これすぐ使える!

  • my.cnfオプションのskip-name-resolve
  • 「mysqldump --single-transaction」をすぐに使おう
  • InnoDB Pluginはかなり使えそう。
  • ExtraBackup

いくつか早速、実践&深く調査してみました。それが、以下。

「mysqldump --single-transaction」の実践

mysqldumpを利用したホットバックアップがInnoDBで可能になるという「--single-transaction」を実践してみました。主に、以下の「おいぬま日報」を参考にしました、ありがとうございました。

参考URL

実践したバックアップ文

mysqldump 
    --user=root 
    --password=mypass 
    --all-databases 
    --opt 
    --flush-logs 
    --single-transaction 
    --master-data=2 
| gzip > mysqldump.gz

--master-dataオプションについて

オプションの意味

--master-dataは「 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;」をはくことによって、クラッシュしたときにmysqldumpしたファイルを一発入れてその後mysqldumpした後から更新された内容をリカバリするときに、どのバイナリログから復活させるのかがわかる。

ただし、シンプルに--master-data(あるいは、--master-data=1)と指定した場合は、「CHANGE MASTER TO」(スレーブ サーバがマスタ サーバに接続、また更新する時に利用するパラメータを変更?よくわからん)というだたのバックアップには不要な構文が書かれてしまう。これを--master-data=2と指定することによって、構文が「# CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;」とコメントアウトにすることができるので、InnoDBのホットバックアップの際には、「--master-data=2」を利用するのが通常ということ。わかりづらかったら、「--master-data」を指定した場合と指定しなかった場合、引数に1,2をそれぞれ指定した場合でmysqldumpを実行してみるといい。

とにかくこれで、「CHANGE MASTER TO」を実行しないものの、mysqldumpしたときのバイナリログの位置を知ることができるので、その後のリカバリが早くできるということになる。

必要なmy.cnfへの設定

--master-dataオプションの指定には、my.cnfに

[mysqld]
log-bin=mysql-bin

と指定する必要がある。

「log-bin」というオプションはバイナリログ(実行した更新系のSQL文がすべて入っているログファイル)をいい按配でローテンションさせてはくオプション。ただ、これだけの指定では無限に溜まっていってしまうので、以下の設定の検討が必要だと思います。

  • expire_logs_days=10(10日前?のバイナリログを消していくよ)
  • max_binlog_size(バイナリログの最大サイズ。デフォルトかつ最大は1GB)
  • sync_binllog(バイナリログをN会のステートメントまたはトランザクションごとにフラッシュする設定。1が最も安全かつ最も遅い設定になる)

バイナリログのフラッシュとかよくわからん。よく考えると、トランザクションログってのものあるからなんだか関係がよくわからなくなってきた。

--flush-logsオプションについて

bin-logをローテーションしてくれる。「mysqladmin -uroot flush-logs」と同義。オプションとして同時実行してくれて便利。

「InnoDB Plugin」についての調査

「Fast index creation」という機能が特に気になった。

従来、ALTER TABLEやCREATE INDEXコマンドでキーを追加すると、MySQLは新しい定義のテーブルを作成し、そのテーブルに対してデータのコピーを行い、コピー完了後にテーブルをリネームして元のテーブルと入れ替えるという操作を行っていた。(その間、テーブルはロックされ、参照だけが可能な状態になる。)当然ながら、これには膨大なデータのコピーおよびインデックスの再構築が伴う。ALTER中にエラーが生じた場合には、新しいテーブルを破棄するだけで切り戻しが出来るというメリットがあるものの、効率がよくない処理であると言える。InnoDB Pluginことはじめ。快適ストレージエンジン生活はじまる!

という解説を読むと、alter文を打つ度に、テーブルをコピーすることから起因するハードディスク容量の圧迫がなくなるような。。。

そもそもの基本機能である「主キー以外のインデックスの追加・削除・変更が高速になる」というもの非常に心強い。insert速度が遅くなることを気にして、インデックスを細かく切るということがしづらいことがあるけど、開発時にあれこれ考えずに気軽にインデックスがつけられると開発スピードもわりと早くなる気がする。

ちょっとテスト環境が作れないので、どうやって実践しようかなーと迷っているところですが、そのうち環境をみつけて実践してみたいと思いますー!

最後に

というわけで、いろいろと刺激や知識をもらってとてもいい会でしたー!また、MySQL関連、DB関連の勉強会を楽しみにしていますよー!会を運営されて皆様、セッションを行った皆様、ありがとうございましたー!

MySQL update_at : 2013-08-26T17:17:24
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus