Wednesday, September 11, 2013

mysqld_multiは

Original post: http://anothermysqldba.blogspot.com/2013/09/mysqldmulti.html

だから私は最近で働いていたmysqld_multiは 、私は、これは私は、これらの日は非常に多くのブログ記事に表示されていないのが特徴であったことに気づいた。 彼らは存在しないと私はあなたの参照のため、この記事の下部にあるいくつかを記載しております。

同じハードウェア上で複数のMySQLインスタンスを実行する必要があります :あなたの理由は異なり、それはの概念に来るときにも議論の余地があると思われる。

あなたはテストの目的のために別のMySQLインスタンスをインストールするために、生産インスタンスとして、その後、あなただけで動作するはずではないしたい場合は、任意の混乱を避けるために、 MySQLをサンド 多くの人々が一般的に行うようにその場合は動作しないいくつかの理由で、あなたは別のサーバーを実行することができます。新しいのmy.cnfファイルを作成して、mysqld_safeをとカスタムコマンドを使用してMySQLサーバを起動する。

mysqld_multiはは、複数のサーバを実行するためにあなたのために、それは非常に簡単になります。

たとえば、次のように
あなたは、ポート3306上で実行されているセカンダリサーバを持っている。 それはREAD_ONLYスレーブとは、現在のプライマリに障害が発生したときに新しいプライマリサーバになることを待っている場所に多くのハードウェアを持っている。 また、を活用したいと思いますPerconaツールキットと遅延モードで実行されている複製セカンダリサーバを持っている。 あなたに更新できればMySQLは5.6 、あなたは必要はありませんPT-スレーブ遅延が、現在、それはオプションではありません。

どちらのケースでは、予算の限界を持っているし、別のサーバーを許可されていません。 だから、あきらめますか? あなたのセカンダリボックスサーバーの別のバージョンを保持するためのディスク·スペースを持って、なぜしない? カスタムバージョンとなどの開始と停止をしなければならないという考え方は、一部に入れてオフにすることができます。 だから代わりに、my.cnfファイルの新しいバージョンを設定することができますが、最初は、次の操作を行うことができます。

(:VIすなわち)あなたのお気に入りのエディタを選ぶ
vi /etc/multi_my.cnf
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = mysql
log = /var/log/multi_mysql.log

# Port 3306 Server
[mysqld1]
>socket = /tmp/mysql_3306.sock
port = 3306
pid-file = /var/lib/mysql/mysql_3306.pid
datadir = /var/lib/mysql/
user = mysql
今すぐあなたのmy.cnfファイルから[mysqld]セクションを取ると、この場所にそれをコピーすることができます。

cat /etc/my.cnf >> /etc/multi_my.cnf
あなたは単に上書きコピー[mysqld]セクションを持っているので、クリーンアップするために編集上のコマンドを使用している場合。

その後、3307ポート部を作成することができます。
# Port 3307 Server
[mysqld2]
socket = /tmp/mysql_3307.sock
port = 3307
pid-file = /var/lib/mysql2/mysql_3307.pid
datadir = /var/lib/mysql2/
user = mysql
およびコンフィギュレーションの例をここで見つけることができます:
http://dev.mysql.com/doc/refman/5.6/en/mysqld-multi.html

この例では、私はあなたがPercona Xtrabackupでポート3306サーバーのバックアップを作成し、新しいDATADIRにそれを置きますと仮定します。
innobackupex --defaults-file=/etc/my.cnf --user=root --password=<password> --port=3306 --no-timestamp /var/lib/mysql2/
innobackupex --apply-log /var/lib/mysql2/
今、あなたはmysqld_multiはバイナリ(は/ usr / bin / mysqld_multiは)となりましたこれをテストするか、スクリプトを起動および停止に設定することができます。 テンプレートは、MySQLのインストールに付属している:は/ usr / share / mysqlの/ mysqld_multi.server

あなたinit.dディレクトリにこれをコピーしたり、現在の場所からそれをテストすることができます。
スクリプトは、/ etc / my.cnfにファイルにデフォルト設定されます。 default_file =の/ etc / multi_my.cnfレポート - だから、このテストを開始する

レポートオプションは、サーバが動作しているかどうかを確認するためにstatus引数に似ています。 あなたはシンボリックリンクすることができ、デフォルトのプロセスとしてこれを実行したり、新しい/ etc / my.cnfには、/ etc / multi_my.cnfをコピーすることを選択した場合
/etc/init.d/mysqld_multi.server report 1,2
/etc/init.d/mysqld_multi.server report 1
/etc/init.d/mysqld_multi.server report 2

上記は、各与える引数の異なるMySQLインスタンスへのコースを参照のことのためにあなたが実行してステータスを与えるだろう。 あなたが同じことを行うことができ、次のオプションのすべて:{開始|停止|レポート|再起動を}

すべてがうまくいった場合は、ポート3307上のインスタンスを開始している "2スタート"することができます。 次にログインしxtrabackup_binlog_infoファイルで提供ビンログ位置情報とマスターを変更します。
CHANGE MASTER TO
MASTER_HOST='localhost',
MASTER_PORT=3306,
MASTER_LOG_FILE='<log filename>',
MASTER_LOG_POS=<position>;

Start slave;
今ではあなたのセカンダリスレーブサーバのコピーを持っている。 PT-スレーブ遅延を使用する場合は、次のコマンドを実行することができ、デフォルトは時間の遅延です。
pt-slave-delay --port=3307 --socket=/tmp/mysql_3307.sock --host=localhost

これは、少なくともあなたが始めることができると思います。