ホームページ  >  記事  >  データベース  >  1 台のマシンで複数の MySQL サービスを実行する方法を説明します。

1 台のマシンで複数の MySQL サービスを実行する方法を説明します。

Y2J
Y2Jオリジナル
2017-05-23 14:48:021304ブラウズ

************************************************ ***** *********

最初の部分、1 つのサーバー上に複数の mysql サービスを構築します

******************** ********** ***********************************


1、はじめに

Mysql には mysqld_multi コマンドがあり、これを使用して物理サーバー上で複数の Mysql サービスを実行することができました。今日、いくつかのドキュメントを参照して自分でテストし、成功しました。操作プロセスを皆さんと共有します。

オペレーティング システム: Linux 2.6.13 (Slackware)、他のバージョンの Linux を使用する必要があります。ほぼ同じです。

データベース: Mysql 4.0.17 ソース プログラムのインストール (最新の 5.1.* も同様だと思います。)数日)

計画: 4 つの mysql サービスを実行します:

サーバー名を仮定します: db-app (IP は 192.168.0.100)、

サーバー名を仮定します: db-app2 (IP は 192.168.0.101)、

2 番目の部分までは db-app の mysql について説明します。


2 番目の準備

mysql ソース プログラムを使用したインストール。インストール中に configura オプションが使用されるとします


./configure --prefix=/usr/local /mysql --datadir=/usr/local/mysql/data1 --sysconfdir= /ect 検索パスは /etc です

他の mysql インストール手順は省略します


Mysql 管理マニュアルによると、各 Mysql サービスは次のとおりです。独立しているため、すべて my.cnf 内の異なる起動オプションを呼び出します。これは、以下で説明する GNR 値であり、異なるポートを使用してそれぞれのソケット ファイルを生成し、サービス データベースは独立しています (詳細については、英語の管理ガイドを参照してください) mysql 公式 Web サイトのマニュアル)


mysqld_multi は、複数の mysqld サービス プロセスを管理するか、異なる UNIX ソケットを使用するか、異なるポートでリッスンします。現在のサービスの状態を開始、停止、監視できます。


----プログラムは、my.cnf (または --config-file でカスタマイズされた構成ファイル) 内の [mysqld#] セグメントを検索します。「#」には任意の正の整数を指定できます。この正の整数が後述するセグメント列、すなわちGNRである。セグメントのシリアル番号は、異なるセグメントを区別するための mysqld_multi のパラメータとして使用されるため、特定の mysqld プロセスの開始と停止を制御したり、そのレポート情報を取得したりできます。これらのグループのパラメータは、mysqld を起動するために必要なグループのパラメータとまったく同じです。ただし、複数のサービスを使用する場合は、サービスごとに Unix ソケットまたはポートを指定する必要があります (http://mifor.4dian.org からの抜粋: mysqld_multi プログラムを使用した複数の MySQL サービスの管理)。


上記のテキストから、複数の Mysql サービスの中で最も重要なのは my.cnf 構成ファイルであることがわかります。

ここで my.cnf ファイルを投稿します。----------- - ----------


[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld_safe

mysqladmin = /usr/local/mysql/bin/mysqladmin

user = mysql (同じアカウントが使用されるため、すべての mysql サーバーを起動するには 1 つのアカウントを使用します。その場合、このアカウントは各 mysql サービスで使用されるアカウント、できれば管理アカウントである必要があります。次のパスワードは同じです)

password = mypaswd


[mysqld1]

port = 3306

socket = /tmp/mysql.sock1

pid-file=/usr/local/mysql/data1/db-app1.pid

log=/usr/local/mysql/ data1/db-app.log

datadir = /usr/local/mysql/data

user = mysql


[mysqld2]

port = 3307

socket = /tmp/mys ql.sock2

pid-ファイル = /usr/local/mysql/data2/db-app2.pid

datadir = /usr/local/mysql/data2

log=/usr/local/mysql/data2/db-app.log

user = mysql


[mysqld3]

port = 3308

socket = /tmp/mysql.sock3

pid-file = /usr/local/mysql/data3/db-app3.pid3

datadir = / usr/local /mysql/data3

log=/usr/local/mysql/data3/db-app.log

user = mysql


[mysqld4]

port = 3309

socket = /tmp/mys ql

pid-file = /usr/local/mysql/data3/db-app4.pid

datadir = /usr/local/mysql/data4

log=/usr/local/mysql/data4/db-app.
user = mysql


[mysqldump]

速い

max_allowed_pa​​cket = 16M


[mysql]

自動再ハッシュなし


[isamchk]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 200 万

write_buffer = 2M


[myisamchk]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[mysqlhot] copy]

interactive-timeout

設定ファイルに mysqld1 があります。 mysqld2、mysqld3、mysqld4。つまり、同じサーバーの異なるポート (3306 ~ 3309) で 4 つの mysql サービスを開始します。各 datadir で指定されたデータベース ファイル パスは異なり、それぞれに独自の異なるログ ファイルがあります。他の設定では my.cnf の元のコンテンツを使用できます


重要な my.cnf はコンパイルされています。設定内に別の mysql サービス用に別のフォルダーと初期データベースを作成します

[mysqld1] がデフォルトです。 、mysql をインストールするときにすでに存在するため、心配する必要はありません


[mysqld2]、設定されたパスに従ってディレクトリを作成するだけで、ディレクトリは mysql 管理権限


db - に変更されます。 app:/ # mkdir /usr/local/mysql/data2


データベースを作成します。デフォルトの mysql データベースをコピーして他の mysql アカウントを使用できます。他のデータベースはアプリケーションに従って作成されます


db-app。 :/ # cp /usr/local/mysql/data1/mysql /usr/local/mysql/data2 -R

db-app:/ # chmod mysql.mysql /usr/local/mysql/data2 -R


[ mysqld3]、[mysqld4]、同じ


これらのディレクトリが存在するかどうかを確認します

db-app:/ # ls -l /usr/local/mysql/


drwxr-xr-x 6 mysql mysql 4096 4 月 9 日 17:54 data4

drwxr-x--- 2 mysql mysql 4096 4 月 9 日 17:14 data1

drwxr-xr-x 3 mysql mysql 4096 4 月 9 17:54 data2

drwxr-xr-x 3 mysql mysql 4096 4 月 9 日 17:54 data3


を mysqld_multi 経由で開始できるようになりました。


3 つ目は、mysqld_multi コマンドです。

次のパラメータを使用して mysqld_multi を起動します: (注: このコマンドは、上で説明したように、mysql の bin ディレクトリにあります。/configure --prefix=/usr/local/mysql なので、これはファイルは /usr/local/mysq/bin にある必要があります。これは、インストール時に指定したパスによって異なります)

db-app:/ # mysqld_multi [options] {start|stop|report} [GNR[,GNR]。 . .]


開始、停止、レポートは、実行したい操作を参照してください。オプションに続く GNR リストとは区別して、単一のサービスまたは複数のサービスに対する操作を指定できます。 GNR リストが指定されていない場合、mysqld_multi はすべてのサービスのオプション ファイルに従って動作します。


各GNRの値は、グループのシーケンス番号またはグループのシーケンス番号の範囲です。この項目の値は、グループ名の最後の数字である必要があります。たとえば、グループ名が mysqld17 の場合、この項目の値は 17 です。範囲を指定する場合は、「-」(ダッシュ) を使用して接続します。 2つの数字。 GNR の値が 10 ~ 13 の場合、グループ mysqld10 ~ グループ mysqld13 を参照します。コマンドラインでは複数のグループまたはグループ範囲を「,」(カンマ)で区切って指定できます。空白文字 (スペースやタブなど) を使用することはできません。空白文字に続くパラメータは無視されます。 (注: GNR 値は、my.cnf で定義した mysqld# の値です。ここでは 1 ~ 4 のみです)



db-app:/ # /usr/local/mysq/bin/mysqld_multi -- config-file=/etc/my.cnf start 1 は最初の mysql サービスのみを開始し、関連ファイルは my.cnf 内の mysql1 によって設定されます:/ # /usr/local/mysq/bin/ mysqld_multi -- config-file=/etc/my.cnf stop 1 最初の mysql サービスを開始および停止します


db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/ my.cnf start 1-4、1 番目から 4 番目の mysql サービスを開始します。これが実際にはここにあるすべてです


db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/ etc/my.cnf レポート 1-4


View スタートアップ:


db-app:/ # ps aux


root 10467 0.0 0.2 2712 1300 pts/0 S 18:59 0:00 /bin/sh / usr/local/mysql /bin/mysqld_safe --port=3306 --socket=/tmp/mysql.sock1

root 10475 0.0 0.2 2712 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local /mysql/bin/ mysqld_safe --port=3307 --socket=/tmp/mysql.sock2

root 10482 0.0 0.2 2716 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/mysql/ bin/mysqld_safe -- port=3308 --socket=/tmp/mysql.sock3

root 10487 0.0 0.2 2716 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3309 --socket=/tmp/mysql.sock4

... ...................................


4、クライアント アクセス

任意クライアント アクセスでは、指定されたデータベース サービスに入るためにアクセス ポートを指定する必要があります。それ以外の場合は、Mysql のデフォルト ポート (3306) によって提供される MYSQL が使用されます。

*********************************************** **********

パート 2、1 つのサーバー上に複数の mysql メイン サービスを構築します

*********************** ***********************************


ヒント: 以下のメイン専用のアカウントを作成します コピーからこの例で使用されているアカウント repl のパスワードは「1234567890」です。これにより、select_priv、reload_priv、process_priv、grant_priv、super_priv、repl_slave_priv、repl_client_priv 権限を持つことができ、任意の顧客、つまりアクセス顧客を通じてアクセスできます。は' %'。

主な目的は、my.cnf の内容を変更して、各 mysql が独自の bin-log ファイルと独自の動作環境を生成できるようにすることです。my.cnf のすべての内容を貼り付けます。mysql 公式を参照してください。関連するパラメーターのマニュアル。 mysql/bin/mysqld_safe

mysqladmin = /usr/local/mysql/bin/mysqladmin

user = mysql

password = mypasswd

[mysqld1]

port = 3306

socket = / tmp/mysql.sock1

スキップロック

pid-file=/usr/local/mysql/data/net-app1a.pid

datadir = /usr/local/mysql/data

log=/usr/local/mysql/data/net -app1.log

user = mysql

log-slow-queries=/usr/local/mysql/data/slowquery.log

long_query_time = 2

key_buffer = 256M

max_allowed_pa​​cket = 1M

テーブルキャッシュ = 512

sort_buffer_size = 2M

read_buffer_size = 2M

myisam_sort_buffer_size = 64M

thread_cache = 32

query_cache_size = 32M

thread_concurrency = 2

max_connections=500

ログビン

ログビン=/usr/local/ mysql/data/app -net1_1-bin

server-id=1 -app1b .pid

datadir = /usr/local/mysql/data2

log=/usr/local/mysql/data2/net-app1.log

user = mysql

log-slow-queries=/usr/local/mysql/data2/slowquery.log

long_query_time = 10

key_buffer = 128M

max_allowed_pa​​cket = 1M

table_cache = 512

sort_buffer_size = 1M

read_buffer_size = 1M

myisam_sort_buffer_size = 32M

thread_cache = 32

query_cache_size = 16M

thread_concurrency = 2

max_connections=300

ログビン

log-bin=/usr/local/mysql/data2/ app-net1_2-bin

server-id = 1


[mysqld3] 3Port = 3308

Socket = /TMP/Mysql.sock3

skip-Locking

Pid-file = /usr/local/mysql/data3 /net-pid

DataDir =/usr/local/mysql /data3

log=/usr/local/mysql/data3/net-app1.log

user = mysql

log-bin

log-bin= /usr/local/mysql/data3/app-net1_3-bin

server-id=1 ql/data1/app-net1d.pid

datadir = /usr/local/mysql/data1

log=/usr/local /mysql/data1/net-app1.log

user = mysql

log-bin

log-bin=/usr/local/mysql/data1/app-net1_4-bin

server-id = 1


[mysqldump]

速い

max_allowed_pa​​cket = 16M


[mysql]

自動再ハッシュなし

#SQL に慣れていない場合は、次のコメント文字を削除してください

#safe-updates


[isamchk]

key_buffer = 128M

sort_buffer_size = 128M

read _buffer = 2M

write_buffer = 2ま


[ myisamchk ]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[mysqlhotcopy]

interactive-timeout


************** **** *******


複数の mysql サービスの開始は同じです、

db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my .cnf 開始 1-4

****************************************** ************ *************

3 番目の部分、1 つのサーバー上に複数の mysql スレーブ サービスを構築します

******** **************** ********************************* *****

スレーブ サーバーの事前選択の準備を構築します。mysqld_multi を使用することをお勧めします。メイン サーバー上のすべての mysql を停止します。データベース ディレクトリを除くデータ ディレクトリ内のすべてのファイルを削除します (データベース ディレクトリには 4 つのデータ ディレクトリがあります)。この記事では、 datadir = data1 -- /usr/local/mysql/ の data1) .マスターとスレーブの両方が同じデータ ディレクトリ パスを使用します。

Tar コマンドを使用して各データベースをカプセル化し、sftp コマンドを通じてスレーブ サーバー (db-app1 192.168.0.101) に配置/取得します。


以下の操作は参考用です。アプリホスト

db-app:/ # tar -cf data1.tar /usr/local/mysql/data1

db-app:/ # tar -cf data2.tar /usr/local/mysql/data2

db- app:/ # tar -cf data3.tar /usr/local/mysql/data3

db-app:/ # tar -cf data4.tar /usr/local/mysql/data4


db-app1ホストでの操作


db-app1:/ # tar xvf data1.tar

db-app1:/ # tar xvf data2.tar

db-app1:/ # tar


同時に、システムアカウントがmysqlであるかどうかを確認してください。がマスター/スレーブ サーバーの mysql データ ディレクトリに対する操作権限を持っていることを確認できない場合は、これらのディレクトリの所有権を直接変更できます。

db-app ホストでの操作

db-app:/ # chown mysql.mysql /usr/local/mysql/data1 -R

db-app:/ # chown mysql.mysql /usr/local/mysql / data2 -R

db-app:/ # chown mysql.mysql /usr/local/mysql/data3 -R

db-app:/ # chown mysql.mysql /usr/local/mysql/data4 -R


db-app1 ホストでの操作

db-app1:/ # chown mysql.mysql /usr/local/mysql/data1 -R

db-app2:/ # chown mysql.mysql /usr/local/mysql/ data2 - R

db-app3:/ # chown mysql.mysql /usr/local/mysql/data3 -R

db-app4:/ # chown mysql.mysql /usr/local/mysql/data4 -R


以下サーバーからの /etc/my.cnf の内容全体です

ヒント: 以下の my.cnf にアカウントが記載されています: repl、パスワードは: '1234567890' です。このアカウントは上記で特別に作成されています。

実際、それらはすべて同じです。主なことは、my.cnf のコンテンツを変更して、各スレーブ mysql がメイン mysql の異なるポートを通じて独自の bin-log を取得して、自己生成されたデータベースを更新できるようにすることです。コンテンツ。次に、my.cnf のすべての内容を (サーバーから) 貼り付けます。関連するパラメーターについては、mysql 公式マニュアルを参照してください。 = / tmp/mysql.sock


[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld_safe

mysqladmin = /usr/local/mysql/bin/mysqladmin

user = mysql

パスワード = netmoniit

[mysqld1]

port = 3306

socket = /tmp/mysql.sock1

スキップロック

pid-file=/usr/local/mysql/data/net-app1a.pid

datadir = /usr /local/mysql/data

log=/usr/local/mysql/data/net-app1.log

user = mysql

log-slow-queries=/usr/local/mysql/data/slowquery。ログ

long_query_time = 2

key_buffer = 256M

max_allowed_pa​​cket = 1M

table_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

myisam_sort_buffer_size = 64M

thread_cache = 32

query_cache_size = 32M

thread_concurrency = 2

max_connections=500

server-id = 2

master-host = 192.168.0.100

マスターユーザー = 'repl'

マスターパスワード = '1234567890'

マスターポート = 3309

レポートホスト = net-app1

マスター接続再試行 = 30

ログ-bin

log-slave-updates



[mysqld2]

port = 3307

socket = /tmp/mysql.sock2

pid-file = /usr/local/mysql/data2/ネットアプリ1b。 pid

datadir = /usr/local/mysql/data2

log=/usr/local/mysql/data2/net-app1.log

user = mysql

log-slow-queries=/usr/local/mysql /data2/slowquery.log

long_query_time = 10

key_buffer = 128M

max_allowed_pa​​cket = 1M

table_cache = 512

sort_buffer_size = 1M

read_buffer_size = 1M

myisam_sort_buffer_size = 32M

thread_cache = 32

query_cache_size = 16M

thread_concurrency = 2

max_connections=300

server-id = 2

master-host = 192.168.0.100

master-user = 'repl' = '1234567890'

マスターポート= 3309

report-host = net-app1

master-connect-retry = 30

log-bin

log-slave-updates



[mysqld3]

port = 3308

ソケット = /tmp /mysql.sock3

pid-file = /usr/local/mysql/data3/net-app1c.pid

datadir = /usr/local/mysql/data3

log=/usr/local/mysql/data3/net -app1.log

user = mysql

log-slow-queries=/usr/local/mysql/data3/slowquery.log

long_query_time = 10

key_buffer = 128M

max_allowed_pa​​cket = 1M

テーブルキャッシュ = 512

sort_buffer_size = 1M

read_buffer_size = 1M

myisam_sort_buffer_size = 32M

thread_cache = 32

query_cache_size = 16M

thread_concurrency = 2

max_connections=300

サーバーID = 2

マスターホスト = 192.168.0.100

マスターユーザー = 「repl」

マスターパスワード = 「1234567890」

マスターポート = 3309

レポートホスト = net-app1

マスター接続リトライ = 30

ログビン

log-slave-updates


[mysqld3]

port = 3308

socket = /tmp/mysql.sock4

pid-file = /usr/local/mysql/data4/net-app1d.pid

データディレクトリ = /usr/local/mysql/data4

log=/usr/local/mysql/data4/net-app1.log

user = mysql

log-slow-queries=/usr/local/mysql/data4/slowquery。 log

long_query_time = 10

key_buffer = 128M

max_allowed_pa​​cket = 1M

table_cache = 512

sort_buffer_size = 1M

read_buffer_size = 1M

myisam_sort_buffer_size = 32M

thread_cache = 32

query_cache_size = 16M

thread_concurrency = 2

max_connections=300

サーバーID = 2

マスターホスト = 192.168.0.100

マスターユーザー = 'repl'

マスターパスワード = '1234567890'

マスターポート = 3309

レポート-host = net-app1

master-connect-retry = 30

log-bin

log-slave-updates



[mysqldump]

quick

max_allowed_pa​​cket = 16M


[mysql]

no-auto-rehash

#SQL に慣れていない場合は次のコメント文字を削除します

#safe-updates


[isamchk]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[myisamchk]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[my sqlhotcopy]

対話型タイムアウト


******* *** *************************************

これで完了したので、マルチプルを開始しますこのようにして、各マスター サービスの mysql のすべての変更が、スレーブ サーバーの対応するデータベースに自動的にコピー/更新されます。


db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4

db-app1:/ # /usr/local/mysq/ bin/mysqld_multi --config-file=/etc/my.cnf start 1-4


************************


Five 、今後のテスト、

次に、複数のマスターと 1 つのスレーブを備えた MySQL サーバーのレプリケーション ソリューションを作成したいと思います。誰かアドバイスをいただけますか? 構造は次のとおりです。

マスター サーバー サーバー A、サーバー B、およびスレーブ サーバー サーバー C があります。A と B は異なるデータベース アプリケーションを実行しているとします。サーバー C (これら 3 台の PC 上で mysql サービスが 1 つだけ実行されていると仮定します) には、サーバー A とサーバー B のすべての Mysql ユーザーと同じアクセス権が含まれており、マスター/スレーブ方式により A と B の 1 つの Mysql サービス C に統合されます。データベース。


これは、2 つのマスターサーバーの mysql を 1 つのスレーブサーバーにマージするようなものです。

【関連おすすめ】

1. Mysql の無料ビデオチュートリアル

2. Mysql サービスの開始と停止の方法を説明します

3. 4. mysql での特殊な SQL ステートメントの処理に関するチュートリアルの例

5. 異なるデータベース内のテーブルを削除する SQL ステートメントの作成方法の詳細な説明

以上が1 台のマシンで複数の MySQL サービスを実行する方法を説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。