web-dev-qa-db-ja.com

単一のUbuntuサーバーでMySQLの複数のインスタンスを実行する

Windowsサーバーでできるように、Ubuntuサーバーに複数のMySQLサーバーインスタンスをインストールすることは可能ですか?

目標は、1つのUbuntuサーバーに10個のMySQLサーバーインスタンスをインストールし、各MySQLサーバーに独自のポート番号とIPアドレスを割り当てることです。

3
Paulo do Porto

それは間違いなく可能です。 https://dev.mysql.com/doc/refman/5.7/en/multiple-unix-servers.html は良いリファレンスです。

代替#1:MySQLのリファレンスに基づく私の提案は、my.cnfの10コピーを作成し、それらを/etc/rc.localに追加することです。その場合は、monitなどのツールを使用して、インスタンスのステータスと稼働時間を監視することをお勧めします。 2つ目の方法は、既存の起動スクリプトを変更することです。

次のスクリプトはテストされていませんが、何を実行する必要があるかがわかります。それは10個のMySQLサーバーをループし、個別の設定をコピーし、個別のユーザーとデータディレクトリを作成し、ポート番号を3306から3317に増やします。必ずrc.localを経由してIPアドレスを目的のIPに変更してください。 rc.localを実行する前、またはサーバーを再起動する前。

また、これらのすべてのサーバーを一度に処理できるように、パフォーマンス使用率に関して適切な設定を構成してください。 SELinuxやAppArmorなどのACLと競合する可能性があります。このソリューションで問題が発生し、それを理解できない場合は、コメントを残してください。

mv /etc/rc.local /etc/rc.local.bak
printf '%s\n' '#!/bin/bash' > /etc/rc.local
chmod 0755 /etc/rc.local
cd /etc/mysql
port=3306
for i in {1..10}
do
   cp my.cnf my-${port}.cnf
   sed -i 's/socket.*/socket\=\/var\/run\/mysqld\/mysqld-${port}.sock/' my-${port}.cnf
   echo "mysqld_safe --defaults-file=/usr/local/mysql/my-${port}.cnf --bind-address=127.0.0.${i} --port=$port --datadir=/var/lib/mysql-${port} " >> /etc/rc.local
   useradd -d /nonexistent -s /bin/false -c "MySQL server listening on ${port}"
   mkdir -m 0700 /var/lib/mysql-${port}
   mysql_install_db --user=mysql --basedir=/var/lib/mysql-${port} --datadir=/var/lib/mysql-${port}/data
   port=$(expr $port + 1)
done
echo 'exit 0' >> /etc/rc.local
mv my.cnf my.cnf.bak
update-rc.d -f mysql remove

代替#2:https://dev.mysql.com/doc/refman/5.7/en/mysqldで説明されているようにmysqld_multiを使用します-multi.html

代替#3:非常に簡単でクリーンなソリューションは、Dockerをインストールし、ポートとIP番号が異なるMySQLで10個の個別のコンテナを実行することです。これらのオーバーライドはDockerfileで設定できます。

これが役に立てば幸いです!

2
William Sandin

コンテナー化またはタイプ2ハイパーバイザーを使用して、必要なもの(同じホスト上のmysqlの複数のインスタンス)を実現できます。私はあなたの場合 Dockerを使用して コンテナ化を提案します。

コンテナーに慣れていない場合は、コンテナーエンジン(ドッカー)ではなくハイパーバイザーを備えた軽量のVMと考えてください。

ただし、VMとは異なり、コンテナには完全なOSや必要なlib/binは必要ありません。同じLinuxカーネルとライブラリを、ホスト上で実行されている複数のコンテナ間で共有できます。これにより、コンテナ間の分離により、効率が向上し、場合によっては管理が容易になります。

ハイパーバイザと比較したアーキテクチャの概要は次のとおりです:architectural differences between VMs and Containers

1
Max Coates