ホームページ >データベース >mysql チュートリアル >1 台のマシンで複数の MySQL サービスを実行する方法を説明します。
************************************************ ***** *********
最初の部分、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_packet = 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_packet = 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_packet = 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_packet = 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_packet = 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_packet = 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_packet = 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_packet = 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_packet = 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 つのスレーブサーバーにマージするようなものです。
【関連おすすめ】
3. 4. mysql での特殊な SQL ステートメントの処理に関するチュートリアルの例
5. 異なるデータベース内のテーブルを削除する SQL ステートメントの作成方法の詳細な説明
以上が1 台のマシンで複数の MySQL サービスを実行する方法を説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。