과거에는 클러스터링, 읽기-쓰기 분리, xxxx가 모두 미친 짓이고 멋진 일이라고 느꼈습니다. 다 마친 후에는 여러분이 관심을 가지기만 하면 실제로는 매우 간단하다는 것을 알았습니다.
두 머신:
mysql01: 192.168.1.222
mysql02: 192.168.1.223
가상 머신을 복사하고 시뮬레이션하는 경우 mysql/data에서 auto.cnf를 변경하려면 두 시스템의 uuid가 동일할 수 없습니다. 서버의 selinux를 비활성화해야 합니다(/etc/selinux/config를 수정하고 SELINUX를 비활성화로 변경).
MySQL5.6에는 로그(binlog) 기반과 GTID(전역 트랜잭션 식별자) 기반의 두 가지 마스터-슬레이브 복제 시작 방법이 있습니다.
마스터-슬레이브 복제(A/B 복제라고도 함)의 원리
(1) 마스터는 구성 파일 log-bin에 지정된 파일인 바이너리 로그(바이너리 로그)에 데이터 변경 사항을 기록합니다. 이러한 기록을 바이너리 로그 이벤트(바이너리 로그 이벤트)라고 합니다.
(2) 슬레이브는 I/O 스레드를 통해 마스터의 바이너리 로그 이벤트를 읽고 해당 릴레이 로그(릴레이 로그)에 씁니다.
(3) 슬레이브는 릴레이 로그의 이벤트를 Redo하고 릴레이 로그의 이벤트 정보를 로컬에서 하나씩 실행하여 데이터의 로컬 저장을 완료함으로써 변경 사항을 자신의 데이터에 반영(데이터 재생)합니다.
## [mysqld]에 다음 구성 항목 추가
## server_id 설정, 일반적으로 IP로 설정
server_id=222
## 복사 필터링: 백업이 필요한 데이터베이스의 경우 binlog 출력
#binlog-do-db=roncoo
## 복사 필터링: 백업이 필요 없는 데이터베이스의 경우 up, 출력하지 않음(mysql 라이브러리는 일반적으로 동기화하지 않음)
binlog-ignore-db=mysql
## 바이너리 로그 기능을 활성화합니다. 마음대로 사용할 수 있으며 의미를 갖는 것이 가장 좋습니다
log-bin=master-mysql
## 세션별로 할당 트랜잭션 중 바이너리 로그 캐시를 저장하는 데 사용되는 메모리
binlog_cache_size=1M
## 마스터-슬레이브 복제 형식(혼합, 명령문, 행) , 기본 형식은 명령문입니다)
## 바이너리 로그가 자동으로 삭제/만료되는 일수입니다. 기본값은 0이며, 이는 자동 삭제가 없음을 의미합니다.
expire_logs_days=7
## 슬레이브 측의 복제 중단을 방지하려면 마스터-슬레이브 복제에서 발생한 모든 오류 또는 지정된 유형의 오류를 건너뜁니다.
## 예: 1062 오류는 일부 중복된 기본 키를 참조하고, 1032 오류는 마스터-슬레이브 데이터베이스 데이터가 일치하지 않기 때문에 발생합니다.
slave_skip_errors=1062
relay_log =relay01
## log_slave_updates는 슬레이브가 자체 바이너리 로그에 복제 이벤트를 기록한다는 것을 의미합니다.
log_slave_updates=1
service mysql restart mysql -uroot -p
mysql> grant replication slave, replication client on *.* to 'repl01'@'192.168.1.223' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
mysql> show master status; mysql02:
## in [mysqld]
## server_id 설정, 일반적으로 IP로 설정
server_id=223
##에 다음 구성 항목을 추가합니다. 필터 복사: 백업해야 하는 데이터베이스, 출력 binlog
#binlog-do-db=roncoo
## 복사 필터링: 백업할 필요가 없는 데이터베이스는 출력되지 않습니다(mysql 라이브러리는 일반적으로 동기화되지 않습니다)
binlog-ignore-db= mysql
## 슬레이브가 다른 슬레이브의 마스터 역할을 하는 경우 바이너리 로그 활성화
log-bin=slave-mysql
##을 사용하여 각 세션에 메모리를 할당하고 이를 사용하여 바이너리 로그를 저장합니다.
binlog_cache_size = 1M
## 마스터-슬레이브 복제 형식(혼합, 명령문, 행, 기본 형식은 명령문)
binlog_format=mixed
## 자동 일수 바이너리 로그 삭제/만료. 기본값은 0이며, 이는 자동 삭제가 없음을 의미합니다.
expire_logs_days=7
## 슬레이브 측의 복제 중단을 방지하려면 마스터-슬레이브 복제에서 발생한 모든 오류 또는 지정된 유형의 오류를 건너뜁니다.
## 예: 1062 오류는 일부 중복된 기본 키를 참조하고, 1032 오류는 마스터-슬레이브 데이터베이스 데이터가 일치하지 않기 때문에 발생합니다.
slave_skip_errors=1062
## Relay_log 릴레이 로그 구성
relay_log=relay02
# # log_slave_updates는 슬레이브가 자체 바이너리 로그에 복제 이벤트를 기록한다는 의미입니다.
log_slave_updates=1
mysql> change master to master_host='192.168.1.222', master_user='repl01',master_password='123456', master_port=3306, master_log_file='mysql01.000001',master_log_pos=429, master_connect_retry=30; Query OK, 0 rows affected, 2 warnings (0.01 sec)
上面执行的命令的解释:
master_host='192.168.1.222' ## Master 的 IP 地址
master_user='repl' ## 用于同步数据的用户(在 Master 中授权的用户)
master_password='123456' ## 同步数据用户的密码
master_port=3306 ## Master 数据库服务的端口
master_log_file='master-mysql.000001' ##指定 Slave 从哪个日志文件开始读复制数据(可
在 Master 上使用 show master status 查看到日志文件名)
master_log_pos=429 ## 从哪个 POSITION 号开始读
master_connect_retry=30 ##当重新建立主从连接时,如果连接建立失败,间隔多久后重试。
单位为秒,默认设置为 60 秒,同步延迟调优参数。
## 查看主从同步状态
mysql> show slave status\G;
可看到 Slave_IO_State 为空, Slave_IO_Running 和 Slave_SQL_Running 是 No,表明 Slave 还
没有开始复制过程。
## 开启主从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
## 再查看主从同步状态
mysql> show slave status\G;
主要看以下两个参数,这两个参数如果是 Yes 就表示主从同步正常
Slave_IO_Running: Yes Slave_SQL_Running: Yes
可查看 master 和 slave 上线程的状态。在 master 上,可以看到 slave 的 I/O 线程创建的连接:
mysql01: mysql> show processlist\G; mysql02: mysql> show processlist\G;
完成,测试在mysql01上新建数据库db1,查看mysql02。
从mysql02到mysql01是一样的步骤:
切换到mysql02上
##创建数据同步用户,并授予相应的权限
mysql> grant replication slave, replication client on *.* to 'repl02'@'192.168.1.222' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
## 刷新授权表信息
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
## 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现在的日志文件)
mysql> show master status; change master to master_host='192.168.1.223', master_user='repl02',master_password='123456', master_port=3306,master_log_file='mysql02.000002',master_log_pos=567, master_connect_retry=30; mysql> start slave;Query OK, 0 rows affected (0.00 sec)
## 再查看主从同步状态
mysql> show slave status\G;
在mysql02上创建数据库db2,查看mysql01即可
위 내용은 mysql 클러스터란 무엇입니까? MySQL 클러스터 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!