Duomenų replikavimas

Tikslas kaupti duomenis atsarginiame serveryje su tikslu pasiekti juos net ir tada, kai jėgainės duomenys nepasiekiami. Jėgainės MySQL master serveris kaupia duomenis replikavimui. Juos pasiima centrinis slave serveris. Slave serveris bus defas.lt MySQL serveris. Patikrinkime abejų serverių id. Jie turi būti skirtingi. Aprašomas my.cnf faile MySQL serverio atveju.

[mysqld]
server-id=2

ir MariaDB MySQL serverio versijos atveju server-id užduodamas serverio paleidimo komandinėje eilutėje:

/usr/local/mysql/bin/mysqld_safe --datadir=/home/mysql/ --server-id=2 --pid-file=/var/run/mysql/mysql.pid &

server-id sužinoti galima komanda:

SELECT @@server_id

defas.lt serveris grąžina reikšmę 2, jėgainės serveris reikšmę 1.

MySQL aprašyme reikalauja, kad keli naudojami slave serveriai privalo turėti skirtingus server-id. Galbūt master ir slave gali turėti tuos pačius? Reikėtų pabandyti.

Slave serveryje nurodome, master konfigūraciją komanda:

CHANGE MASTER TO 
MASTER_HOST='90.140.218.158', 
MASTER_USER='replika', 
MASTER_PASSWORD='replika', 
MASTER_LOG_FILE='recorded_log_file_name', 
MASTER_LOG_POS=recorded_log_position;

Pastaba: pasikeitus IP adresui, šią komandą turėsime pastoviai perleidinėti. Tai atliks ActivateFactory() funkcija:

Function ActivateFactory() {
 if (isset($_REQUEST['AJIP'])) {
  $_SESSION['AJIP']=$_REQUEST['AJIP'];
  $this->server2=$_REQUEST['AJIP'];
  $this->query_to_res("stop slave");
  $this->query_to_res("CHANGE MASTER TO   MASTER_HOST='".$_REQUEST['AJIP']."',MASTER_USER='replika',MASTER_PASSWORD='replika',MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=recorded_log_position;");
  $this->query_to_res("start slave");
 }
}

Padarome DB vejojegaines duomenų kopiją slave serveryje: konfigūraciją komanda:
mysqldump -u vejojegaines -p vejojegaines>20181209.sql

FPT perduodame gautą failą į defas.lt serverį. Po to sukuriame defas.lt serveryje DB Duomenys ir komandine eilute sukeliame duomenis iš sql failo.

mysql -u arturas -p vejojegaines<20181209.sql

Taigi: jėgainės serveryje redaguojame /etc/mysql/mycnf failą:

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
binlog_do_db            = vejojegaines

Naujai paleidžiame serverį: sudo service mysql restart

Paleidus slave serverį gaunamas klaidos pranešimas: Master command COM_REGISTER_SLAVE failed: Access denied for user ‘replika’@’%’ (using password: YES) (Errno: 1045). Taisome problemą resetindami slave serverį mysql’inėmis komandomis: reset slave; stop slave; start slave;

Taip pat suteikiame replikavimo teises replika vartotojui master serveryje. Tą padaryti galima su root/root mysql vartotoju:

GRANT REPLICATION SLAVE ON *.* TO replika identified by 'replika';
flush privileges;

Parašykite komentarą