私はデータベースにかなり慣れていないので、これがばかげた質問ではないことを願っています!
同じサーバーでマスター/スレーブ複製を設定することは可能ですか?
ハードウェアの利用/回復の目的の点でこれには利点がないことを理解していますが、このように設定すると、開発中のソフトウェアのテストに役立ちます。
可能ですが、なぜでしょうか。 MySQLの2つのインスタンスを実行する必要があります。 1つはマスター、2つ目はスレーブになります。
詳細な手順については、これを確認してください https://dev.mysql.com/doc/refman/5.5/en/multiple-servers.html
UPDATE:
通常、これにはVagrantを使用します。マスター+スレーブを設定するコードを以下に示します。
Vagrantfile:
Vagrant.configure(2) do |config|
config.vm.define "db01" do |db01|
db01.vm.box = "bento/centos-6.7"
db01.vm.hostname = "db01"
db01.vm.provision :Shell, path: "bootstrap-master.sh"
db01.vm.network "private_network", ip: "192.168.50.101"
db01.vm.synced_folder "../", "/home/vagrant/src/twindb"
end
config.vm.define "db02" do |db02|
db02.vm.box = "bento/centos-6.7"
db02.vm.hostname = "db02"
db02.vm.provision :Shell, path: "bootstrap-slave.sh"
db02.vm.network "private_network", ip: "192.168.50.102"
db02.vm.synced_folder "../", "/home/vagrant/src/twindb"
end
bootstrap-master.sh
#!/usr/bin/env bash
set -e
hostname="`hostname`"
yum -y install https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
packages="
mysql-community-server"
yum -y install ${packages}
chkconfig mysqld on
function wait_for_mysql() {
# wait till mysql starts
timeout=300
mysql_started="NO"
while [ ${timeout} -gt 0 ]
do
if ! [ "`mysql -e 'SELECT 1'`" = "1" ]
then
echo "SUCCESS"
break
fi
sleep 1
let timeout=$timeout-1
done
}
cat <<EOF > /etc/my.cnf
[mysqld]
server_id=101
log_bin=mysqld-bin
EOF
/etc/init.d/mysqld start
if [ "`wait_for_mysql`" = "SUCCESS" ]
then
mysql -u root -e "RESET MASTER"
mysql -u root -e "CREATE USER 'replication'@'%' IDENTIFIED BY 'bigs3cret'"
mysql -u root -e "GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'"
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO root@'%'";
else
echo "MySQL failed to start"
exit -1
fi
bootstrap-slave.sh
#!/usr/bin/env bash
set -e
hostname="`hostname`"
yum -y install https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
packages="
mysql-community-server"
yum -y install ${packages}
chkconfig mysqld on
function wait_for_mysql() {
# wait till mysql starts
timeout=300
mysql_started="NO"
while [ ${timeout} -gt 0 ]
do
if ! [ "`mysql -e 'SELECT 1'`" = "1" ]
then
echo "SUCCESS"
break
fi
sleep 1
let timeout=$timeout-1
done
}
cat <<EOF > /etc/my.cnf
[mysqld]
server_id=102
log_bin=mysqld-bin
EOF
/etc/init.d/mysqld start
if [ "`wait_for_mysql`" = "SUCCESS" ]
then
mysql -u root -e "RESET MASTER"
mysql -u root -e "CHANGE MASTER TO
MASTER_Host='192.168.50.101',
MASTER_USER='replication',
MASTER_PASSWORD='bigs3cret',
MASTER_LOG_FILE='mysqld-bin.000001',
MASTER_LOG_POS=120"
mysql -u root -e "START SLAVE"
else
echo "MySQL failed to start"
exit -1
fi
ローカルマシンでテスト目的でレプリケーションをセットアップする最良の方法は、MySQLサンドボックスを使用して、複数のマスタースレーブと異なるレプリケーション方式を非常に簡単にセットアップおよび管理することです。
多くの場合、開発者は1台のマシンだけで作業し、そのマシン上に開発環境全体を持っています。この種の開発環境に変更をデプロイする前にデータベースレプリケーションをテストすることは、困難な作業になる可能性があります。この記事では、Toptalエンジニア Ivan Bojovic が、同じマシンに MySQLマスター/スレーブレプリケーション を実装する方法をステップバイステップで説明します。