web-dev-qa-db-ja.com

同じ上のMySQLマスター/スレーブレプリケーションVMインスタンス?

私はデータベースにかなり慣れていないので、これがばかげた質問ではないことを願っています!

同じサーバーでマスター/スレーブ複製を設定することは可能ですか?

ハードウェアの利用/回復の目的の点でこれには利点がないことを理解していますが、このように設定すると、開発中のソフトウェアのテストに役立ちます。

5
Stephen91

可能ですが、なぜでしょうか。 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
6
akuzminsky

ローカルマシンでテスト目的でレプリケーションをセットアップする最良の方法は、MySQLサンドボックスを使用して、複数のマスタースレーブと異なるレプリケーション方式を非常に簡単にセットアップおよび管理することです。

http://mysqlsandbox.net/

0
Mahesh Patil

多くの場合、開発者は1台のマシンだけで作業し、そのマシン上に開発環境全体を持っています。この種の開発環境に変更をデプロイする前にデータベースレプリケーションをテストすることは、困難な作業になる可能性があります。この記事では、Toptalエンジニア Ivan Bojovic が、同じマシンに MySQLマスター/スレーブレプリケーション を実装する方法をステップバイステップで説明します。

0
Dmitry Pavlov