hacks/DB/MySQL

2011年11月04日

このエントリーをはてなブックマークに追加

信頼性はどうであれ、共有ディスクを使ったMySQL

nfsマウント領域にmysql datadirを配置し、mysqlを起動させる。

検証環境
  • RHEL 6.0 / CentOS 6.0
  • nfs-utils 1.2.2-7.el6
  • mysql-server 5.1.52-1.el6_0.1
要件定義
  • 隣のノードの/var/lib/mysqlをdatadirとしてMySQLを起動
作業概要
  1. nfsサーバ
    1. /var/lib/mysql を公開領域として設定
  2. nfsクライアント, mysqld
    1. nfsサーバの/var/lib/mysqlを、自身の/var/lib/mysqlにnfsマウント
    2. mysqlを起動
環境定義
用途IPアドレスnfsディレクトリ
nfsクライアント192.0.2.12/24/var/lib/mysql/
nfsサーバ192.0.2.13/24/var/lib/mysql/
事前作業

NFSの設定作業は ファイルサーバ構築 を参照の事。公開ディレクトリとマウントポイントを、それぞれ /var/lib/mysql に置き換えれば良い。

共通

# yum -y install mysql-server
nfsサーバ

# echo '/var/lib/mysql 192.0.2.0/24(rw)' >> /etc/exports
# exportfs -ra
作業内容

事前作業にて、nfsサーバの設定が終わってるものとする。

SELinuxを無効化

mysql datadirがnfsマウントされているとmysqldが起動しない。


# /etc/init.d/mysqld start
chown: changing ownership of `/var/lib/mysql': Operation not permitted
chmod: changing permissions of `/var/lib/mysql': Operation not permitted
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

nfsマウントしたmysql datadir領域でもmysqlが起動する様にSELinuxを設定するのが良いのだろうが、本題はmysqlを起動させる事なのでSELinux無効化で済ませる。


# cp -pi /etc/sysconfig/selinux /etc/sysconfig/selinux.0
# diff /etc/sysconfig/selinux.0 /etc/sysconfig/selinux
7c7
< SELINUX=enforcing
---
> SELINUX=disabled

システム再起動


# reboot

SELinuxが無効化さていればmysqlが起動するはず。

mysql datadirをnfsマウント

mountコマンドでnfsマウント。


# mount -t nfs 192.0.2.13:/var/lib/mysql /var/lib/mysql

必要に応じて/etc/fstabにマウントエントリを追加しておく事。

mysql起動

mysqlを起動


# /etc/init.d/mysqld start

mysqlが起動してる事を確認


# mysqladmin -uroot ping
mysqld is alive

mysql接続して内容を確認


# mysql -uroot

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.06 sec)

必要に応じてmysqlをサービス起動対象に追加しておくこと。


# chkconfig --list mysqld
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off

あとがき

疑わしい挙動をする時はSELinuxを無効化か


続きを読む


編集
@hansode at 16:00|PermalinkComments(0)TrackBack(1)

2008年07月19日

このエントリーをはてなブックマークに追加

High Performance MySQL
High Performance MySQL
posted with amazlet at 08.07.19
Baron Schwartz Peter Zaitsev Vadim Tkachenko Jeremy D. Zawodny Arjen Lentz
Oreilly & Associates Inc
売り上げランキング: 3436

Amazonさんから届いた。
  • MySQL 5.1対応
  • ページ数は初版の2倍強
  • 管理者だけでなく開発者向けの内容
斜め読みしただけでも充実した内容である事が分かる。
この本でしばらく楽しめそうだ。

この夏、オススメの1冊。



編集
@hansode at 16:10|PermalinkComments(2)TrackBack(0)

2008年06月12日

このエントリーをはてなブックマークに追加

読み込まれる順番


忘れてたのでメモ
  1. /etc/my.cnf
  2. DATADIR/my.cnf
  3. ~/.my.cnf
ここに該当しないmy.cnfを読み込んでいるサーバがある。
接続して各種確認出来ない状態…。
psコマンドの実行結果があるだけでも大分違う。
さて困ったぞ。



現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社
売り上げランキング: 32833



編集
@hansode at 13:55|PermalinkComments(2)TrackBack(0)

2008年05月23日

このエントリーをはてなブックマークに追加

レプリケーション・マスターの書き込みが遅過ぎる


IOに問題があるのかどうかを切り分ける為にbonnie++で性能評価してみた。
これと言って問題の無い数値が出て来た。



MySQLの設定に問題があるに違いない


my.cnfのパラメタを色々見比べてみた。
その中に気になるパラメタがあった。

sync_binlog = 1

試しにコメントアウトしてみたら速くなった…。
135倍速かった。

しかし、、、
条件が変わってしまうので設定は元のまま。
そのまま性能評価項目を埋めないと行けない。

時間だけが過ぎて行く。



実践ハイパフォーマンスMySQL
ジェレミ・D. ザウドニ デレク・J. ベリング
オライリージャパン
売り上げランキング: 138677



編集
@hansode at 01:50|PermalinkComments(0)TrackBack(0)

2008年05月13日

このエントリーをはてなブックマークに追加

特定情報に特化したスレーブ


理由は色々あるだろう。
  • 全テーブルをレプリケーション対象にしたくない
  • 全テーブルだとI/O負荷が高いので、過負荷テーブル別にスレーブを分散したい

slave側のmy.cnf変更


[mysqld]セクションに設定追加。
テーブルが複数ある場合は、テーブル数分の設定が必要。

slave$ sudo vi /etc/my.cnf

[mysqld]
replicate-do-table=dbname.table0
replicate-do-table=dbname.table1
replicate-do-table=dbname.table2
....
設定反映

slave$ sudo /etc/init.d/mysql restart

検証


slaveでtable0の存在を確認できれば成功
  1. masterにtable0が無い事を確認
  2. slaveにtable0が無い事を確認
  3. masterでtable0を作る
  4. slaveでtable0が作成されている事を確認
slaveでignore0が存在しない事を確認出来れば成功。
  1. masterにignore0が無い事を確認
  2. slaveにignore0が無い事を確認
  3. masterでignore0を作る
  4. slaveでignore0が作成されてない事を確認
念のためtable1とignore1も検証。
複数テーブルを指定しても意図した動作になった。



編集
@hansode at 16:55|PermalinkComments(1)TrackBack(1)