5

同じマシンに 2 つの mysql インスタンスがあります。インストールは /usr/loca/mysql1 および /usr/local/mysql2 にあります。

/etc/mysql1 と /etc/mysql2 に別々の my.cnf ファイルがあります。ソース配布と --prefix=/usr/local/mysql1 オプションを使用して、SQL の最初のインスタンスをインストールしました。2 つ目は、同じディレクトリを /usr/local/mysql2 にコピーして貼り付けたものです。

/usr.local/mysql/libexec で mysql デーモンを起動すると、/etc/mysql1 の my.cnf ファイルが読み込まれます。/usr/local/mysql2 で mysql デーモンを起動すると、同じ my.cnf ファイルが読み込まれます。これら 2 つの場所の .cnf ファイルで定義された個別のポート番号と .sock ファイルがあります。

mysqld の起動時に --defaults-file=/etc/mysql2/my.cnf オプションを使用して、2 番目の場所にある my.cnf ファイルを読み取ることができます。デーモンを起動するたびにこれを入力する必要はありません。

より多くのインスタンスを作成する場合、正しい my.cnf ファイルを指定して、すべての mysql デーモンを読み取るにはどうすればよいでしょうか。my.cnf ファイルとの mysqld リンクの背後にある理由は何ですか。

各インスタンスの my.cnf ファイルの場所を事前に定義する方法を教えてください。

4

2 に答える 2

7

すでに発見したように、MySQL には構成ファイル用のコンパイル済みの検索場所があります。これを変更して自分で再コンパイルすることもできますが、まったく異なる構成パスを使用するように指示するmysqldの--defaults-fileオプションも発見しました。--data-dirと組み合わせると、これは、異なるポート (および必要に応じてアドレス) にバインドされた MySQL の複数のインスタンスを開始し、同じバイナリとライブラリを操作しながら、完全に別個のデータ セットを操作できることを意味します。

従来、ほとんどのオペレーティング システムのディストリビューションには、MySQL の「デフォルト」インスタンスを開始するための単一の init スクリプトがバンドルされています。つまり、「通常の」場所にインストールされ、標準の構成パスを持つものです。これは最も一般的なケースに対応するためのものですが、目的は少し異なるため、個別のインスタンスを起動するために個別のスクリプトを作成する必要があります。

同じマシンに多数の MySQL インスタンスを展開する予定がある場合 (その理由を尋ねる必要があります)、これらのそれぞれを「検出」する何らかの方法を備えたカスタムの init スクリプトを作成することをお勧めします (おそらく「一般的な」レイアウトを含むいくつかのディレクトリを検査することによって)、それらをループして、それぞれを開始します。もちろん、同じ init スクリプトがそれぞれを見つけて適切にシャットダウンできる必要があります。

于 2011-01-08T14:26:29.250 に答える
0

唯一確実な方法は、プレフィックス オプションを使用してソースからコンパイルすることだと思います。それか、 --defaults-file オプションで mysql2 を起動する bash スクリプトを作成し、代わりにそれを使用して起動します。

ただし、あなたが行った方法で別のインストールを「作成」するのは良くありません。パッケージをコンパイルすると、PREFIX が実行可能ファイルにハードコードされます。そのため、リソースを探すときは常に、コマンド ライン オプションで指示されない限り、そのプレフィックスから開始します。

だから、もし私があなたなら、ソースから新しい接頭辞で再コンパイルするだけです.

于 2011-01-08T14:18:44.277 に答える