>데이터 베이스 >MySQL 튜토리얼 >MySQL 데이터베이스에서 마스터-슬레이브 동기화를 설정하는 방법에 대한 자세한 설명

MySQL 데이터베이스에서 마스터-슬레이브 동기화를 설정하는 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-02-28 14:02:531544검색

소개

MySQL 마스터-슬레이브 동기화는 현재 널리 사용되는 데이터베이스 아키텍처이며, 특히 부하가 많은 웹사이트의 경우 마스터가 비교적 성숙되어 있습니다. -슬레이브 동기화 데이터베이스 읽기 및 쓰기의 부담을 효과적으로 완화할 수 있습니다.

MySQL 마스터-슬레이브 동기화 메커니즘:

MySQL 동기화 프로세스는 대략 다음과 같습니다.

1. 마스터 )는 변경 이벤트(업데이트, 삭제, 테이블 구조 변경 등)를 바이너리 로그(마스터 로그)에 기록합니다.

2. 슬레이브 서버의 IO 스레드는 메인 서버로부터 바이너리 로그(binlog dump 스레드)를 얻어 자신의 바이너리 로그(릴레이 로그)를 로컬에 저장합니다.

3. 로컬 읽기 서버의 SQL 스레드에서 로그(릴레이 로그)를 기록하고 변경 이벤트를 재생합니다.

MySQL 데이터베이스에서 마스터-슬레이브 동기화를 설정하는 방법에 대한 자세한 설명

MySQL 마스터-슬레이브 동기화의 역할:

1. 핫 백업과 동등한 백업 메커니즘으로 사용할 수 있습니다. (백업 기간 동안 메인 서버 서비스에 영향을 주지 않도록 슬레이브 백업에서)

2. 읽기와 쓰기를 분리하여 데이터베이스 부하(기본 쓰기와 슬레이브 읽기)의 균형을 맞추는 데 사용할 수 있습니다

3. 메인 서버에 문제가 있을 경우 슬레이브 서버로 전환할 수 있습니다.

MySQL 마스터-슬레이브 동기화 단계:

1. 준비 작업:

1. 권장 버전은 5.5 이상입니다.

2. 마스터-슬레이브 데이터베이스 데이터가 일관성이 있습니다.

2. 마스터 데이터베이스 마스터 수정:

1. MySQL 구성 수정:

# /etc/my.cnf 
log-bin = mysql-bin 

# 主数据库端ID号 
server-id = 1 

log-bin=/home/mysql/logs/binlog/bin-log
max_binlog_size = 500M
binlog_cache_size = 128K
binlog-do-db = adb
binlog-ignore-db = mysql
log-slave-updates
expire_logs_day=2
binlog_format="MIXED"



위 구성에서 각 매개변수의 의미 및 관련 주의사항:

#服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。
server-id = 1

log-bin=/home/mysql/logs/binlog/bin-log #开启bin-log,并指定文件目录和文件名前缀。

#每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。
max_binlog_size = 500M 

binlog_cache_size = 128K #日志缓存大小

binlog-do-db = adb #需要同步的数据库名字,如果是多个,就以此格式在写一行即可。

binlog-ignore-db = mysql #不需要同步的数据库名字,如果是多个,就以此格式在写一行即可。

#当Slave从Master数据库读取日志时更新新写入日志中,如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。
log-slave-updates 

expire_logs_day=2 #设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持。

binlog_format="MIXED" #设置bin-log日志文件格式为:MIXED,可以防止主键重复。



2. mysql을 다시 시작하고 동기화를 위한 계정을 만듭니다:

# 创建slave帐号slave,密码111111 
mysql>grant replication slave on *.* to 'slave'@'%' identified by '111111'; 

# 更新数据库权限 
mysql>flush privileges;



3. 마스터 상태 쿼리

mysql> show master status; 
+------------------+----------+--------------+------------------+ 
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| mysql-bin.000009 |  196 |    |     | 
+------------------+----------+--------------+------------------+ 
1 row in set


참고: 메인 데이터베이스의 상태 값이 변경되는 것을 방지하려면 이 단계를 수행한 후에는 메인 데이터베이스를 작동하지 마십시오.

3. 슬레이브 데이터베이스 슬레이브 수정 :

1. MySQL 구성 수정:

# 从数据库端ID号 
server-id =2

2. 동기화 명령 실행

# 执行同步命令,设置主数据库ip,同步帐号密码,同步位置 
mysql>change master to master_host='192.168.1.2',master_user='slave',master_password='111111',master_log_file='mysql-bin.000009',master_log_pos=196; 

# 开启同步功能 
mysql>start slave;

3. >

mysql> show slave status\G; 
*************************** 1. row *************************** 
    Slave_IO_State: Waiting for master to send event 
     Master_Host: 192.168.1.2 
     Master_User: slave_account 
     Master_Port: 3306 
    Connect_Retry: 60 
    Master_Log_File: mysql-bin.000009 
   Read_Master_Log_Pos: 196 
    Relay_Log_File: vicky-relay-bin.000002 
    Relay_Log_Pos: 253 
  Relay_Master_Log_File: mysql-bin.000009 
    Slave_IO_Running: Yes 
   Slave_SQL_Running: Yes 
    Replicate_Do_DB: 
   Replicate_Ignore_DB: 
   ... 
   ...

참고: Slave_IO_Running 및 Slave_SQL_Running 프로세스는 정상적으로, 즉 YES 상태로 실행되어야 합니다. 그렇지 않으면 동기화가 실패합니다. 이 두 항목을 이용하여 슬레이브 서버 다운 여부를 판단할 수 있습니다

이제 마스터-슬레이브 데이터베이스 설정 작업이 완료되었으며, 새로운 데이터베이스와 테이블을 생성하고, 데이터를 삽입 및 수정하고, 성공 여부 테스트


4. 기타 사용할 수 있는 관련 매개변수:
1. 마스터 측:

# 不同步哪些数据库 
binlog-ignore-db = mysql 
binlog-ignore-db = test 
binlog-ignore-db = information_schema 

# 只同步哪些数据库,除此之外,其他不同步 
binlog-do-db = game 

# 日志保留时间 
expire_logs_days = 10 

# 控制binlog的写入频率。每执行多少次事务写入一次 
# 这个参数性能消耗很大,但可减小MySQL崩溃造成的损失 
sync_binlog = 5 

# 日志格式,建议mixed 
# statement 保存SQL语句 
# row 保存影响记录数据 
# mixed 前面两种的结合 
binlog_format = mixed

2. 슬레이브 측:

# 停止主从同步 
mysql> stop slave; 

# 连接断开时,重新连接超时时间 
mysql> change master to master_connect_retry=50; 

# 开启主从同步 
mysql> start slave;

위의 연결 시간 초과 설정과 유사한 방법을 사용하여 기본 데이터베이스 IP, 계정 비밀번호 동기화, 동기화 위치를 설정할 수 있습니다


MySQL 데이터베이스에서 마스터-슬레이브 동기화를 설정하는 방법에 대한 자세한 설명
마스터-슬레이브 서버가 코드를 정상적으로 실행하고 있는지 판단합니다. :


//在从服务器中执行以下语句
 $sql = "show slave status";
 $result = mysql_query($sql, $slave_link);
 $row = mysql_fetch_assoc($result);

 $Slave_IO_Running = $row['Slave_IO_Running'];
 $Slave_SQL_Running = $row['Slave_SQL_Running'];

 //下面两项为判断标准
 if ('Yes' == $Slave_IO_Running && 'Yes' == $Slave_SQL_Running) {

 } else {
  $content .= "从数据库( $host )挂掉了!!! <br/>";
 }

요약

위 내용은 MySQL 데이터베이스에서 마스터-슬레이브 동기화를 설정하는 방법에 대한 자세한 설명입니다. 관련 내용은 PHP 중국어 사이트(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.