1. 마스터-슬레이브 복제 원리
- 데이터 변경 사항은 메인 라이브러리의 바이너리 로그에 기록되며 이러한 기록을 바이너리 로그 이벤트라고합니다.
- 슬레이브 라이브러리는 IO 스레드를 사용하여 메인 라이브러리의 로그를 자체 릴레이 로그 (릴레이 로그)에 복사합니다.
- SQL 스레드를 통해 라이브러리에서 릴레이 로그의 이벤트를 읽고 자신의 데이터에서 재생합니다.
1.1. 환경 준비
Centos7 설치 mysql8 데이터베이스 참조 기사 주소
서버 환경 : centos7 mysql 버전 : 8.0.18
마스터 서버 : 192.168.60.165
슬레이브 서버 : 192.168.60.206
다른 기사는 다음과 같이 서버 mysql 터미널에서 작동하는 작업 명령의 일부입니다. Navicat은 데이터베이스에 연결하여 명령을 실행합니다.
2. 기본 서버 노드
2.1, my.cnf 파일 수정
[root@localhost ~]# vi /etc/my.cnf
#服务器节点id,一般为服务器ip方便区分
server-id=230
#开启日志文件
log-bin=mysql-bin
#指定要同步的数据库,多个用逗号隔开(可以不用配置)
binlog_do_db=user_db
2.1.1, 구성이 성공했는지 확인
#重启mysql服务
systemctl restart mysqld
#查看mysql服务状态
systemctl status mysqld
2.1.2, 쿼리 server_id가 있는지 확인
## 验证查询server_id是否存在
show variables like '%server_id%';
2.1.3, 동기화 된 파일 및 줄 수 쿼리
# 查询同步的文件和行数,如下查询的数据在从服务器上执行命令会用到。
show master status;
3. 슬레이브 서버 노드
3.1, my.cnf 파일 수정
[root@localhost ~]# vi /etc/my.cnf
#服务器节点id,一般为服务器ip方便区分
server-id=235
#开启日志文件
log-bin=mysql-bin
#指定要同步的数据库,多个用逗号隔开(可以不用配置)
binlog_do_db=gi_test
3.2, 구성이 성공했는지 확인
#重启mysql服务
systemctl restart mysqld
#查看mysql服务状态
systemctl status mysqld
3.2.1, 쿼리 server_id가 있는지 확인
## 验证查询server_id是否存在
show variables like '%server_id%';
3.2.2, 서버에서 마스터 서버 구성 동기화
#从服务器器同步主服务器配置
## master_log_file='mysql-bin.000002' 表示要同步的日志文件File,
##是主服务器上述命令‘show master status;'查询出来的值
## master_log_pos=155 表示要同步日志文件的位置(多少行),详见上图。
change master to master_host='192.168.60.165',master_user='admini',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=155;
#开启同步
start slave
#检查从服务器复制功能状态
show slave status;
참고 : 위 그림에 표시된 빨간색 상자의 두 필드는 예이며 이는 마스터-슬레이브 복제가 성공적으로 시작되었음을 의미합니다.
4. 기능 테스트
기본 데이터베이스 192.168.60.165에 새 테이블 tb_uesr을 생성합니다.
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_id` bigint(20) NOT NULL COMMENT '用户id',
`fullname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户姓名',
`user_type` char(1) DEFAULT NULL COMMENT '用户类型',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
그런 다음 192.168.60.206 데이터베이스로 이동하여 테이블에 tb_user가 존재하는지 확인합니다. 존재하는 경우 구성이 완료된 것입니다.