Replikace dat zdrojové repliky umožňuje kopírovat replikovaná data do více počítačů pro zálohování a analýzu více stranami. Nezbytné změny identifikované členem skupiny byste měli odeslat určenému primárnímu uzlu. To se liší od zdrojové replikace, ve které může aktualizovat data každý autorizovaný přispěvatel skupiny.
Tento článek obsahuje kroky pro nastavení replikace databáze zdrojové repliky MySQL® mezi dvěma cloudovými servery. Operační systém použitý v příkladech v článku je CentOS® 6, vytvořený ze základního obrazu Rackspace CloudServers.
Než začnete
Kroky v tomto článku používají dva cloudové servery, db01
a db02
.Cloud servery mají dvě IP adresy (jedna veřejná, jedna soukromá). Příklady demonstrují konfiguraci replikace přes soukromé IP rozhraní tak, aby nevznikaly žádné poplatky za šířku pásma. Po dobu trvání článku db01
je považován za zdroj Server MySQL (s režimem čtení i zápisu) a db02
je považován za repliku server (běží v režimu pouze pro čtení).
Pokud již máte databázi MySQL spuštěnou na zdrojovém uzlu, je před konfigurací replikace mezi nimi vyžadován výpis a obnovení do uzlu repliky. Používáte mysqldump
příkaz k výpisu databáze do souboru, poté ji přeneste a obnovte do repliky. Po provedení nezbytné konfigurace je replikace neúčinná. Další informace naleznete v části Konfigurace replikace.
Vytvoření cloudových serverů
Vytvořte dva cloudové servery Linux® pomocí základního obrazu Centos 6. Pomocí následujících kroků vytvořte každý server samostatně.
- Přihlaste se do Cloud Control Panel.
- V horní navigační liště klikněte na Vybrat produkt pak Rackspace Cloud .
- Vyberte Servery pak Cloudové servery .
- Klikněte na Vytvořit server .
- Pojmenujte servery, abyste je během nastavování snadno identifikovali.
- Vyberte základní obrázek Centos 6.
- Vyberte konfiguraci RAM (příchuť) vhodnou pro požadavky vaší databáze.
- Klikněte na Vytvořit server .
Příkazy nastíněné v následujících částech musí provádět privilegovaný uživatel root nebo uživatel skupiny sudo. Jakékoli řetězce nebo hodnoty specifikované v závorkách by měly být nahrazeny daty specifickými pro vaše nastavení.
Instalovat MySQL
Musíte nainstalovat server mysql balíček na obou cloudových serverech CentOS.
-
Před instalací MySQL ověřte, že je databáze balíčků aktuální spuštěním následujícího příkazu:
#yum update
-
Nainstalujte MySQL a povolte jeho automatické spouštění při bootování:
#yum install mysql-server #chkconfig mysqld on
-
Spusťte
mysqld
služba:#service mysqld start
-
Za
mysqld
služba byla spuštěna, nastavte heslo kořenového adresáře serveru MySQL pomocí následujících příkazů:/usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h web01 password 'new-password'
Poznámka :Případně můžete spustit skript zabezpečené instalace přibalený k instalaci MySQL:
# /usr/bin/mysql_secure_installation Enter current password for root (enter for none): ... Set root password? [Y/n] Y ... Remove anonymous users? [Y/n] Y ... Disallow root login remotely? [Y/n] Y ... Remove test database and access to it? [Y/n] Y ... Reload privilege tables now? [Y/n] Y
-
Chcete-li povolit připojení na portu 3306 (
mysqld
výchozí port), přidejte pravidlo TCP portu 3306 s vložením na poslední číslo řádku vRH-Firewall-1-INPUT
řetězec (v tomto případě řádek 10):# iptables -I RH-Firewall-1-INPUT 10 -p tcp --dport 3306 -j ACCEPT
-
Uložte konfiguraci brány firewall:
# service iptables save
Chcete-li provést příslušné změny konfigurace, abyste povolili replikaci, vyplňte následující část.
Konfigurace replikace
Na zdrojovém serveru je vyžadován uživatel MySQL (db01
), který má být použit pro replikaci.
-
Spusťte následující příkazy pro nastavení uživatele MySQL a aktualizujte položky v hranatých závorkách řetězci nebo hodnotami, které plánujete použít při nastavení:
Poznámka: Možná nebudete muset vytvořit uživatele v následujícím kódu.
# mysql -u root -p mysql> create user [replication_username]@'[private IP of db02]' identified by '[some password]'; mysql> grant replication slave on *.* TO [replication_username]@'[private IP of db02]'; mysql> flush privileges; mysql> quit
-
Upravte soubor /etc/my.cnf a přidejte následující položky:
bind-address = 0.0.0.0 server-id = 1 log-bin = mysql-bin binlog-ignore-db = "mysql"
-
Po dokončení aktualizace /etc/my.cnf restartujte
mysqld
službu.#service mysqld restart
Před zahájením replikace musí být data na zdrojovém a replikačním serveru stejná. Chcete-li provést tuto duplikaci, vypište data ze zdroje (
db01
) server a přidejte jej do thereplica (db02
) server. -
Pomocí následujícího příkazu zajistěte, aby během výpisu databáze nemohlo nic zapisovat do zdrojové databáze. Všimněte si také názvu souboru a umístění binárního protokolu, protože tyto hodnoty potřebujete k dokončení konfigurace replikace na db02:
# mysql -u root -p mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; +------------------+--------------------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+--------------------------+------------------+ | mysql-bin.000010 | 10 | | mysql | +------------------+--------------------------+------------------+ 1 row in set (0.00 sec)
Poznámka 1: Zaznamenejte si název souboru a pozici binárního protokolu, protože tyto hodnoty potřebujete k dokončení konfigurace replikace na
db02
.Poznámka 2: Nechte tuto relaci otevřenou, její uzavření uvolní zámek!
-
Proveďte výpis databáze pomocí
mysqldump
takto:# mysqldump -u root -p --databases [database-1] [database-2] ... > /root/db_dump.sql
-
Po dokončení výpisu databáze zrušte zámek čtení ze zdroje (
db01
) zadáním následujícího příkazu nebo ukončením otevřené relace:mysql> UNLOCK TABLES;
-
Zkopírujte soubor výpisu databáze na replikační server, aby jej bylo možné obnovit pomocí následujícího příkazu:
scp /root/db_dump.sql [private-IP-of-db02]:/root/
-
Na
db02
, upravte soubor /etc/my.cnf soubor a přidejte následující položky:bind-address = 0.0.0.0 server-id = 2 master-host = [private-IP-of-db01] master-user = [replication-username] master-password = [replication-password] master-connect-retry = 60
-
Importujte soubor db_dump.sql soubor zkopírovaný dříve a restartujte službu MySQL.
# mysql -u root -p < /root/db_dump.sql # service mysqld restart
-
Dokončete kroky replikace repliky:
# mysql -u root -p mysql> SLAVE STOP; mysql> CHANGE MASTER TO MASTER_HOST='[private-IP-of-db01]', MASTER_USER='[replication-username]', MASTER_PASSWORD='[replication-password]', MASTER_LOG_FILE='[file-listed-on-master-status]', MASTER_LOG_POS=[log-position-listed-on-master-status]; mysql> START SLAVE; mysql> SHOW SLAVE STATUS\G
Poznámka: Slave_IO_State pole by mělo zobrazovat „Čekání na hlavní událost k odeslání“. Pokud se zobrazí „Connecting to Master“, zkontrolujte soubor protokolu MySQL. Ve výchozím nastavení je /var/log/mysqld.log ,ale může být ve vašem systému nakonfigurován jinak. Jako vždy /etc/my.cnf definuje umístění vašeho souboru protokolu.
Test replikace
Chcete-li otestovat nastavení replikace, vytvořte novou databázi a přidruženou tabulku na db01
a vložte data, abyste potvrdili, že změny jsou zrcadleny na db02
. V následujícím příkladu se nová databáze jmenujetestování a nová tabulka se jmenuje uživatelé :
# mysql -u root -p
mysql> create database testing;
mysql> use testing
mysql> create table users(id int not null auto_increment, primary key(id), username varchar(30) not null);
mysql> insert into users (username) values ('foo');
mysql> insert into users (username) values ('bar');
mysql> exit
Změny byste měli vidět na db02
okamžitě.