1つのLinuxサーバーで複数のmysqlサーバーを実行するなどの問題を解決する別の方法を共有したいと思います。 皆さんの中には、たとえば次のように手を走らせてこれをやろうとしている人もいると思います。
mysqld_safe --defaults-file=...my2.cnf... &
そのような実行中のmysqlサーバーを正しく完了することが常に可能とは限らないという理由だけで、このアプローチは完全に正しいとは思いません。 もちろん、引き続き
mysqld_multiを使用できますが、個人的には、インスタンスを相互に完全に「分離」することを好みます。 そのため、出版物で初期化システムを使用することをお勧めします。
指定:OS Linux CentOS 6.5。 MySQLサーバーまたはその派生物(Perconaなど)のインストール方法については説明しませんが、すぐに説明します。 配信、立ち上げ。
[root@localhost /]
root 8455 0.0 0.2 5064 1344 pts/0 S 01:36 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 8566 0.0 3.0 135476 15328 pts/0 Sl 01:36 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306
サーバーが起動し、すべてが機能します。
my.cnfで特に指定されていない限り、すべてのオプションはデフォルトです。
次に、2番目のインスタンスを開始しましょう。 2番目のベースの場所を作成します。
mkdir /var/lib/mysql2 && chown -R mysql:mysql /var/lib/mysql2
ログを保存するには:
mkdir /var/log/mysql2 && chown -R mysql:mysql /var/log/mysql2
2番目のインスタンスのデフォルト構成ファイルをコピーします。
cp /etc/my.cnf /etc/my2.cnf
/ var / runの別のディレクトリを見てみましょう:
mkdir /var/run/mysqld2 && chown -R mysql:mysql /var/run/mysqld2
my2.cnfを修正し、initスクリプトを/etc/init.d/に追加して、新しいインスタンスを適切に管理します 。
/etc/my2.cnfを編集します。
[mysqld] bind-address=127.0.0.1 port=3307 datadir=/var/lib/mysql2 socket=/var/lib/mysql2/mysql2.sock user=mysql
構成ファイルの違いは何ですか:
[root@localhost mysqld2]
最後に、2番目のサーバーを起動するためのinitスクリプトを準備します。 ここから楽しみが始まります:
cp /etc/init.d/mysqld /etc/init.d/mysqld2
/etc/init.d/mysqld2ファイルの個々の行を開いて編集します。
1)まず、
get_mysql_option()関数をコメントアウト(または削除)して、mysqld_safeのデフォルト値を
無視しないようにする必要があります。
2)将来の使用についてもコメントし、新しいインスタンスの一意のパスとディレクトリを必要な変数に書き込みます。
3)最後の仕上げ:start()関数で、mysqld_safeに
個別の構成ファイルを使用してログを個別のフォルダーに書き込むように明示的に指示します。 これを行うには、次の行をほぼこのフォームに追加します。
$exec --defaults-file=/etc/my2.cnf --datadir="$datadir" --socket="$socketfile" \ --pid-file="$mypidfile" --log-error=/var/log/mysql2/mysqld.log \ --basedir=/usr --user=mysql >/dev/null 2>&1 &
保存します。 /etc/init.d/mysql2 startを実行して開始します。 停止:/etc/init.d/mysql2 stop。 検証:
[root@localhost run]
最後に、クライアントを使用して、ソケットファイルを明示的に指定して2番目のMySQLサーバーに接続します。
mysql -S /var/lib/mysql2/mysql2.sock
...そして、すべてがうまくいったことがわかります。
ご清聴ありがとうございました。
PS 2番目のデータベースのディレクトリで、最初にデフォルトのデータベースを使用して
/ var / lib / mysqlからコピーするか、
mysql_install_dbを使用して再作成するか、既存の
データベース(Percona XtraBackupによって作成されたバックアップなど)を使用
できます 。 最も重要なことは、データベースファイルに対する正しいユーザー所有者(
mysql )です。