SSLレプリケーション用のmysqlの構成(Debian、Ubuntu)

この記事は、安全な接続を使用してmysqlサーバー上でマスタースレーブレプリケーションを構成する必要がある人を対象としています。 必要が生じたとき、私はロシア語でレプリケーションのセットアップに関する情報が不足しており、sslを使用してこれを行う方法に関する情報がほぼ完全に不足していました。 最終的には、レプリケーションを上げることができました。 経験を共有し、リンクを開きたいです。

構成ファイルの例として指定されたインストールコマンドは、Debianに似たシステム(ubuntuを含む)に関係します。 他のディストリビューションでは、それらは異なる場合があります。 たとえば、「apt-get install」ではなく、RHおよびCentOSにプログラムをインストールするには、「yum install」と記述する必要があります。
この記事は、2009年8月から、ここで使用されているプログラムの開発者が何かを変更する瞬間まで関連しています。
Mysql-server-5.0、Ubuntu 8.04-9.04および対応するDebian。

準備作業-キーの作成


次に、レプリケーション自体を構成する方法について説明します。 接続のセキュリティが気にならない場合、この項目はあなたのためではありません。
マッスル設定ファイルでは、キーを作成するためにprog-tinikaを使用することが提案されています。

# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".

コマンドラインからキーを作成するには真のLinuxoidが必要ですが、私は彼の話を聞きました。 作業していない場合:

sudo apt-get install tinyca
sudo tinyca2


プログラムで必要なもの:
  1. CA証明書を作成します(共通名パラメーターをcacertに設定します)。 次に、サーバーとクライアントの証明書とキー(ペアで作成)を作成します(作成時に考えたCA証明書のパスワードを入力することを忘れないでください)。
  2. CA証明書およびサーバー証明書とクライアント証明書を、それぞれcacert.pem、my-server-cert.pemおよびmy-client-cert.pemという名前でPEM形式でエクスポートします。
  3. サーバーキーとクライアントキー( 、オプション、パスフレーズなし=はい、それ以外の場合、マッスルは証明書を復号化できないため、CA証明書パスワードが必要)をそれぞれmy-server-key.pemおよびmy-client-key.pemという名前のPEM形式にエクスポートします。
  4. 5つのファイルすべてに、所有者とグループの読み取り権、書き込み権を示します-与えないでください。 さて、筋肉が所有者またはグループのメンバーであることを確認してください。


言及されている順序で権利と所有者を変更するためのコマンド:

chmod 440 *.pem
chown root:mysql *.pem


CA証明書は作成者の証明書であり、サーバー証明書とクライアント証明書をバインドするために使用されます。 サーバーでは、証明書とサーバーキーが必要です。クライアントでは-証明書とクライアントキーが必要であり、両方で作成者の証明書-cacertが必要です。

マスターサーバーを構成する


(少なくとも)debianのようなシステムでは、コマンドはmy.cnfファイルで指定されます

!includedir /etc/mysql/conf.d/

これは、指定されたディレクトリのすべての構成ファイル(* .cnf)を含めるように指示します。 次の内容でreplica.cnfファイルを作成します。

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log
slave-compressed = 1
binlog-do-db = mydb
server-id = 1

# ssl params
ssl-ca=/etc/mysql/my-cacert.pem
ssl-cert=/etc/mysql/my-server-cert.pem
ssl-key=/etc/mysql/my-server-key.pem



レプリケーションのために接続を保護したい場合は、sslパラメーターを指定します。 以前に作成されたキーが示されます。 これらをmy.cnfの隣のマッスルフォルダーに配置する必要があります。 それらを/ etc / mysql / certs /フォルダーに配置しようとすると、「ファイルから証明書を取得できません...」などのエラーが発生しました。 おそらく他のフォルダの解決策があるかもしれませんが、私はそれらを探しませんでした。

体の動きが終わったら、筋肉に過負荷をかけ、筋肉に入り、見る必要があります

SHOW VARIABLES LIKE '%ssl%';

回答では、muxの場合、have_sslおよび/またはhave_opensslパラメーターの値はYESであり、他のすべての悪いケースではDISABLEDです(パラメーターがない場合、マッスルアセンブリがsslをサポートしていないことを示します)。 Yesが見つからなかった場合、ログにアクセスして理由を探します:/var/log/mysql.log、/var/log/mysql.err、/var/log / syslog、またはマッスルがログに記録するように設定されている場所に応じて他の場所システム上で。

また、別のレプリケーションユーザーを設定する必要があります。 これは、リクエストを実行することで解決されます。

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%.slave.domain' IDENTIFIED BY 'slave_password' require SSL

セキュリティが問題にならない場合は、「SSLが必要」という言葉を省略してください。 ドメイン名では、「%」は「* .cnf」エントリの「*」と同じように機能します。

ここで、データベースのテーブルを読み取る権利を同じユーザーに与える必要があります。

GRANT SELECT ON mydb.* TO 'slave_user'@'%.slave.domain' IDENTIFIED BY 'slave_password' require SSL

他のドックでは、SUPERまたはALLの権限も与える指示がありますが、私はこれをしませんでしたが、とにかく動作します。

データベースをスレーブに転送します


データベースダンプを作成する前に、トラブルを回避するためにテーブルをロックする必要があります。

USE mydb;
FLUSH TABLES WITH READ LOCK;


次に、ウィザードの状態を見てみましょう。

SHOW MASTER STATUS;

そして、ファイルと位置のフィールドの値を葉の上に書きます-それらはまだ有用です。 これらの値はそれぞれmysql-bin.000002と412でした。 ゼロで迷子にならないことが重要です:)

データベースをダンプしましょう:

mysqldump -u slave_user -pslave_password --opt mydb > mydb.sql

スレーブに小さな権利を与えたという事実のため、このコマンドはscることができます(私はそれを試しませんでした、 webminを通してダンプしました)。 この場合、ユーザーに権限を追加するか、別のユーザーからダンプします。

最後に、テーブルのロックを解除します。

UNLOCK TABLES;

そして、ダンプをサーバースレーブに書き換えます。

クライアントを接続する


クライアント/スレーブサーバーでは、データベースにデータを入力する必要があります。

mysql -u root -p
[create database mydb]
[use mydb]
source /path/to/mydb.sql
exit


角括弧内-スクリプトmydb.sqlにデータベースを作成するコマンドが既にある場合に実行するオプションのコマンド。

他の指示で書かれていますが、私はユーザーslave_userを作成せず、クライアントサーバーに対する権限を与えませんでした。 その場合-クリックで記事の最後にリンクします。

次に、ファイル/etc/mysql/conf.d/replica.cnfを作成します

[mysqld]
server-id = 2

[client]
# ssl params
ssl-ca=/etc/mysql/my-cacert.pem
ssl-cert=/etc/mysql/my-client-cert.pem
ssl-key=/etc/mysql/my-client-key.pem


2番目のクライアント部分は、安全な接続用です。 主なことは、指定したフォルダに以前に作成したキーを置くことを忘れないことです。

筋肉をオーバーロードし、筋肉に入り、一連のコマンドを実行します。

SLAVE STOP;

CHANGE MASTER TO
MASTER_HOST='master.host.ru',
MASTER_USER='slave_user',
MASTER_PASSWORD='slave_password',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=412,
MASTER_CONNECT_RETRY=30,

MASTER_SSL = 1,
MASTER_SSL_CA = '/etc/mysql/my-cacert.pem',
MASTER_SSL_CERT = '/etc/mysql/my-client-cert.pem',
MASTER_SSL_KEY = '/etc/mysql/my-client-key.pem'

START SLAVE;




現時点では、レプリケーションはすでに動作しているはずです:)
サーバー上のデータを変更して確認してください。 ほとんどすぐに(数秒の差)、クライアントで変更する必要があります。 変わらない場合は、ログを参照して理由を探します。 または、他のドックを読む:

うまくいかなかった場合


この記事では、自分のサーバーでレプリケーションをどのように上げたかについて説明します。 おそらく、構成の違いやその他の理由により、すべてを機能させることはできません。 それから私は私を助けたリソースへのリンクを残すことができます。

http://www.opennet.ru/tips/info/1696.shtml-ロシア語、SSLなしで、コメントを読むことを忘れないでください(有用なものがあります)
http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html-ロシア語、SSLなし、ヨーロッパ中を疾走
http://dibaliklayar.blogspot.com/2006/10/replication-of-mysql-50-using-ssl.html-英語、sslで、額を折ってから見つけたので注意せずに読んだ

脅威。 はい、レプリケーション設定のかなり詳細で有用な説明をここで見つけました。 SSLはありませんが、興味深いことがたくさんあります。

2番目のオプション-コメントで質問してください。そうでない場合は、他のhabraluksが教えてくれます。 見て、それは動作します。
説明や発言がある場合-私もあなたに書くように頼みます、私はそれがなくても動作しますが、なぜいくつかのものが必要か疑問に思います。

Source: https://habr.com/ru/post/J72925/


All Articles