mysql 리플리케이션은 두개의 서버의 디비를 일방적 동기화 작업이다.
위와같은 작업을 진행하려면 mysql이 설치된 2개의 서버가 필요하다.
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 = 2 // 서버 식별자(유니크)
binlog_do_db = smile1 // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
binlog_do_db = smile2 // 여러 개의 DB일경우, 계속 추가
———————————————————————————————————-
/etc/my.cnf 파일에 위와같이 수정을 해준다. (없을경우 추가해준다.)
2.mysql 재가동(MasterServer)
#/etc/init.d/mysqld restart 를 통해 재시작을 해준다.
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.000009| 21780 | | |
+——————–+———+—————-+———————-+
1 row in set (0.00 sec)
mysql> UNLOCK TABLES; // DB Write 금지해제
5.데이터 복사(SlaveServer)
# mysql -u root -p [DB명] < BackupData.sql
6.환경설정(SlaveServer)
# vi /etc/my.cnf
———————————————————————————————————-
[mysqld]
#Replication for master server
server-id = 3 // 서버 식별자(유니크)
replicate-do-db = smile1 // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
replicate-do-db = smile2 // 여러 개의 DB일경우, 계속 추가
———————————————————————————————————-
———————————————————————————————————-
7.mysql 재가동(SlaveServer)
# /etc/init.d/mysqld restart
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.000009
Position: 21780
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: 115.68.74.248
Master_User: young
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 21780
Relay_Log_File: SlaveDB1-relay-bin.000002
Relay_Log_Pos: 21780
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
・・・・・・・
・・・・・・・
Master_Server_Id: 2
1 row in set (0.00 sec)