Erinevus lehekülje "Mysql Replication" redaktsioonide vahel
(ei näidata sama kasutaja 28 vahepealset redaktsiooni) | |||
1. rida: | 1. rida: | ||
− | + | ===Sissejuhatus=== | |
− | |||
− | + | TODO | |
+ | ===Master to Slave replikeerimine=== | ||
+ | Replikeerime ühe töötava mysql serveri sisu teise | ||
+ | Esimene '''master''' sever 192.168.1.1 | ||
− | |||
ja teine '''backup''' 192.168.1.2 | ja teine '''backup''' 192.168.1.2 | ||
− | + | ====Master serveri conf==== | |
− | |||
− | |||
− | |||
− | |||
− | ===Master serveri conf=== | ||
my.cnf | my.cnf | ||
28. rida: | 24. rida: | ||
mysql> GRANT REPLICATION SLAVE, SUPER, RELOAD, SELECT ON *.* TO 'user_name'@'192.168.1.2' IDENTIFIED BY 'parool'; | mysql> GRANT REPLICATION SLAVE, SUPER, RELOAD, SELECT ON *.* TO 'user_name'@'192.168.1.2' IDENTIFIED BY 'parool'; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
logime mysql'i | logime mysql'i | ||
+ | mysql> FLUSH TABLES WITH READ LOCK; | ||
mysql> show master status; | mysql> show master status; | ||
+----------------+----------+--------------+------------------+ | +----------------+----------+--------------+------------------+ | ||
44. rida: | 36. rida: | ||
1 row in set (0.00 sec) | 1 row in set (0.00 sec) | ||
+ | jätame meelde ServerA.000024 ja 136208 | ||
+ | |||
+ | # mysqldump -u root -pyourrootsqlpassword --opt exampledb > snapshot.sql | ||
+ | # scp snapshot.sql root@192.168.0.101:/tmp | ||
+ | |||
+ | Seejärel: | ||
+ | |||
+ | > UNLOCK TABLES; | ||
+ | > quit; | ||
− | + | ====Slave serveri konf==== | |
− | == | + | # /usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave |
+ | # mysql -u root -p my_database </home/my_home_dir/database.sql | ||
+ | |||
+ | server-id=2 | ||
+ | master-host=192.168.0.100 | ||
+ | master-user=slave_user | ||
+ | master-password=secret | ||
+ | master-connect-retry=60 | ||
teeme mysql'is sellise käsu | teeme mysql'is sellise käsu | ||
− | mysql> change master to | + | mysql> change master to |
− | |||
− | |||
-> master_log_file='ServerA.000024', | -> master_log_file='ServerA.000024', | ||
-> master_log_pos=136208; | -> master_log_pos=136208; | ||
63. rida: | 69. rida: | ||
kui replikatsioon peaks mingil juhul katkema saab seda uuesti startida käsuga | kui replikatsioon peaks mingil juhul katkema saab seda uuesti startida käsuga | ||
− | |||
mysql> change master to master_log_file='ServerA.000024', master_log_pos=136208; | mysql> change master to master_log_file='ServerA.000024', master_log_pos=136208; | ||
− | logi nimi ja pos tuleb | + | logi nimi ja pos tuleb taaskord masterist vaadata |
− | |||
kontrollime backupis kas ühendus on saavutatud kahe serveri vahel | kontrollime backupis kas ühendus on saavutatud kahe serveri vahel | ||
− | |||
mysql> SHOW SLAVE STATUS \G | mysql> SHOW SLAVE STATUS \G | ||
111. rida: | 114. rida: | ||
− | rida Slave_IO_State: Waiting for master to send event | + | rida '''Slave_IO_State: Waiting for master to send event''' |
näitab ,et kõik on läinud nagu vaja ja slave ootab master'ilt infot | näitab ,et kõik on läinud nagu vaja ja slave ootab master'ilt infot | ||
+ | ===Multimaster replikatsioon=== | ||
+ | |||
+ | Vajalik oleks samas sageli ,et replikatsioon toimuks automaatselt mõlemas suunas. | ||
+ | Nii ,et muudatusi saaks teha mõlemas serveris baasi. | ||
+ | |||
+ | Serverid '''192.168.1.1''' ja '''192.168.1.2''' | ||
+ | On siin näites mõlemad nii master kui slave rollis | ||
+ | |||
+ | [[Pilt:Circular 2nodes.jpg.png]] | ||
+ | |||
+ | Esimene server 192.168.1.1 my.cnf | ||
+ | |||
+ | [mysqld] | ||
+ | |||
+ | server-id = 10 | ||
+ | auto_increment_increment = 10 | ||
+ | auto_increment_offset = 1 | ||
+ | master-host = 192.168.1.1 | ||
+ | master-user = kasutaja | ||
+ | master-password = parool | ||
+ | |||
+ | log-bin = mysql-bin | ||
+ | relay-log = relay-log | ||
+ | relay-log-index=relay-log-index | ||
+ | |||
+ | Mysql käsureal lubame mysql ligipääsu serveril 192.168.1.2 | ||
+ | |||
+ | GRANT REPLICATION SLAVE, SUPER, RELOAD, SELECT ON *.* TO 'user_name'@'192.168.1.2' IDENTIFIED BY 'parool'; | ||
+ | |||
+ | masin 192.168.1.2 my.cnf | ||
+ | |||
+ | [mysqld] | ||
+ | |||
+ | server-id = 20 | ||
+ | auto_increment_increment = 10 | ||
+ | auto_increment_offset = 2 | ||
+ | master-host = 192.168.1.2 | ||
+ | master-user = kasutaja | ||
+ | master-password = parool | ||
+ | |||
+ | log-bin = mysql-bin | ||
+ | relay-log = relay-log | ||
+ | relay-log-index=relay-log-index | ||
+ | |||
+ | Mysql käsureal lubame ligipääsu serveril 192.168.1.1 | ||
+ | |||
+ | GRANT REPLICATION SLAVE, SUPER, RELOAD, SELECT ON *.* TO 'user_name'@'192.168.1.1' IDENTIFIED BY 'parool'; | ||
+ | |||
+ | read | ||
+ | |||
+ | auto_increment_increment = 10 | ||
+ | auto_increment_offset = 1 | ||
+ | |||
+ | ja | ||
+ | |||
+ | auto_increment_increment = 10 | ||
+ | auto_increment_offset = 2 | ||
+ | |||
+ | Vaikimisi replikeeritakse kõiki andmebaase. Kui vaja ainult ühte või mitut kindlat võib kirjutada my.cnf'i | ||
+ | |||
+ | replicate-do-db=test | ||
+ | replicate-do-db=proov | ||
+ | |||
+ | Või kui on soov mitte replikeerida mõnd baasi siis lisada | ||
+ | |||
+ | replicate-ignore-db=test | ||
+ | |||
+ | '''Probleemidega tegelemine''' | ||
+ | |||
+ | On vajalikud selleks ,et kui masinate replikeerimine | ||
+ | on mingil põhjusel katkenud ei tekiks duplicated key'sid kuna mõlemad serverid | ||
+ | üritavad üksteist replikeerida näiteks peale vahepeal toimunud | ||
+ | võrgukatkestus täpselt sarnaseks. | ||
+ | |||
+ | Juhul kui replikeerimine on seiskunud või ei toimi tasub proovida | ||
+ | |||
+ | mysql data kaustas kustutada failid '''master.info''' ja '''relay-log.info''' milledes | ||
+ | säilitatakse infot replikeerimise hetkeseisu. Master log nime ja positsiooni kohta | ||
+ | ning seejärel restartida mysql deemon | ||
===testimine=== | ===testimine=== | ||
− | + | '''192.168.1.1''' | |
− | |||
− | |||
mysql> CREATE DATABASE test; | mysql> CREATE DATABASE test; | ||
− | + | '''192.168.1.2''' | |
− | |||
mysql> show databases; | mysql> show databases; | ||
134. rida: | 213. rida: | ||
1 rows in set (0.00 sec) | 1 rows in set (0.00 sec) | ||
+ | Ja seejärel võib ka teises masinate järjekorras korrata katset. | ||
+ | |||
+ | Selleks ,et katkist replikeerimist parandada on tarkvara | ||
+ | |||
+ | http://maatkit.sourceforge.net/ | ||
+ | |||
+ | * http://code.google.com/p/php-mysql-master-slave-replication-monitor/wiki/InstallationAndStandardUseCase | ||
+ | |||
+ | * http://exchange.nagios.org/directory/Plugins/Databases/MySQL/check_mysql-2Dreplication-2Epl/details | ||
− | + | * http://blog.secaserver.com/2011/06/the-best-way-to-setup-mysq-replication/ |
Viimane redaktsioon: 24. aprill 2012, kell 13:54
Sisukord
Sissejuhatus
TODO
Master to Slave replikeerimine
Replikeerime ühe töötava mysql serveri sisu teise
Esimene master sever 192.168.1.1
ja teine backup 192.168.1.2
Master serveri conf
my.cnf
[mysqld] log-bin = ServerA.bin.log server-id = 1
ja kõik. Stardime serverid
loome master serverile replikeerimiseks vajaliku kasutaja
mysql> GRANT REPLICATION SLAVE, SUPER, RELOAD, SELECT ON *.* TO 'user_name'@'192.168.1.2' IDENTIFIED BY 'parool';
logime mysql'i
mysql> FLUSH TABLES WITH READ LOCK; mysql> show master status; +----------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +----------------+----------+--------------+------------------+ | ServerA.000024 | 136208 | | | +----------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
jätame meelde ServerA.000024 ja 136208
# mysqldump -u root -pyourrootsqlpassword --opt exampledb > snapshot.sql # scp snapshot.sql root@192.168.0.101:/tmp
Seejärel:
> UNLOCK TABLES; > quit;
Slave serveri konf
# /usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave
# mysql -u root -p my_database </home/my_home_dir/database.sql
server-id=2 master-host=192.168.0.100 master-user=slave_user master-password=secret master-connect-retry=60
teeme mysql'is sellise käsu
mysql> change master to -> master_log_file='ServerA.000024', -> master_log_pos=136208;
ja stardime replikatsiooni
mysql> slave start;
kui replikatsioon peaks mingil juhul katkema saab seda uuesti startida käsuga
mysql> change master to master_log_file='ServerA.000024', master_log_pos=136208;
logi nimi ja pos tuleb taaskord masterist vaadata
kontrollime backupis kas ühendus on saavutatud kahe serveri vahel
mysql> SHOW SLAVE STATUS \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.2 Master_User: root Master_Port: 3306 Connect_Retry: 60 Master_Log_File: ServerA.000024 Read_Master_Log_Pos: 136396 Relay_Log_File: -relay-bin.000012 Relay_Log_Pos: 136531 Relay_Master_Log_File: ServerA.000024 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 136396 Relay_Log_Space: 136531 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 1 row in set (0.00 sec)
rida Slave_IO_State: Waiting for master to send event
näitab ,et kõik on läinud nagu vaja ja slave ootab master'ilt infot
Multimaster replikatsioon
Vajalik oleks samas sageli ,et replikatsioon toimuks automaatselt mõlemas suunas. Nii ,et muudatusi saaks teha mõlemas serveris baasi.
Serverid 192.168.1.1 ja 192.168.1.2 On siin näites mõlemad nii master kui slave rollis
Esimene server 192.168.1.1 my.cnf
[mysqld] server-id = 10 auto_increment_increment = 10 auto_increment_offset = 1 master-host = 192.168.1.1 master-user = kasutaja master-password = parool log-bin = mysql-bin relay-log = relay-log relay-log-index=relay-log-index
Mysql käsureal lubame mysql ligipääsu serveril 192.168.1.2
GRANT REPLICATION SLAVE, SUPER, RELOAD, SELECT ON *.* TO 'user_name'@'192.168.1.2' IDENTIFIED BY 'parool';
masin 192.168.1.2 my.cnf
[mysqld] server-id = 20 auto_increment_increment = 10 auto_increment_offset = 2 master-host = 192.168.1.2 master-user = kasutaja master-password = parool log-bin = mysql-bin relay-log = relay-log relay-log-index=relay-log-index
Mysql käsureal lubame ligipääsu serveril 192.168.1.1
GRANT REPLICATION SLAVE, SUPER, RELOAD, SELECT ON *.* TO 'user_name'@'192.168.1.1' IDENTIFIED BY 'parool';
read
auto_increment_increment = 10 auto_increment_offset = 1
ja
auto_increment_increment = 10 auto_increment_offset = 2
Vaikimisi replikeeritakse kõiki andmebaase. Kui vaja ainult ühte või mitut kindlat võib kirjutada my.cnf'i
replicate-do-db=test replicate-do-db=proov
Või kui on soov mitte replikeerida mõnd baasi siis lisada
replicate-ignore-db=test
Probleemidega tegelemine
On vajalikud selleks ,et kui masinate replikeerimine on mingil põhjusel katkenud ei tekiks duplicated key'sid kuna mõlemad serverid üritavad üksteist replikeerida näiteks peale vahepeal toimunud võrgukatkestus täpselt sarnaseks.
Juhul kui replikeerimine on seiskunud või ei toimi tasub proovida
mysql data kaustas kustutada failid master.info ja relay-log.info milledes säilitatakse infot replikeerimise hetkeseisu. Master log nime ja positsiooni kohta ning seejärel restartida mysql deemon
testimine
192.168.1.1
mysql> CREATE DATABASE test;
192.168.1.2
mysql> show databases; +--------------------+ | Database | +--------------------+ | test | +--------------------+ 1 rows in set (0.00 sec)
Ja seejärel võib ka teises masinate järjekorras korrata katset.
Selleks ,et katkist replikeerimist parandada on tarkvara