1.환경설정(MasterServer)
# vi /etc/my.cnf
----------------------------------------------------------------------------------------------------------
[mysqld]
#log setting
log-bin = mysql-bin // 로그파일명
max_binlog_size = 100M // 로그파일크기
expire_logs_days = 7 // 로그보존주기
#Replication for master server
server-id = 3 // 서버 식별자(유니크)
binlog_do_db = test1 // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
binlog_do_db = test2 // 여러 개의 DB일경우, 계속 추가
----------------------------------------------------------------------------------------------------------
2.mysql 재가동(MasterServer)
# mysqladmin -u root -p shutdown
# mysqld_safe &
3.유저추가(MasterServer)
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO 'username'@'%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
4.데이터 백업(MasterServer)
mysql> FLUSH TABLES WITH READ LOCK; // DB Write 금지
# mysqldump -u root -p [DB명] >BackupData.sql
※ 리플리케이션대상 DB를 백업함
mysql> SHOW MASTER STATUS;
+--------------------+---------+----------------+----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+---------+----------------+----------------------+
| mysql-bin.000012| 2074 | | |
+--------------------+---------+----------------+----------------------+
1 row in set (0.00 sec)
mysql> UNLOCK TABLES; // DB Write 금지해제
5.데이터 복사(SlaveServer)
# mysql -u root -p [DB명] < BackupData.sql6.환경설정(SlaveServer)
# vi /etc/my.cnf
----------------------------------------------------------------------------------------------------------
[mysqld]
#Replication for master server
server-id = 4 // 서버 식별자(유니크)
replicate-do-db = test1 // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
replicate-do-db = test2 // 여러 개의 DB일경우, 계속 추가
----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
7.mysql 재가동(SlaveServer)
# mysqladmin -u root -p shutdown
# mysqld_safe &
8.마스터접속설정(SlaveServer)
mysql> CHANGE MASTER TO
-> MASTER_HOST='MasterServerIP',
-> MASTER_USER='username', // Master DB에서 Grant로 설정했던 ID
-> MASTER_PASSWORD='password',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='MasterDB의 Status에 기록된 파일명',
-> MASTER_LOG_POS=MasterDB의 Status에 기록된 Position;"
9.리플리케이션시작
mysql> START slave;10.에러 유무 확인(MasterServer)
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000013
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
1 row in set (0.00 sec)
11.에러 유무 확인(SlaverServer)
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.3
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 107
Relay_Log_File: SlaveDB1-relay-bin.000006
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
・・・・・・・
・・・・・・・
Master_Server_Id: 3
1 row in set (0.00 sec)
❑ MySQL Replication 종류
1.Single Master Replication
2.Chained Master Replication
※ Chained Master Replication경우, 3번항목부터 11번항목까지 SlaveDB3과 SlaveDB4에서 설정할 필요가 있다. 이 때, Slave이자 Master가 되는 SlaveDB3에는 반드시 log-save-update옵션이 설정되어 있어야 한다. (log-save-update 옵션이 설정되어 있지 않을 경우, SlaveDB4가 갱신되지 않는다.) |
|||||||||||||||||||||
※ 장애발생 시, 특정 Slave를 Master(Master전용)로 변경하는 경우, log-save-update 옵션이 설정되어 있어선 안된다. 설정되어 있는 상태에서 Slave에서 Master로 변경하게 되면 다른 서버(변경후의 Slave)에 이전 Master에서 받았던 업데이트를 다시 하게 된다. | |||||||||||||||||||||
※ Backup용 Slave가 존재하면 다음과 같은 명령어로 온라인백업이 가능하다. Backup용 Slave서버에서 백업실시 # mysqldump -u user -p --delete-master-logs > xxxxxx.sql (Backup이 진행되는 동안 락으로 인해 Backup용 Slave서버에 데이터 입력이 안됨) |
댓글 없음:
댓글 쓰기