MySQL 데이터베이스 마스터-슬레이브 서버 복제

마스터-슬레이브 복제가 필요한 이유

일반적으로 데이터베이스의 읽기와 쓰기가 모두 동일한 데이터베이스 서버에서 운영되면 비즈니스 시스템의 성능이 저하됩니다.
비즈니스 시스템의 성능을 향상시키고 사용자 경험을 최적화하기 위해 마스터-슬레이브 복제 (읽기-쓰기 분리)를 사용하여 기본 데이터베이스의 부하를 줄일 수 있습니다.
또한 주 데이터베이스가 다운되면 비즈니스 시스템을 보조 데이터베이스로 신속하게 전환하여 데이터 손실을 방지 할 수 있습니다.
여기에 사진 설명 삽입

마스터-슬레이브 복제 유형

명령문 기반 복제 (기본값)
마스터 서버에서 동일한 명령문을 실행하고 서버에서 동일한 명령문을 실행합니다.
행 기반 복제
는 변경된 내용을 슬레이브 서버로
복제 합니다 . 혼합 유형 복제
가 명령문 기반 복제를 정확하게 복제 할 수 없음을 발견하면이를 사용합니다. 라인 복사

마스터-슬레이브 복제 프로세스의 개략도

여기에 사진 설명 삽입

가져와! 보여 주다! !

세 개의 가상 머신
마스터 서버 : 20.0.0.4
슬레이브 서버 01 : 20.0.0.5
슬레이브 서버 02 : 20.0.0.6
MySQL 설치 전에 쓰기가 있습니다. 여기 에서 링크를 읽을 수
있습니다.

세 대의 서버가 방화벽을 닫습니다.

setenforce 0
iptables -F

주 서버 구성

配置主配置文件
[root@master mysql]# vim /etc/my.cnf
[mysqld]
…省略部分…
server-id = 1
log_slave_updates = true
log-bin = master-bin
[root@master mysql]# systemctl restart mysqld

[root@master mysql]# mysql -u root -p
Enter password: 
# *.* 指的是 全部数据库.所有表,slaveuser 是从服务器登录用的账户
mysql> grant replication slave on *.* to 'slaveuser'@'20.0.0.%' identified by
'123123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

#刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

#查看从服务器读取位置,我这边读取的是 601
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      601 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

슬레이브 서버 구성

둘 다 설정해야합니다. 하나만 시연합니다.

[root@slave01 ~]# vim /etc/my.cnf
[mysqld]
…省略部分…
server-id = 12   ##三台服务器得各不一样,我另一台配的13
relay-log=relay-log-bin   ##二进制日志文件名
relay-log-index=slave-relay-bin.index
[root@slave01 ~]# systemctl restart mysqld

[root@slave01 ~]# mysql -u root -p
Enter password: 

##master_host指向主服务器IP,master_user只想刚刚创建的用户,master_log_pos指向刚刚得位置,我的是306
mysql> change master to master_host='20.0.0.4',master_user='slaveuser',master_password='123123',master_log_file='master-bin.000001',master_log_pos=601;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

#启动从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

#查看 slave 状态
mysql> show slave status\G;
             Master_Host: 20.0.0.4
             Master_User: slaveuser
             Slave_IO_Running: Yes   ##有下面两条差不多就ok了
             Slave_SQL_Running: Yes

마스터-슬레이브 복제 테스트

동기화를 확인하기 위해 메인 서버에 데이터베이스와 테이블을 생성합니다.

mysql> create database happy;
Query OK, 1 row affected (0.00 sec)

mysql> use happy;
Database changed

mysql> create table kaixin(id int(2) primary key auto_increment,xinqing varchar(10) not null);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into kaixin values(1,'高兴');
Query OK, 1 row affected (0.01 sec)

mysql> select * from kaixin;
+----+---------+
| id | xinqing |
+----+---------+
|  1 | 高兴    |
+----+---------+
1 row in set (0.00 sec)

데이터베이스에서 확인

mysql> use happy;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from kaixin;
+----+---------+
| id | xinqing |
+----+---------+
|  1 | 高兴    |
+----+---------+
1 row in set (0.00 sec)

추천

출처blog.csdn.net/Ora_G/article/details/108245885