>  기사  >  데이터 베이스  >  mysql 읽기 및 쓰기 분리(기본)

mysql 읽기 및 쓰기 분리(기본)

黄舟
黄舟원래의
2016-12-17 14:18:50888검색

기본 원칙은 기본 데이터베이스가 트랜잭션 쿼리를 처리하고 슬레이브 데이터베이스가 SELECT 쿼리를 처리하도록 하는 것입니다. 데이터베이스 복제는 클러스터의 슬레이브 데이터베이스에 대한 트랜잭션 쿼리로 인한 변경 사항을 동기화하는 데 사용됩니다. mysql 읽기 및 쓰기 분리(기본)

Jan Kneschke는 "MySQL 프록시가 R/W 분할을 학습합니다"에서 이 기술과 연결 풀 문제를 자세히 소개했습니다.

읽기 및 쓰기 분리를 달성하려면 연결 풀. 해당 백엔드에 대해 인증된 연결이 열려 있는 경우에만 백엔드로 전환합니다. MySQL 프로토콜은 핸드셰이크로 시작됩니다. 쿼리/결과 반환 단계에 진입하면 새로운 연결을 인증하기에는 너무 늦습니다. 모든 것이 제대로 작동하도록 하려면 연결이 충분히 열려 있는지 확인해야 합니다.
읽기-쓰기 분리를 구현하기 위한 LUA 스크립트:
 --읽기-쓰기 분리
 --
 --모든 비트랜잭션 선택 항목을 슬레이브 데이터베이스로 보내기

if is_in_transaction == 0 and 
  packet:byte() == proxy.COM_QUERY and 
  packet:sub(2, 7) == "SELECT" then 
  local max_conns = -1 
  local max_conns_ndx = 0 
  for i = 1, #proxy.servers do 
  local s = proxy.servers[i] 
  -- 需要选择一个拥有空闲连接的从数据库 
  if s.type == proxy.BACKEND_TYPE_RO and 
  s.idling_connections > 0 then 
  if max_conns == -1 or 
  s.connected_clients < max_conns then 
  max_conns = s.connected_clients 
  max_conns_ndx = i 
  end 
  end 
  end 
  -- 至此,我们找到了一个拥有空闲连接的从数据库 
  if max_conns_ndx > 0 then 
  proxy.connection.backend_ndx = max_conns_ndx 
  end 
  else 
  -- 发送到主数据库 
  end 
  return proxy.PROXY_SEND_QUERY

설명: 이 기술은 샤딩과 같은 다른 데이터 배포 전략을 구현하는 데에도 사용할 수 있습니다.

위 내용은 mysql 읽기-쓰기 분리(기본) 내용입니다. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


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