ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2010-02-04

MySQL管理者最速マスター

巷ではプログラミング言語の最速マスターが流行ってるので、MySQLも参戦。ただし管理者向け。

まずはダウンロードとインストール

ダウンロードサイト
http://dev.mysql.com/downloads/

バイナリにはインストールパッケージ(Windows=MSI、Mac=DMG、Linux=RPMとか)とアーカイブ(*NIX=tar.gz/Windows=zip)があるけど、初心者は黙ってパッケージをチョイス。インストールはウィザードに従うだけ。英語だけどそこはガマン!

パッケージリポジトリがあるOSを使ってるなら、リポジトリからインストールするのもありだ。例えば、
shell> sudo yum install mysql
とか
shell$gt; sudo apt-get install mysql
とか。これは楽チンだけどMySQLのバージョンがちょっと古くなるので注意。

もちろんソースコードからビルドするのもアリだ。

設定

MySQLの設定で何がいちばん重要かっていうと、InnoDBのパラメータまわりだ。特に、ログファイルのサイズは後から変えるのが面倒なので最初にキッチリやっておくこと。そしてバッファプールのサイズをキッチリ増やしておくこと。いくらマシンにメモリを積んでたって、バッファプールに割り当てなきゃ無意味だからな。あと、文字コードとかディレクトリ関係とか接続数とか基本的な設定も大事。

シンプルなmy.cnfのサンプル。
[mysqld]
# basic settings
user = mysql
port = 3306
socket = /tmp/mysql.sock
character-set-server = utf8
datadir = /var/lib/mysql
tmpdir = /var/tmp/mysql
log_slow_queries
max_connections = 500
thread_cache_size = 500
max_allowed_packet = 16M
table_cache = 2000
#log-bin = mysql-bin
#server-id = 1
innodb_buffer_pool_size = 2500M
innodb_flush_method = O_DIRECT
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
とりあえずこれで動く。

パッケージを使ってインストールした場合には既に設定ファイルがあるので、それを編集するといいだろう。また、既にmysqldが起動されてしまっている場合にはInnoDBのログファイルが出来てしまっているが、ログファイルサイズの設定値が実際と違うと起動しない。単純にログファイルを削除するとエラーになる。おまじないとして2回mysqldを再起動してから、ログファイル(ib_logfile*という名前)を削除して、それから設定値を変更するといいだろう。

あと、Windowsはウィザード使えってことで。

ユーザーの作成とか初期化とか

*NIXでtar.gz版を使う場合、ユーザーの作成とかdatadirを初期化とか自動起動の設定とかは自分でやらないとイカン。

ユーザーの作成とか
shell> sudo mkdir /var/lib/mysql
shell> sudo groupadd mysql
shell> sudo useradd -g mysql -s /bin/false -d /var/lib/mysql mysql
shell> chown mysql:mysql /var/lib/mysql && chmod 700 /var/lib/mysql
shell> passwd mysql

データディレクトリの初期化とか
shell> cd /usr/local/mysql
shell> sudo bin/mysql_install_db --datadir=/var/lib/mysql
shell> sudo chown -R mysql:mysql /var/lib/mysql

自動起動とか
shell> sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
shell> sudo update-rc.d mysql defaults

RPMとかのパッケージだと自動でやってくれるからやっぱり便利だよね。

起動&停止

*NIXの場合、起動は
rootになって、
shell> mysqld_safe &
または
shell> /etc/init.d/mysql start
または
shell> service start mysql
とする。rootになるのはmysqldがリソースの設定(ulimitで増やす)などをするためだ。プロセスは後からsetuid()でmy.cnfで設定されているユーザーに変更する。そもそもさっき作成したmysqlユーザーだとログイン出来ないしね。

停止は
shell> mysqladmin -uroot -p shutdown
または、rootで
shell> /etc/init.d/mysql start
または、rootで
shell> service start mysql
だ。

Windowsの場合は、大抵サービスとして動かしてると思うので、「コントロールパネル ⇒ 管理ツール ⇒ サービス」から起動停止すべし。

rootパスワードの設定

初期状態では、MySQLのrootユーザにはパスワードが設定されていない。超^64危険なのですぐにパスワードを設定すべし!*NIXなら、mysql_secure_installationというコマンドが便利だ。このコマンドは、rootパスワードの設定や、不要なアカウントの削除などを行ってくれる便利ツール。是非使うべし。

Windowsならウィザードで設定可能。

CLIで接続

shell> mysql -h ホスト名 -P ポート番号 -u ユーザー名 -p[パスワード] --default-character-set=文字コード データベース名
という感じで。パスワードはスペースを空けずに入力すればコマンド行で指定できるけど、psとかで他のユーザーから見えちゃうから注意。指定がなければパスワードの入力を促すプロンプトが表示されるよ!文字コードは自分の端末と合わせること。$HOME/.my.cnfに設定を書いておくと便利。

[mysql]
user=ユーザー名
password=パスワード
default-character-set=utf8
port=3306
host=127.0.0.1
ホスト名の指定がない場合、デフォルトではlocalhostに接続する。その場合、*NIXならTCP/IPじゃなくてUNIXドメインソケット接続になる。

ユーザーの作成

アプリケーションがrootユーザーでMySQLサーバーに接続するのは大変危険じゃ。最低でも管理系の権限と、システムデータベースへのアクセスがないユーザーを作成するのが望ましい。
mysql> GRANT ALL ON db1.* TO user1@host1 IDENTIFIED BY 'パスワード'
とすれば、最低でも前述の条件は満たせる。もう一手間かけて、DDL(CREATEとかALTERとか)を実行するユーザーと、DML(SELECT/INSERT/DELETE/UPDATE)を実行するユーザーを分けておくといいだろう。(詳細割愛)

コネクタ

各種プログラミング言語でMySQLにアクセスするにはコネクタ(っつーかドライバ)を使う。オフィシャルなコネクタはダウンロードページから入手しよう。PerlとRubyのオフィシャルなものはないので、Perl用のドライバはCPANからDBD::mysqlを、Ruby用のドライバはgemでruby-mysqlまたはmysqlをゲットするといいだろう。(ruby-mysqlはPure ruby実装)

接続方法とかクエリの実行方法とかは書き出すとキリがないので割愛!ただし文字化けには特に注意すること。(コネクタの接続設定で適切な文字コードを指定すればノープロブレムだ!)RTFM!

GUIとか

今ならMySQL Workbench 5.2がナイスチョイス。β版なので不具合も多少あるだろうけど、不具合に遭遇したら報告してくれると助かりマンモス。

レプリケーション

とりあえず、ひろせ まさあきさんによる解説を読もう。話はそれからだ。

バックアップとリストア

データ量が少ないうちはmysqldumpで充分イケル。

バックアップ
shell> mysqldump -hホスト名 -uroot -p データベース名 > dumpfile.sql

リストア
shell> mysql -hホスト名 -uroot -p データベース名 < dumpfile.sql
という具合だ。テーブルがInnoDBだけなら、mysqldumpには--single-transactionというオプションをつけると、バックアップ中も参照・更新共に出来るのでナイスだ。

困ったら?

まずは日本MySQLユーザ会のメーリングリストで質問してみるといいだろう。熟練したユーザーがよくチェックしているので、適切なアドバイスを貰えることが多い。商用でMySQLを利用する場合には、保険としてオフィシャルなサポートを購入するといいだろう。メーリングリストだと回答を貰える保証はないが、サポートなら確実に回答が返ってくるので安心だ。 とりあえずこんなもんで!! 追記: コマンドのリファレンスにはMySQL Cheat Sheetもよろしく。

0 コメント:

コメントを投稿