Windows で MySQL入門


    担当: @h141gm
    対象者:MySQL に興味、関心のある人
    レベル:初級者向け
自己紹介
   石井と申します。( twitterID: @h141gm )
   いわゆる”SIer”な仕事をしています。
   業務でMySQLがらみの案件は今年まだ2本
   仕事はPostgreSQLとOracleばかり
   いかんMySQL分が不足してきた…

   今回の資料は、slideshareにアップ予定です
   アップできたらhttp://h141.github.com/ にリンクします
   パワポの作り方が下手なので全面的に白いです
プロローグ(前説)
最初に、お詫びとお断り
今回はWindowsとMySQLの話ですが
 「最新のWindows Server 2012を使って
     MySQL Enterprise Editionを本格運用するぜー」

とか

 「libmysqld.dll(←mysql”d”の方)を使って
     MySQLサーバ組み込みWindowsアプリを作るぜー」

とかそういった派手な内容ではありません

  「手元にあるのはWindows XP時代のプアなマシンだけど、
     MySQLのテスト環境だけは欲しいなあ…」

という貧乏なお話です。
前説(2)
 OSS系の勉強会にくるとMBA(Mac Book Air)ばっかりですが
 会社で個人用に配布されるPCって、100%、Windowsですよね

 しかもDellの型落ちのWindowsXPマシンだったりしますよね

 VMwareやOracleVMを入れてLinuxを動かしたくても
 VT-dもVT-xすら付いてないので重くてしょうがなかったりしますよね

 Eclipseが重過ぎるので、自然とnetbeans派になりますよね


 メモリが2GBで、CPUがCerelonでHDDは250GBですよね(断言)

  決して、具体的にどこかの会社ディスってるとか、
  そういう話ではないですよ♪
前説(3)
 今日の目標(テーマ)は、


 「こういう腐ったWindowsマシンが配られた不幸な新人のPCに
 MySQLを入れさせて、MySQLerに洗脳してしまおう」


  です。

 初心者ではない方も、
  「自分が新人教育係ならこう説明するな」
  「あそこ、間違ってるwwwwwww」
 とかそういう目線で、お楽しみください
 愛のあるツッコミ、“随時“募集中です。
テスト環境
 ・Windows XP SP3 (32bit) 日本語版
    (最新のパッチまでアップデート)
 ・MS Security Essentials
 ・MySQL 5.5.28 CommunityServer版


 上記をOracleVM VirtualBox上の仮想環境で構築しました
 リソースは、CPUコア1個、メモリ500MB です
アジェンダ
  WindowsでMySQLを動かす
        パッケージの入手
        ファイルの展開
        ファイル構成
        サーバ起動(テスト起動)
        接続確認
        サーバ停止
        設定変更
        サーバ起動
        複数サーバの同時起動            ここは時間があれば説明する
        MySQL入門後

    できた環境で色々な状況を試す
        1. WARMバックアップとリカバリ
        2. レプリケーション
        3.BLACKHOLEレプリケーション
◆WindowsでMySQLを動かす
     パッケージの入手
     ファイルの展開
     ファイル構成
     サーバ起動(テスト起動)
     接続確認
     サーバ停止
     設定変更
     サーバ起動
     複数サーバの同時起動
     MySQL入門後
パッケージの入手
 MySQL Community Serverのダウンロードページへアクセス
 公式: http://www.mysql.com/downloads/mysql/
 開発: http://dev.mysql.com/downloads/mysql/
・パッケージの選択
開発サイトで、MySQLServer5.5(x86,32bit)のパッケージは選択肢が4つある
・どれかを選んで”download”ボタンをクリックするとユーザー登録画面になるが、
下のほうのリンク ”No thanks, just take me to the downloads!”をクリックする
ことで、登録しないで、ダウンロードすることができる




・ファイルをPCに保存する
・MySQL Installer for Windows
   mysql-installer-community-5.5.28.2.msi 207.0M
   2011年9月に追加され(5.5.15~) 、2012年8月頃に改良された
    Serverの他WorkBenchなども一括でインストールできる統合インストーラ




・ MySQL Server msi (インストーラ)
    mysql-5.5.28-win32.msi                31.1M
    “Server”のGUIインストーラ



 ・ MySQL Server zip (アーカイブ)
     mysql-5.5.28-win32.zip 143.3M
      バイナリ等とデータディレクトリを固めたアーカイブファイル



  ・ソースファイル
     mysql-5.5.28.zip                       28.2M
       ソースファイル。コンパイルが必要
【疑問】    色々なパッケージが有るけど、結局どれが良いの?

【回答】    簡単なテストとかMySQLを触ってみたいという人には、
         “zipアーカイブ” 、超オススメ
【理由】
       ・インストールは、展開してディレクトリ置くだけなので、超簡単
                  データディレクトリが作成済み
                  mysql_install_dbでの初期化不要
       ・レジストリを汚さない
       ・サービスを作らない
       ・起動停止も簡単

       ・複数サーバの起動もできる
       ・アンインストールも、サーバを停止して、ディレクトリを消すだけで簡単

       ・ソースからのコンパイルは多言語処理のソースと日本語Windows
       の間で問題が発生するので避けたい
ファイル展開(1)
                                 (この資料で“$”は、コマンドプロンプトの
・MySQL用ディレクトリとして、C:¥MySQLを作る。    プロンプトとして使用します)

 $ md C:¥ MySQL

  【注意①】 基本的にどこにおいても大丈夫だが、
  後のことを考えて、日本語やスペースは使わない方がよい
  【注意②】5.1以前は、インストール場所が強制されていたので、
  一部の古いアプリでは、 C:¥mysqlにインストールされる前提で動く可能性がある

・ダウンロードしたmysql-5.5.28-win32.zipをダブルクリックして展開する
・mysql-5.5.28-win32ディレクトリをC:¥ MySQLの下にコピーする




インストールはこれだけで完了です!
ファイル展開(2)
・【重要】ファイルを展開したら最初にやるべきこと
 サーバの起動前にデータディレクトリdataを別の場所にコピー保存する
データディレクトリとはC:¥MySQL¥mysql-5.5.28-win32¥data のディレクトリのこと


【理由】 データディレクトリを作成するのに使われる“scripts/mysql_install_db.pl” は、
       perlスクリプトなので、Windowsにperlを導入しないと初期化が面倒。
       なので、あらかじめ、初期化済みのdataディレクトリを保存しておく。


    これでいつでも、データは初期化できます。
    安心してDBをいじり倒しましょう

    ・DBのデータが壊れたかもと思ったら、上記のコピーを用いて
    以下の手順で、最初の状態に復旧できる
      ①サーバを停止(後述)
      ②C:¥MySQL¥mysql-5.5.28-win32¥data ディレクトリを削除
      ③保存しておいたdata ディレクトリを
       C:¥MySQL¥mysql-5.5.28-win32¥の下にコピーする
ファイル構成
展開後のディレクトリ構成はこうなっている
 $ dir C:¥MySQL¥mysql-5.5.28-win32¥
   bin/                  …実行ファイル
   data/                 … (初期化済み)データディレクトリ
   docs/                  …ドキュメント
   include/               …Cのヘッダファイル
   lib/                   …Cのライブラリファイル(dllファイル)
   mysql-test/            …MySQLテストスイート(Perlスクリプト)
   scripts/               …データディレクトリ初期化スクリプト(Perlスクリプト)
   share/                …色々な言語ファイル と 初期化用SQLファイル
   sql-bench/             …ベンチマーク(Perlスクリプト)

  README                   …配布物についての簡単な説明
  COPYING                  …GPL v2 ファイル

  my-small.ini             …設定ファイルサンプル(メモリ64M以下)
  my-medium.ini            …設定ファイルサンプル(メモリ128Mくらい)
  my-large.ini             …設定ファイルサンプル(メモリ512Mくらい)
  my-huge.ini              …設定ファイルサンプル(メモリ1~2Gくらい)
  my-innodb-heavy-4G.ini   …設定ファイルサンプル(メモリ4Gくらい)

このディレクトリはインストールディレクトリと呼ばれる
・実行ファイルの簡単な解説
    重要度に応じて、ミシュランガイド風に★付き (個人的な感想です)
【exeファイル】
  ・bin/ディレクトリ
   mysqld.exe                   … 【★★★】MySQLサーバ
   mysql.exe                    … 【★★★】MySQLクライアントツール
   mysqladmin.exe               … 【★★★】MySQL管理ツール
   mysqldump.exe                … 【★★★】バックアップ用にデータをSQLで出力
   mysqlslap.exe               …【★★】クライアントの負荷エミュレーション
   mysql_upgrade.exe           …【★★】 MySQLのデータをアップグレードするツール
   mysqlbinlog.exe             …【★★】バイナリログの内容を出力する
   mysqlimport.exe         … 【★】テキストファイルからのデータインポート
   perror.exe              …【★】エラーコードの説明を表示
   my_print_defaults.exe   …【★】設定ファイルから指定された[グループ]の設定を抜き出す

   mysqlcheck.exe              …【☆】テーブルの検査、分析、修復(MyISAM用)、最適化
   myisamchk.exe               …【☆】テーブルの検査、分析、修復(MyISAM用) 、最適化

    mysqlshow.exe              … データベース、テーブル、カラムの情報表示
     mysql_tzinfo_to_sql.exe     …タイムゾーンテーブルのロード
     mysql_plugin.exe            …どのMySQLプラグインをロードするか管理するツール
【exeファイル】続き
  ・bin/ディレクトリ続き

     mysqld-debuug.exe       … デバッグメッセージ付きMySQLサーバ

     mysqltest.exe            …MySQLのテストスイート言語
                               (リグレッションテストに使われる)
     mysql_client_test.exe    …クライアントAPIのテストする

     myisam_ftdump.exe      … MyISAMの全文検索の情報表示
     myisampack.exe         … MyISAMテーブルを圧縮、読み取り専用にする
     myisamlog.exe          … MyISAMの動作ログを表示する
                (設定log-isamで出力されるMyISAMのデバッグ用バイナリファイルの解析)



     echo.exe                 …普通のechoコマンド?
     replace.exe              …sedっぽいコマンド?
     resolveip.exe            …nslookupっぽいコマンド?



    mysql_embedded.exe       …多分、組み込み用クライアント?
    mysqltest_embedded.exe   …多分、組み込み用テストスイート?
【Perlスクリプト】
・bin/ディレクトリ
    mysql_secure_installation.pl …【★★】初期データベースをセキュアにする
                 (testスキーマ削除、匿名ユーザアクセス権限削除、rootのパスワード設定など)

     mysqldumpslow.pl          …【★】スロークエリのレポート出力
                                 (設定log-slow-queriesで出力されるログファイル)
     mysqlhotcopy.pl           …【★】MyISAMのホットバックアップ


    mysqld_multi.pl               …複数のMySQLサーバの起動停止
    mysql_convert_table_format.pl …指定されたDBの全テーブルのストレージエンジンを変更
                                  (内部で”ALTER TABLE ENGINE=“を繰り返しているだけ)
    mysql_config.pl                …コンパイルオプションの表示

・mysql-test/ ディレクトリ
     mysql-test-run.pl       …リグレッションテストをする
     mysql-stress-test.pl    …ストレステスト?

・scripts/ディレクトリ
      mysql_install_db.pl   …【★★★】初期データベースを作成する

     mysqld.exeを—bootstrapモードで起動させ、次に示すSQL文を実行させることで、初期データベースを作成する
【SQLファイル】

 ・share/ ディレクトリ

   mysql_system_tables.sql          …【★】システムデータベースのテーブルを作成する
   mysql_system_tables_data.sql     …【★】システムデータベースにデータをセットする

             mysql_system_tables_data.sqlで、
             初期のtestスキーマの作成やrootユーザー匿名ユーザーが作成される

   fill_help_tables.sql             …【☆】システムデータベースのhelp用テーブルに文をセット

     mysql_test_data_timezone.sql    …システムデータベースのタイムゾーンのテーブル
                                      にデータをセット(使用せず?)




           (include/ や mysql-test/ にあるSQLファイルやexeファイルは省略しています)
サーバ起動 (テスト起動)
①コマンドプロンプト(cmd.exe)を起動させる
②サーバファイルmysqldを起動させる
$ C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysqld.exe --console

    初回実行時は、ファイアウォールのダイアログが出るので、
     “ブロックを解除する”ボタンをクリックする




  ・ 環境変数PATHにmysqldへのパスは追加されていないのでmysqld.exeはフルパスで指定する。

 ・この時点で設定ファイルは存在しないがMySQLサーバはデフォルトの設定だけで起動可能
  (オプションがいらなければmysqld.exeをダブルクリックするだけでも起動可能)
・オプション--consoleが、重要
エラーログへの出力をコンソール画面に表示し、Ctrl+Cでサーバを停止できるようになる
 $ C:¥ MySQL¥ mysql-5.5.28-win32¥bin¥mysqld.exe --console
 121017 0:07:14 [Note] Plugin 'FEDERATED' is disabled.
 121017 0:07:14 InnoDB: The InnoDB memory heap is disabled
 121017 0:07:14 InnoDB: Mutexes and rw_locks use Windows interlocked functions
 121017 0:07:14 InnoDB: Compressed tables use zlib 1.2.3
 121017 0:07:14 InnoDB: Initializing buffer pool, size = 128.0M
 121017 0:07:14 InnoDB: Completed initialization of buffer pool
 121017 0:07:14 InnoDB: highest supported file format is Barracuda.
 121017 0:07:14 InnoDB: Waiting for the background threads to start              ここ重要
 121017 0:07:15 InnoDB: 1.1.8 started; log sequence number 1595675
 121017 0:07:15 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
 121017 0:07:15 [Note] - '0.0.0.0' resolves to '0.0.0.0';
 121017 0:07:15 [Note] Server socket created on IP: '0.0.0.0'.
 121017 0:07:15 [Note] Event Scheduler: Loaded 0 events
 121017 0:07:15 [Note] C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysqld.exe: ready for connections.


コマンドプロンプト上で--consoleオプションを付けてmysqld.exeを実行させると、
上記のような起動ログを出して待ち状態になる。
このウインドウを[×]で閉じてはいけない
画面操作の邪魔な時は、ウインドウを最小化しておくとよい。
接続確認(1)
①接続確認のために、もう一つコマンドプロンプトを起動させる
    (コマンドプロンプトの“プロパティ”から”画面の色”で”画面の背景”を変えると
     サーバとクライアントの区別が付きやすいので便利)
②対話型のクライアントプログラム(mysql.exe)を起動する
 $ C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysql.exe -uroot
 Welcome to the MySQL monitor. Commands end with ; or ¥g.
 Your MySQL connection id is 1
 Server version: 5.5.28 MySQL Community Server (GPL)


 Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective owners.
 Type 'help;' or '¥h' for help. Type '¥c' to clear the current input statement.


 mysql>
接続確認(2)
 $ C:¥ MySQL¥ mysql-5.5.28-win32¥bin¥mysql.exe –uroot test
 ・ クライアントのmysql.exeもフルパスで指定する。
 ・ -uオプションは、接続するユーザーの指定
      ここでは、初期化時に自動的に作成される管理用のrootユーザーで接続している
      オプションとそのパラメータの間は離さないで書くほうがよい
        ○ -uroot    △ -u root (参考:○ -ppass ×-p pass )

 ・オプション-Pでポート番号を指定していない場合、
   デフォルトのポート番号として3306が使用される

・(余談)Windowsは、UNIXと接続がちょっと違う
  いわゆる”UNIXドメインソケット”を利用したプロセス間通信はできない
           つまり設定ファイルでのsocketの指定は意味がない

   代わりにWindowsにしかない接続として、以下の2つがある
            ・”名前付きパイプ” …設定項目enable_named_pipe
            ・”共有メモリ” … 設定項目 shared-memory, shared-memory-base-name

   (ただしデフォルトではどちらも無効になっているため
   必ずTCP/IPで接続される)
接続確認(3)
 (余談続き)そのほかのWindows版とUNIX版の違い
 ・MySQLスキーマ名、テーブル名はファイルシステムに依存するため
   Windows(NTFS)では大文字小文字の区別はしない
  (ただし、オプションやパスワードはどのOSでも、大文字小文字を区別する)
  (パスワードの大文字小文字を区別しないOracle(11g以前)とはこの点が異なる)
     ・Windowsでも、lower_case_table_names=2と設定すると、大文字小文字
     を保持した名前で ディレクトリやファイルを作成するが、アクセス時の名前の
     チェックでは 大文字小文字を区別しない。 (WindowsでC:¥HOGEディレクト
     リが存在する状態で、C:¥hogeディレクトリを作ろうとしても "指定されたファイ
     ル名が既に存在します"エラーになるのと同じ現象)
      ・UNIXのデフォルトと同じ値のlower_case_table_names=0と設定しても大
      文字小文字が区別されるが、 大文字小文字を変えたテーブル名でMyISAM
      のテーブルにアクセスした場合、 インデックスデータが破壊される可能性が
      あるので、この設定をするのは止めた方が良い

      ・設定項目名は、”lower_case_table_names”と「テーブル」となっているが、
      スキーマ名へも影響を与える

 ・ファイルパスの区切り文字が「¥」なので、エスケープ文字と重複する
 そのため、ファイルパスは「¥¥」または「/」を使用する必要がある
接続確認(4)
③サーバとの接続を切断

 mysql> ¥q

または
 mysql> quit

 または
 mysql> exit

で切断する。
どれを使っても結果は同じ。
 (Ctrl+Cでmysql.exeを終了させることでも切断可能)


 クライアントで切断をしても、サーバの動作へは影響ありません
サーバ停止(1)
   mysqld.exeが起動しているコマンドプロンプト上で、
   Ctrl+Cを押すと、MySQLサーバが停止する
      (mysqld.exe起動時に--consoleオプションを有効にしたため)


【注意】 コマンドプロンプトの[×]ボタンをクリックしてもサーバは停止しない
     mysld.exeプロセスは残ったままになる
       このような場合や、--consoleオプションを付けずにmysqld.exeを起動させた場合
       タスクマネージャの”プロセス”からmysqld.exeのプロセスを停止させないほうが良い。

      下記の【正式なシャットダウン方法】に従ってサーバを停止させる

【正式なシャットダウン方法】
  ①別のコマンドプロンプトを起動させます
  ②mysqladmin.exeで、シャットダウンコマンドを実行します
   $ C:¥ MySQL¥ mysql-5.5.28-win32¥bin¥mysqladmin.exe -uroot shutdown

    -u ... サーバへ接続するユーザの指定
    サーバの停止には、root権限が必要
サーバ停止(2)
MySQLのmysqladmin.exeコマンドでのshutdownには、
OracleやPostgreSQLのようなshutdownモードの指定はない
   参考:他RDBMSのshutdownモード
   Oracle:     NORMAL / TRANSACTIONAL / IMMEDIATE / ABORT
   PostgreSQL: smart / (transactionalは無し) / fast / immediate

   ちなみに、PostgreSQLの “pg_ctl”コマンドでの“shutdown”もモードを省略できるが、
   これはデフォルトの”-m s” (smartモード)が選択されるのと同じ
MySQLのshutdownは、以下のような流れでサーバ停止する
  ・1.シャットダウンプロセスの開始
           (mysqladminを使用してshutodownを指示する方法以外に、
            UNIXの場合はSIGTERM割り込み(要するにkillコマンド)で、
            Windowsのサービスで起動させた場合はサーバマネージャで、
           シャットダウンプロセスを開始できる)
   ・2.(必要なら)シャットダウンスレッドの作成
   ・3.新規接続の拒否
   ・4.現行の動作中のスレッドを順次停止していく
   ・5.ストレージエンジンのシャットダウン
              (詳細後述)
   ・6.サーバの停止
サーバ停止(3)
 mysqladmin shutdownにモードの指定は無いのだが、

「・5ストレージエンジンのシャットダウン」の中の「innodbのシャットダウン」は、
シャットダウンのモードを選択できる

innodbのシャットダウンは、 innodb_ fast_shutdownの設定で変化する
  0...(安全、低速)ログの内容を完全にテーブルファイルへフラッシュする。
  1...(デフォルト)終了前にチェックポイント処理を行う(fast shutdown)
  2...(危険、高速)ログの内容をファイルへ反映するだけ、再起動後にはクラッシュリカバリが行われる


 innodb_ fast_shutdownは、Globalな動的システム変数なため、
 mysql.exeで接続して変更することができるので、
 動的にシャットダウンのモードを変更できる

 innodb_ fast_shutdownに1(デフォルト)が設定されている場合の挙動は、
 だいたい、
 Oracle”SHUTDOWN IMMEDIATE”や
 PostgreSQL”shutdown fast”と同じである
設定の変更(1)
Windowsで設定ファイル(オプションファイル)名は、
”my.ini”が使われることが多い

 (UNIX系で使用されるmy.cnfは、Windowsで.cnfが短縮ダイヤル用の拡張子なので
 エクスプローラのフォルダオプションを変更しないと使用できないため)

設定ファイルは以下の場所に設置できる

  ①C:¥WINDOWS¥my.iniまたはmy.cnf
   (環境変数%WINDIR%の直下)
  ②C:¥my.ini または C:¥my.cnf
  ③(ベースディレクトリ)¥my.iniまたはmy.cnf
  ④--defaults-extra-file=(パス)で指定されたファイル


 設定項目ごとに、後から読んだファイルの値で上書きされる

  ただし、mysqld.exeのコマンドラインで--defaults-file=(パス)で
  設定ファイルを指定すると、
  サーバは上記の標準で読み込まれる設定ファイルをすべて無視し、
  指定された設定ファイルからのみ、オプションを読み取る
設定変更(2)
・設定変更の反映
  ①MySQLサーバを停止
  ②設定ファイルを書き換えて保存する
  ③MySQLサーバの起動
  【重要】
  前にインストーラで入れた残骸のC:¥WINDOWS¥my.ini やC:¥my.iniが残ったままだと、
  ” (ベースディレクトリ)¥my.ini”で設定して無い設定項目が設定される

  【重要】
  設定ファイルmy.ini は、”ファイルを保存”しないと、反映されない。


・設定された状態の確認
   mysql.exeクライアントでMySQLサーバに接続し、
   サーバ変数を表示させて、状況を確認する
  $ C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysql.exe -uroot
  MySQL> show variables;
設定変更(3)
 推奨設定

  C:¥MySQL¥mysql-5.5.28-win32¥my.ini
  [mysqld]
  console = 1

  character_set_server = utf8
  collation_server = utf8_general_ci

  transaction_isolation = READ-COMMITTED
  innodb_file_per_table
  innodb_buffer_pool_size = 256M
  innodb_log_buffer_size = 8M
  # innodb_log_file_size = 64M

  [mysql]
  default_character_set = cp932


  注意:これは最低限の設定です
  “transaction_isolation = READ-COMMITTED“は、
  オラクルデータベース出身者がネクストキーロックやギャップキーロックを嫌うので、緩くする設定

  クライアント側のcp932は、Windows XPの標準の文字セットいわゆるShiftJISです
設定変更(4)
MySQLパッケージに付属しているmy-*.iniファイルは古く、時代にあっていない

最適な設定ファイルを生成するための情報を示す
ただし公開されている情報は、圧倒的にlinux向けが多い点に注意

・公開されているmy.cnf
    ①@nippondanjiさんのmysqlのwiki上に公開されているもの

   http://mysqlpracticewiki.com/index.php/My.cnf%E3%82%B5%E3%83%B3%E
   3%83%97%E3%83%AB

   wikiのトップ http://mysqlpracticewiki.com/
   から、“My.cnfサンプル”で検索してもたどり着ける

   ②10月5日に、NHN Japan(旧ライブドア)の長野( @kazeburo )さんが、
   githubにmy.cnfを公開しています
   http://blog.nomadscafe.jp/2012/10/mysql-mycnf-github.html


   ③「WordPress 高速化&スマート運用必携ガイド」を書いた岡本渉さんが、
   Amazon EC2のmicroインスタンス上でのWordpressに特化した
   チューニング済みのAMIを公開しています
   http://dogmap.jp/2012/07/17/wordpress-ami-amimoto/
   (ただし、perconaサーバ用だったり、特殊な環境専用だったりします)
設定変更(5)
・web上で動的にmy.cnfを生成するサイト
  ①“Percona Online Tools”の“Optimize your MySQL Server”

    ウイザード形式で、対話的にサーバの情報を指定していくことで
    my.cnfが生成される

       https://tools.percona.com/
       (ユーザー登録が必要です)
・MySQLサーバ上で動的にmy.cnfを生成する
  ①“mysqltuner.pl”
      https://github.com/rackerhacker/MySQLTuner-perl

    サーバ内のメモリなどを検出して最適値をアドバイスするツール
     perlスクリプトです。
     搭載メモリ量の自動読み取り機能などが、Windowsに対応していません
     (また、設定内容が少し古いかも知れません)

 ・最終的には、MySQLアーキテクチャを勉強して、ベンチを取りながら
 設定を詰める必要がある
設定変更(6)
(余談) MySQLの設定ファイルで、はまりやすいポイントを列挙します。

 ①設定項目の単語の区切りの-(ハイフン)と_(アンダースコア)は、等価
   log-bin もlog_binも同じことです
  ②設定項目は単一の名称だと区別ができるところまで書けば省略できる

   read-onlyは、read-oでも通ってしまう

   (ただし、linuxのrpmでインストールする場合に、標準で添付されるSystemV
   起動スクリプト(/etc/init.d/mysql)中には、sedを使用するため、上記の表記の揺れを
   許さないところが存在するので注意)


  ③設定項目名は、大文字小文字を区別する
サーバ起動
①サーバファイルmysqld.exeをダブルクリックして起動させる


  ・インストールディレクトリにmy.iniファイルを作成すれば、
  mysqld.exeが起動時に自動的に読み込んで
  コマンドオプションは不要となる



  ・設定ファイル(my.ini)中でconsoleオプションを有効にすれば、
  エラーログを標準出力に出力しながらの動作をする




    サーバの起動も停止も簡単!
複数サーバの同時起動
①サーバを停止する
②インストールディレクトリをコピーして複製を作る
   オリジナルがC:¥MySQL¥mysql-5.5.28-win32にあるとして、
     C:¥MySQL¥mysql_1
     C:¥MySQL¥mysql_2
   の2つをxcopyコマンドの/sオプションで再帰的な複製する例を示す

   $ xcopy /s C:¥MySQL¥mysql-5.5.28-win32 C:¥MySQL¥mysql_1
   $ xcopy /s C:¥MySQL¥mysql-5.5.28-win32 C:¥MySQL¥mysql_2
   (エクスプローラなどのマウス操作でコピーしてもOKです)
③設定ファイルを書き換える (各々のインストールディレクトリのmy.iniを編集)
    以下の設定が重複しないようにする
       ・portの設定
       ・(有れば) server-idの設定
       ・絶対パスで指定した設定
     (相対パスは各々のbasedir(=インストールディレクトリ)からのパスとなる)
④複製先のbin/mysld.exeをダブルクリックして、サーバを起動する
    複製後も初回実行時は、ファイアウォールのダイアログが出るので、
     “ブロックを解除する”ボタンをクリックする

⑤続いて、もう一つの複製先のbin/mysqld.exeもダブルクリックで、起動させる
MySQL入門後

   オレは ようやく のぼりはじめた ばかりだからな
   この はてしなく遠い MySQL坂をよ
MySQL入門後(1)
ここまでで、自分の好きに触れるMySQL環境ができました。
ここからは、実機で触りながら勉強していきましょう。
というわけで、MySQLの情報を得る場所を紹介します
①日本MySQLユーザー会のメーリングリスト
http://www.mysql.gr.jp/ml.html


②MySQL公式サイト
http://www-jp.mysql.com/



③OTNセミナー オンデマンドコンテンツ
 Oracleが公開しているセミナーのビデオです。MySQLもあります
http://www.oracle.com/technetwork/jp/ondemand/database/mysql/

                   (これの「MySQL入門概要編」を見れば、今回の資料要らなかったような…)



 ④MySQLリファランスマニュアル
 http://dev.mysql.com/doc/
                                         (ただし、日本語訳はMySQL5.1まで)
MySQL入門後(2)

 ⑤MySQLバグデータベース
 未知のトラブルかなと思ったら、ここでサーチしてみましょう
  (英語だが、バグ報告だとなんとなく意味が分かる)
 http://bugs.mysql.com/

            最近は、workbenchのバグ報告ばかりだ…




 ⑥ブログ
 MySQLのブログの集積所
 ・Planet MySQL http://jp.planet.mysql.com/



     特に、更新が多いブログはReaderで、RSSを取得するとよい
     ・SH2の日記         http://d.hatena.ne.jp/sh2/
     ・漢(オトコ)のコンピュータ道 http://nippondanji.blogspot.jp/
     ・(ひ)メモ          http://d.hatena.ne.jp/hirose31/
MySQL入門後(3)
⑦Twiter
最近は、MySQLの最新の情報はTwiterで流れていることが多いです。
自分でTweetしなくとも、必須です。
 フォローするアカウントは、以下のページを参考に
“漢のコンピュータ道:MySQLerのTwitterアカウントまとめ”
http://nippondanji.blogspot.jp/2009/10/mysqlertwitter.html

   ハッシュタグ #mysql_jp をつけてtweetとすると、いろんな人に拾われる確率アップです


⑧ソースを読む
MySQLはFLOSSなので、分からないことがあった時の究極の解決法はこれです。
入手先 http://dev.mysql.com/downloads/mysql/
最新版 https://launchpad.net/mysql-server
    コードホスティングはLaunchPad(2008年にBitKeeperから移転)
    バージョン管理はbazzar
                                      githubとgitに移行してくれると楽だなあ

 ソースを読むのは勉強になる。でも、一人で読むのはしんどい

 ⑨勉強会に参加しましょう
 ・IT勉強会カレンダー
  http://bit.ly/itcal
MySQL入門後(おまけ)
  ①“MySQL Cheat Sheet”を印刷して座右に置きましょう
  “漢(オトコ)のコンピュータ道” @nippondanjiさんのMySQLチートシート(カンペ)
  http://www.mysqlpracticewiki.com/files/cheat-sheet.pdf


  ②“MySQL[plus] awards 2011”を見ていろんなアプリを試そう
  MySQLは世界中で人気があるDBなので、有償、無償の色々なアプリがあります

  別に権威のある賞ではなくブログ書いた人の個人的な選考でしょうが、
  聞いたことないアプリもあったりして面白いので、手当たり次第に試してみると、
  新しい発見があるかもしれません
  http://www.mysqlplus.net/2012/01/05/vote-mysqlplus-community-awards-2011/
        樋口さんのHandolerSocketとか、
        松信さんのMHAとか、
        木下さんが過去に作られたXtraBackupとか、
        日本の開発者が作ったツールも結構入っています
◆ ご愛読ありがとうございました

  男坂の「未完」の絵
  http://riasu.up.d.seesaa.net/riasu/image/otokosaka47362.gif
  http://riasu.seesaa.net/article/23979138.html

WindowsでMySQL入門

  • 1.
    Windows で MySQL入門 担当: @h141gm 対象者:MySQL に興味、関心のある人 レベル:初級者向け
  • 2.
    自己紹介  石井と申します。( twitterID: @h141gm )  いわゆる”SIer”な仕事をしています。  業務でMySQLがらみの案件は今年まだ2本  仕事はPostgreSQLとOracleばかり  いかんMySQL分が不足してきた…  今回の資料は、slideshareにアップ予定です  アップできたらhttp://h141.github.com/ にリンクします  パワポの作り方が下手なので全面的に白いです
  • 3.
    プロローグ(前説) 最初に、お詫びとお断り 今回はWindowsとMySQLの話ですが 「最新のWindows Server2012を使って MySQL Enterprise Editionを本格運用するぜー」 とか 「libmysqld.dll(←mysql”d”の方)を使って MySQLサーバ組み込みWindowsアプリを作るぜー」 とかそういった派手な内容ではありません 「手元にあるのはWindows XP時代のプアなマシンだけど、 MySQLのテスト環境だけは欲しいなあ…」 という貧乏なお話です。
  • 4.
    前説(2) OSS系の勉強会にくるとMBA(Mac BookAir)ばっかりですが 会社で個人用に配布されるPCって、100%、Windowsですよね しかもDellの型落ちのWindowsXPマシンだったりしますよね VMwareやOracleVMを入れてLinuxを動かしたくても VT-dもVT-xすら付いてないので重くてしょうがなかったりしますよね Eclipseが重過ぎるので、自然とnetbeans派になりますよね メモリが2GBで、CPUがCerelonでHDDは250GBですよね(断言) 決して、具体的にどこかの会社ディスってるとか、 そういう話ではないですよ♪
  • 5.
    前説(3) 今日の目標(テーマ)は、 「こういう腐ったWindowsマシンが配られた不幸な新人のPCに MySQLを入れさせて、MySQLerに洗脳してしまおう」 です。 初心者ではない方も、 「自分が新人教育係ならこう説明するな」 「あそこ、間違ってるwwwwwww」 とかそういう目線で、お楽しみください 愛のあるツッコミ、“随時“募集中です。
  • 6.
    テスト環境 ・Windows XPSP3 (32bit) 日本語版 (最新のパッチまでアップデート) ・MS Security Essentials ・MySQL 5.5.28 CommunityServer版 上記をOracleVM VirtualBox上の仮想環境で構築しました リソースは、CPUコア1個、メモリ500MB です
  • 7.
    アジェンダ  WindowsでMySQLを動かす  パッケージの入手  ファイルの展開  ファイル構成  サーバ起動(テスト起動)  接続確認  サーバ停止  設定変更  サーバ起動  複数サーバの同時起動 ここは時間があれば説明する  MySQL入門後  できた環境で色々な状況を試す  1. WARMバックアップとリカバリ  2. レプリケーション  3.BLACKHOLEレプリケーション
  • 8.
    ◆WindowsでMySQLを動かす  パッケージの入手  ファイルの展開  ファイル構成  サーバ起動(テスト起動)  接続確認  サーバ停止  設定変更  サーバ起動  複数サーバの同時起動  MySQL入門後
  • 9.
    パッケージの入手 MySQL CommunityServerのダウンロードページへアクセス 公式: http://www.mysql.com/downloads/mysql/ 開発: http://dev.mysql.com/downloads/mysql/
  • 10.
  • 11.
    ・どれかを選んで”download”ボタンをクリックするとユーザー登録画面になるが、 下のほうのリンク ”No thanks,just take me to the downloads!”をクリックする ことで、登録しないで、ダウンロードすることができる ・ファイルをPCに保存する
  • 12.
    ・MySQL Installer forWindows mysql-installer-community-5.5.28.2.msi 207.0M 2011年9月に追加され(5.5.15~) 、2012年8月頃に改良された Serverの他WorkBenchなども一括でインストールできる統合インストーラ ・ MySQL Server msi (インストーラ) mysql-5.5.28-win32.msi 31.1M “Server”のGUIインストーラ ・ MySQL Server zip (アーカイブ) mysql-5.5.28-win32.zip 143.3M バイナリ等とデータディレクトリを固めたアーカイブファイル ・ソースファイル mysql-5.5.28.zip 28.2M ソースファイル。コンパイルが必要
  • 13.
    【疑問】 色々なパッケージが有るけど、結局どれが良いの? 【回答】 簡単なテストとかMySQLを触ってみたいという人には、 “zipアーカイブ” 、超オススメ 【理由】 ・インストールは、展開してディレクトリ置くだけなので、超簡単 データディレクトリが作成済み mysql_install_dbでの初期化不要 ・レジストリを汚さない ・サービスを作らない ・起動停止も簡単 ・複数サーバの起動もできる ・アンインストールも、サーバを停止して、ディレクトリを消すだけで簡単 ・ソースからのコンパイルは多言語処理のソースと日本語Windows の間で問題が発生するので避けたい
  • 14.
    ファイル展開(1) (この資料で“$”は、コマンドプロンプトの ・MySQL用ディレクトリとして、C:¥MySQLを作る。 プロンプトとして使用します) $ md C:¥ MySQL 【注意①】 基本的にどこにおいても大丈夫だが、 後のことを考えて、日本語やスペースは使わない方がよい 【注意②】5.1以前は、インストール場所が強制されていたので、 一部の古いアプリでは、 C:¥mysqlにインストールされる前提で動く可能性がある ・ダウンロードしたmysql-5.5.28-win32.zipをダブルクリックして展開する ・mysql-5.5.28-win32ディレクトリをC:¥ MySQLの下にコピーする インストールはこれだけで完了です!
  • 15.
    ファイル展開(2) ・【重要】ファイルを展開したら最初にやるべきこと サーバの起動前にデータディレクトリdataを別の場所にコピー保存する データディレクトリとはC:¥MySQL¥mysql-5.5.28-win32¥data のディレクトリのこと 【理由】データディレクトリを作成するのに使われる“scripts/mysql_install_db.pl” は、 perlスクリプトなので、Windowsにperlを導入しないと初期化が面倒。 なので、あらかじめ、初期化済みのdataディレクトリを保存しておく。 これでいつでも、データは初期化できます。 安心してDBをいじり倒しましょう ・DBのデータが壊れたかもと思ったら、上記のコピーを用いて 以下の手順で、最初の状態に復旧できる ①サーバを停止(後述) ②C:¥MySQL¥mysql-5.5.28-win32¥data ディレクトリを削除 ③保存しておいたdata ディレクトリを C:¥MySQL¥mysql-5.5.28-win32¥の下にコピーする
  • 16.
    ファイル構成 展開後のディレクトリ構成はこうなっている $ dirC:¥MySQL¥mysql-5.5.28-win32¥ bin/ …実行ファイル data/ … (初期化済み)データディレクトリ docs/ …ドキュメント include/ …Cのヘッダファイル lib/ …Cのライブラリファイル(dllファイル) mysql-test/ …MySQLテストスイート(Perlスクリプト) scripts/ …データディレクトリ初期化スクリプト(Perlスクリプト) share/ …色々な言語ファイル と 初期化用SQLファイル sql-bench/ …ベンチマーク(Perlスクリプト) README …配布物についての簡単な説明 COPYING …GPL v2 ファイル my-small.ini …設定ファイルサンプル(メモリ64M以下) my-medium.ini …設定ファイルサンプル(メモリ128Mくらい) my-large.ini …設定ファイルサンプル(メモリ512Mくらい) my-huge.ini …設定ファイルサンプル(メモリ1~2Gくらい) my-innodb-heavy-4G.ini …設定ファイルサンプル(メモリ4Gくらい) このディレクトリはインストールディレクトリと呼ばれる
  • 17.
    ・実行ファイルの簡単な解説 重要度に応じて、ミシュランガイド風に★付き (個人的な感想です) 【exeファイル】 ・bin/ディレクトリ mysqld.exe … 【★★★】MySQLサーバ mysql.exe … 【★★★】MySQLクライアントツール mysqladmin.exe … 【★★★】MySQL管理ツール mysqldump.exe … 【★★★】バックアップ用にデータをSQLで出力 mysqlslap.exe …【★★】クライアントの負荷エミュレーション mysql_upgrade.exe …【★★】 MySQLのデータをアップグレードするツール mysqlbinlog.exe …【★★】バイナリログの内容を出力する mysqlimport.exe … 【★】テキストファイルからのデータインポート perror.exe …【★】エラーコードの説明を表示 my_print_defaults.exe …【★】設定ファイルから指定された[グループ]の設定を抜き出す mysqlcheck.exe …【☆】テーブルの検査、分析、修復(MyISAM用)、最適化 myisamchk.exe …【☆】テーブルの検査、分析、修復(MyISAM用) 、最適化 mysqlshow.exe … データベース、テーブル、カラムの情報表示 mysql_tzinfo_to_sql.exe …タイムゾーンテーブルのロード mysql_plugin.exe …どのMySQLプラグインをロードするか管理するツール
  • 18.
    【exeファイル】続き ・bin/ディレクトリ続き mysqld-debuug.exe … デバッグメッセージ付きMySQLサーバ mysqltest.exe …MySQLのテストスイート言語 (リグレッションテストに使われる) mysql_client_test.exe …クライアントAPIのテストする myisam_ftdump.exe … MyISAMの全文検索の情報表示 myisampack.exe … MyISAMテーブルを圧縮、読み取り専用にする myisamlog.exe … MyISAMの動作ログを表示する (設定log-isamで出力されるMyISAMのデバッグ用バイナリファイルの解析) echo.exe …普通のechoコマンド? replace.exe …sedっぽいコマンド? resolveip.exe …nslookupっぽいコマンド? mysql_embedded.exe …多分、組み込み用クライアント? mysqltest_embedded.exe …多分、組み込み用テストスイート?
  • 19.
    【Perlスクリプト】 ・bin/ディレクトリ mysql_secure_installation.pl …【★★】初期データベースをセキュアにする (testスキーマ削除、匿名ユーザアクセス権限削除、rootのパスワード設定など) mysqldumpslow.pl …【★】スロークエリのレポート出力 (設定log-slow-queriesで出力されるログファイル) mysqlhotcopy.pl …【★】MyISAMのホットバックアップ mysqld_multi.pl …複数のMySQLサーバの起動停止 mysql_convert_table_format.pl …指定されたDBの全テーブルのストレージエンジンを変更 (内部で”ALTER TABLE ENGINE=“を繰り返しているだけ) mysql_config.pl …コンパイルオプションの表示 ・mysql-test/ ディレクトリ mysql-test-run.pl …リグレッションテストをする mysql-stress-test.pl …ストレステスト? ・scripts/ディレクトリ mysql_install_db.pl …【★★★】初期データベースを作成する mysqld.exeを—bootstrapモードで起動させ、次に示すSQL文を実行させることで、初期データベースを作成する
  • 20.
    【SQLファイル】 ・share/ ディレクトリ mysql_system_tables.sql …【★】システムデータベースのテーブルを作成する mysql_system_tables_data.sql …【★】システムデータベースにデータをセットする mysql_system_tables_data.sqlで、 初期のtestスキーマの作成やrootユーザー匿名ユーザーが作成される fill_help_tables.sql …【☆】システムデータベースのhelp用テーブルに文をセット mysql_test_data_timezone.sql …システムデータベースのタイムゾーンのテーブル にデータをセット(使用せず?) (include/ や mysql-test/ にあるSQLファイルやexeファイルは省略しています)
  • 21.
    サーバ起動 (テスト起動) ①コマンドプロンプト(cmd.exe)を起動させる ②サーバファイルmysqldを起動させる $ C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysqld.exe--console 初回実行時は、ファイアウォールのダイアログが出るので、 “ブロックを解除する”ボタンをクリックする ・ 環境変数PATHにmysqldへのパスは追加されていないのでmysqld.exeはフルパスで指定する。 ・この時点で設定ファイルは存在しないがMySQLサーバはデフォルトの設定だけで起動可能 (オプションがいらなければmysqld.exeをダブルクリックするだけでも起動可能)
  • 22.
    ・オプション--consoleが、重要 エラーログへの出力をコンソール画面に表示し、Ctrl+Cでサーバを停止できるようになる $ C:¥MySQL¥ mysql-5.5.28-win32¥bin¥mysqld.exe --console 121017 0:07:14 [Note] Plugin 'FEDERATED' is disabled. 121017 0:07:14 InnoDB: The InnoDB memory heap is disabled 121017 0:07:14 InnoDB: Mutexes and rw_locks use Windows interlocked functions 121017 0:07:14 InnoDB: Compressed tables use zlib 1.2.3 121017 0:07:14 InnoDB: Initializing buffer pool, size = 128.0M 121017 0:07:14 InnoDB: Completed initialization of buffer pool 121017 0:07:14 InnoDB: highest supported file format is Barracuda. 121017 0:07:14 InnoDB: Waiting for the background threads to start ここ重要 121017 0:07:15 InnoDB: 1.1.8 started; log sequence number 1595675 121017 0:07:15 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306 121017 0:07:15 [Note] - '0.0.0.0' resolves to '0.0.0.0'; 121017 0:07:15 [Note] Server socket created on IP: '0.0.0.0'. 121017 0:07:15 [Note] Event Scheduler: Loaded 0 events 121017 0:07:15 [Note] C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysqld.exe: ready for connections. コマンドプロンプト上で--consoleオプションを付けてmysqld.exeを実行させると、 上記のような起動ログを出して待ち状態になる。 このウインドウを[×]で閉じてはいけない 画面操作の邪魔な時は、ウインドウを最小化しておくとよい。
  • 23.
    接続確認(1) ①接続確認のために、もう一つコマンドプロンプトを起動させる (コマンドプロンプトの“プロパティ”から”画面の色”で”画面の背景”を変えると サーバとクライアントの区別が付きやすいので便利) ②対話型のクライアントプログラム(mysql.exe)を起動する $ C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysql.exe -uroot Welcome to the MySQL monitor. Commands end with ; or ¥g. Your MySQL connection id is 1 Server version: 5.5.28 MySQL Community Server (GPL) Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '¥h' for help. Type '¥c' to clear the current input statement. mysql>
  • 24.
    接続確認(2) $ C:¥MySQL¥ mysql-5.5.28-win32¥bin¥mysql.exe –uroot test ・ クライアントのmysql.exeもフルパスで指定する。 ・ -uオプションは、接続するユーザーの指定 ここでは、初期化時に自動的に作成される管理用のrootユーザーで接続している オプションとそのパラメータの間は離さないで書くほうがよい ○ -uroot △ -u root (参考:○ -ppass ×-p pass ) ・オプション-Pでポート番号を指定していない場合、 デフォルトのポート番号として3306が使用される ・(余談)Windowsは、UNIXと接続がちょっと違う いわゆる”UNIXドメインソケット”を利用したプロセス間通信はできない つまり設定ファイルでのsocketの指定は意味がない 代わりにWindowsにしかない接続として、以下の2つがある ・”名前付きパイプ” …設定項目enable_named_pipe ・”共有メモリ” … 設定項目 shared-memory, shared-memory-base-name (ただしデフォルトではどちらも無効になっているため 必ずTCP/IPで接続される)
  • 25.
    接続確認(3) (余談続き)そのほかのWindows版とUNIX版の違い ・MySQLスキーマ名、テーブル名はファイルシステムに依存するため Windows(NTFS)では大文字小文字の区別はしない (ただし、オプションやパスワードはどのOSでも、大文字小文字を区別する) (パスワードの大文字小文字を区別しないOracle(11g以前)とはこの点が異なる) ・Windowsでも、lower_case_table_names=2と設定すると、大文字小文字 を保持した名前で ディレクトリやファイルを作成するが、アクセス時の名前の チェックでは 大文字小文字を区別しない。 (WindowsでC:¥HOGEディレクト リが存在する状態で、C:¥hogeディレクトリを作ろうとしても "指定されたファイ ル名が既に存在します"エラーになるのと同じ現象) ・UNIXのデフォルトと同じ値のlower_case_table_names=0と設定しても大 文字小文字が区別されるが、 大文字小文字を変えたテーブル名でMyISAM のテーブルにアクセスした場合、 インデックスデータが破壊される可能性が あるので、この設定をするのは止めた方が良い ・設定項目名は、”lower_case_table_names”と「テーブル」となっているが、 スキーマ名へも影響を与える ・ファイルパスの区切り文字が「¥」なので、エスケープ文字と重複する そのため、ファイルパスは「¥¥」または「/」を使用する必要がある
  • 26.
    接続確認(4) ③サーバとの接続を切断 mysql> ¥q または mysql> quit または mysql> exit で切断する。 どれを使っても結果は同じ。 (Ctrl+Cでmysql.exeを終了させることでも切断可能) クライアントで切断をしても、サーバの動作へは影響ありません
  • 27.
    サーバ停止(1) mysqld.exeが起動しているコマンドプロンプト上で、 Ctrl+Cを押すと、MySQLサーバが停止する (mysqld.exe起動時に--consoleオプションを有効にしたため) 【注意】 コマンドプロンプトの[×]ボタンをクリックしてもサーバは停止しない mysld.exeプロセスは残ったままになる このような場合や、--consoleオプションを付けずにmysqld.exeを起動させた場合 タスクマネージャの”プロセス”からmysqld.exeのプロセスを停止させないほうが良い。 下記の【正式なシャットダウン方法】に従ってサーバを停止させる 【正式なシャットダウン方法】 ①別のコマンドプロンプトを起動させます ②mysqladmin.exeで、シャットダウンコマンドを実行します $ C:¥ MySQL¥ mysql-5.5.28-win32¥bin¥mysqladmin.exe -uroot shutdown -u ... サーバへ接続するユーザの指定 サーバの停止には、root権限が必要
  • 28.
    サーバ停止(2) MySQLのmysqladmin.exeコマンドでのshutdownには、 OracleやPostgreSQLのようなshutdownモードの指定はない 参考:他RDBMSのshutdownモード Oracle: NORMAL / TRANSACTIONAL / IMMEDIATE / ABORT PostgreSQL: smart / (transactionalは無し) / fast / immediate ちなみに、PostgreSQLの “pg_ctl”コマンドでの“shutdown”もモードを省略できるが、 これはデフォルトの”-m s” (smartモード)が選択されるのと同じ MySQLのshutdownは、以下のような流れでサーバ停止する ・1.シャットダウンプロセスの開始 (mysqladminを使用してshutodownを指示する方法以外に、 UNIXの場合はSIGTERM割り込み(要するにkillコマンド)で、 Windowsのサービスで起動させた場合はサーバマネージャで、 シャットダウンプロセスを開始できる) ・2.(必要なら)シャットダウンスレッドの作成 ・3.新規接続の拒否 ・4.現行の動作中のスレッドを順次停止していく ・5.ストレージエンジンのシャットダウン (詳細後述) ・6.サーバの停止
  • 29.
    サーバ停止(3) mysqladmin shutdownにモードの指定は無いのだが、 「・5ストレージエンジンのシャットダウン」の中の「innodbのシャットダウン」は、 シャットダウンのモードを選択できる innodbのシャットダウンは、innodb_ fast_shutdownの設定で変化する 0...(安全、低速)ログの内容を完全にテーブルファイルへフラッシュする。 1...(デフォルト)終了前にチェックポイント処理を行う(fast shutdown) 2...(危険、高速)ログの内容をファイルへ反映するだけ、再起動後にはクラッシュリカバリが行われる innodb_ fast_shutdownは、Globalな動的システム変数なため、 mysql.exeで接続して変更することができるので、 動的にシャットダウンのモードを変更できる innodb_ fast_shutdownに1(デフォルト)が設定されている場合の挙動は、 だいたい、 Oracle”SHUTDOWN IMMEDIATE”や PostgreSQL”shutdown fast”と同じである
  • 30.
    設定の変更(1) Windowsで設定ファイル(オプションファイル)名は、 ”my.ini”が使われることが多い (UNIX系で使用されるmy.cnfは、Windowsで.cnfが短縮ダイヤル用の拡張子なので エクスプローラのフォルダオプションを変更しないと使用できないため) 設定ファイルは以下の場所に設置できる ①C:¥WINDOWS¥my.iniまたはmy.cnf (環境変数%WINDIR%の直下) ②C:¥my.ini または C:¥my.cnf ③(ベースディレクトリ)¥my.iniまたはmy.cnf ④--defaults-extra-file=(パス)で指定されたファイル 設定項目ごとに、後から読んだファイルの値で上書きされる ただし、mysqld.exeのコマンドラインで--defaults-file=(パス)で 設定ファイルを指定すると、 サーバは上記の標準で読み込まれる設定ファイルをすべて無視し、 指定された設定ファイルからのみ、オプションを読み取る
  • 31.
    設定変更(2) ・設定変更の反映 ①MySQLサーバを停止 ②設定ファイルを書き換えて保存する ③MySQLサーバの起動 【重要】 前にインストーラで入れた残骸のC:¥WINDOWS¥my.ini やC:¥my.iniが残ったままだと、 ” (ベースディレクトリ)¥my.ini”で設定して無い設定項目が設定される 【重要】 設定ファイルmy.ini は、”ファイルを保存”しないと、反映されない。 ・設定された状態の確認 mysql.exeクライアントでMySQLサーバに接続し、 サーバ変数を表示させて、状況を確認する $ C:¥MySQL¥mysql-5.5.28-win32¥bin¥mysql.exe -uroot MySQL> show variables;
  • 32.
    設定変更(3) 推奨設定 C:¥MySQL¥mysql-5.5.28-win32¥my.ini [mysqld] console = 1 character_set_server = utf8 collation_server = utf8_general_ci transaction_isolation = READ-COMMITTED innodb_file_per_table innodb_buffer_pool_size = 256M innodb_log_buffer_size = 8M # innodb_log_file_size = 64M [mysql] default_character_set = cp932 注意:これは最低限の設定です “transaction_isolation = READ-COMMITTED“は、 オラクルデータベース出身者がネクストキーロックやギャップキーロックを嫌うので、緩くする設定 クライアント側のcp932は、Windows XPの標準の文字セットいわゆるShiftJISです
  • 33.
    設定変更(4) MySQLパッケージに付属しているmy-*.iniファイルは古く、時代にあっていない 最適な設定ファイルを生成するための情報を示す ただし公開されている情報は、圧倒的にlinux向けが多い点に注意 ・公開されているmy.cnf ①@nippondanjiさんのmysqlのwiki上に公開されているもの http://mysqlpracticewiki.com/index.php/My.cnf%E3%82%B5%E3%83%B3%E 3%83%97%E3%83%AB wikiのトップ http://mysqlpracticewiki.com/ から、“My.cnfサンプル”で検索してもたどり着ける ②10月5日に、NHN Japan(旧ライブドア)の長野( @kazeburo )さんが、 githubにmy.cnfを公開しています http://blog.nomadscafe.jp/2012/10/mysql-mycnf-github.html ③「WordPress 高速化&スマート運用必携ガイド」を書いた岡本渉さんが、 Amazon EC2のmicroインスタンス上でのWordpressに特化した チューニング済みのAMIを公開しています http://dogmap.jp/2012/07/17/wordpress-ami-amimoto/ (ただし、perconaサーバ用だったり、特殊な環境専用だったりします)
  • 34.
    設定変更(5) ・web上で動的にmy.cnfを生成するサイト ①“PerconaOnline Tools”の“Optimize your MySQL Server” ウイザード形式で、対話的にサーバの情報を指定していくことで my.cnfが生成される https://tools.percona.com/ (ユーザー登録が必要です) ・MySQLサーバ上で動的にmy.cnfを生成する ①“mysqltuner.pl” https://github.com/rackerhacker/MySQLTuner-perl サーバ内のメモリなどを検出して最適値をアドバイスするツール perlスクリプトです。 搭載メモリ量の自動読み取り機能などが、Windowsに対応していません (また、設定内容が少し古いかも知れません) ・最終的には、MySQLアーキテクチャを勉強して、ベンチを取りながら 設定を詰める必要がある
  • 35.
    設定変更(6) (余談) MySQLの設定ファイルで、はまりやすいポイントを列挙します。 ①設定項目の単語の区切りの-(ハイフン)と_(アンダースコア)は、等価 log-bin もlog_binも同じことです ②設定項目は単一の名称だと区別ができるところまで書けば省略できる read-onlyは、read-oでも通ってしまう (ただし、linuxのrpmでインストールする場合に、標準で添付されるSystemV 起動スクリプト(/etc/init.d/mysql)中には、sedを使用するため、上記の表記の揺れを 許さないところが存在するので注意) ③設定項目名は、大文字小文字を区別する
  • 36.
    サーバ起動 ①サーバファイルmysqld.exeをダブルクリックして起動させる ・インストールディレクトリにmy.iniファイルを作成すれば、 mysqld.exeが起動時に自動的に読み込んで コマンドオプションは不要となる ・設定ファイル(my.ini)中でconsoleオプションを有効にすれば、 エラーログを標準出力に出力しながらの動作をする サーバの起動も停止も簡単!
  • 37.
    複数サーバの同時起動 ①サーバを停止する ②インストールディレクトリをコピーして複製を作る オリジナルがC:¥MySQL¥mysql-5.5.28-win32にあるとして、 C:¥MySQL¥mysql_1 C:¥MySQL¥mysql_2 の2つをxcopyコマンドの/sオプションで再帰的な複製する例を示す $ xcopy /s C:¥MySQL¥mysql-5.5.28-win32 C:¥MySQL¥mysql_1 $ xcopy /s C:¥MySQL¥mysql-5.5.28-win32 C:¥MySQL¥mysql_2 (エクスプローラなどのマウス操作でコピーしてもOKです) ③設定ファイルを書き換える (各々のインストールディレクトリのmy.iniを編集) 以下の設定が重複しないようにする ・portの設定 ・(有れば) server-idの設定 ・絶対パスで指定した設定 (相対パスは各々のbasedir(=インストールディレクトリ)からのパスとなる) ④複製先のbin/mysld.exeをダブルクリックして、サーバを起動する 複製後も初回実行時は、ファイアウォールのダイアログが出るので、 “ブロックを解除する”ボタンをクリックする ⑤続いて、もう一つの複製先のbin/mysqld.exeもダブルクリックで、起動させる
  • 38.
    MySQL入門後  オレは ようやく のぼりはじめた ばかりだからな  この はてしなく遠い MySQL坂をよ
  • 39.
  • 40.
    MySQL入門後(2) ⑤MySQLバグデータベース 未知のトラブルかなと思ったら、ここでサーチしてみましょう (英語だが、バグ報告だとなんとなく意味が分かる) http://bugs.mysql.com/ 最近は、workbenchのバグ報告ばかりだ… ⑥ブログ MySQLのブログの集積所 ・Planet MySQL http://jp.planet.mysql.com/ 特に、更新が多いブログはReaderで、RSSを取得するとよい ・SH2の日記 http://d.hatena.ne.jp/sh2/ ・漢(オトコ)のコンピュータ道 http://nippondanji.blogspot.jp/ ・(ひ)メモ http://d.hatena.ne.jp/hirose31/
  • 41.
    MySQL入門後(3) ⑦Twiter 最近は、MySQLの最新の情報はTwiterで流れていることが多いです。 自分でTweetしなくとも、必須です。 フォローするアカウントは、以下のページを参考に “漢のコンピュータ道:MySQLerのTwitterアカウントまとめ” http://nippondanji.blogspot.jp/2009/10/mysqlertwitter.html ハッシュタグ #mysql_jp をつけてtweetとすると、いろんな人に拾われる確率アップです ⑧ソースを読む MySQLはFLOSSなので、分からないことがあった時の究極の解決法はこれです。 入手先 http://dev.mysql.com/downloads/mysql/ 最新版 https://launchpad.net/mysql-server コードホスティングはLaunchPad(2008年にBitKeeperから移転) バージョン管理はbazzar githubとgitに移行してくれると楽だなあ ソースを読むのは勉強になる。でも、一人で読むのはしんどい ⑨勉強会に参加しましょう ・IT勉強会カレンダー http://bit.ly/itcal
  • 42.
    MySQL入門後(おまけ) ①“MySQLCheat Sheet”を印刷して座右に置きましょう “漢(オトコ)のコンピュータ道” @nippondanjiさんのMySQLチートシート(カンペ) http://www.mysqlpracticewiki.com/files/cheat-sheet.pdf ②“MySQL[plus] awards 2011”を見ていろんなアプリを試そう MySQLは世界中で人気があるDBなので、有償、無償の色々なアプリがあります 別に権威のある賞ではなくブログ書いた人の個人的な選考でしょうが、 聞いたことないアプリもあったりして面白いので、手当たり次第に試してみると、 新しい発見があるかもしれません http://www.mysqlplus.net/2012/01/05/vote-mysqlplus-community-awards-2011/ 樋口さんのHandolerSocketとか、 松信さんのMHAとか、 木下さんが過去に作られたXtraBackupとか、 日本の開発者が作ったツールも結構入っています
  • 43.
    ◆ ご愛読ありがとうございました 男坂の「未完」の絵 http://riasu.up.d.seesaa.net/riasu/image/otokosaka47362.gif http://riasu.seesaa.net/article/23979138.html