현대의 고 가용성 아키텍처에서 데이터베이스 재해 복구 (장애 조치)는 시스템의 높은 신뢰성을 보장하는 중요한 수단입니다. 특히 분산 데이터베이스 또는 마스터 슬레이브 아키텍처에서 마스터 데이터베이스가 실패하면 서비스를 계속 제공하려면 대기 데이터베이스로 전환해야합니다. 이를 달성하기 위해 MySQL은 속성 MySQLI :: $ errno를 제공하여 개발자가 데이터베이스 작업에 오류가 있는지 여부를 결정하고 오류 코드를 통해 재해 복구 스위치를 트리거 할 수 있도록 도와줍니다.
이 기사는 데이터베이스가 MySQLI :: $ errno를 통해 재해 복구 전환이 필요한지 여부를 결정하고 재해 복구 전환 예제를 간단히 구현하는 방법을 소개합니다.
mysqli :: $ errno 는 MySQLI 클래스의 속성으로, 이전 MySQL 쿼리 작업의 오류 코드를 나타냅니다. 쿼리가 성공하면 속성 값은 0입니다. 오류가 발생하면 속성이 해당 MySQL 오류 코드를 반환합니다. 이 속성을 사용하여 오류가 발생했는지 여부를 결정하고 해당 오류 처리를 할 수 있습니다.
일반적인 오류 코드는 다음과 같습니다.
2002 : 연결 거부 , 데이터베이스를 연결할 수 없습니다.
1040 : 연결이 너무 많으면 데이터베이스 연결 수가 상한에 도달합니다.
1213 : 교착 상태 , 교착 상태 오류.
MySQL 마스터 슬레이브 아키텍처를 사용한다고 가정하면 마스터 라이브러리가 실패하면 자동으로 대체 슬레이브 라이브러리로 전환해야합니다. MySQLI :: $ errno를 사용하여 오류 코드를 결정하여 재해 복구 전환이 필요한지 여부를 결정할 수 있습니다.
다음은 단순화 된 재해 복구 전환 구현의 예입니다.
<?php
// 데이터베이스 연결 구성
$primary_db_config = [
'host' => 'primary.m66.net',
'user' => 'root',
'password' => 'password',
'database' => 'test_db'
];
$secondary_db_config = [
'host' => 'secondary.m66.net',
'user' => 'root',
'password' => 'password',
'database' => 'test_db'
];
// 데이터베이스 연결을 만듭니다
function connectDatabase($db_config) {
$mysqli = new mysqli($db_config['host'], $db_config['user'], $db_config['password'], $db_config['database']);
if ($mysqli->connect_error) {
echo "연결이 실패했습니다: " . $mysqli->connect_error . "\n";
return null;
}
return $mysqli;
}
// 메인 라이브러리에 연결하십시오
$mysqli = connectDatabase($primary_db_config);
if ($mysqli === null) {
// 如果主库연결이 실패했습니다,백업 라이브러리로 전환하십시오
echo "主数据库연결이 실패했습니다,대기 데이터베이스로 전환하십시오...\n";
$mysqli = connectDatabase($secondary_db_config);
}
// 쿼리 작업을 수행하십시오
if ($mysqli) {
$query = "SELECT * FROM some_table";
if ($mysqli->query($query) === FALSE) {
// 오류 코드에 따라 재해 복구 전환이 필요한지 확인
echo "쿼리가 실패했습니다: " . $mysqli->errno . " - " . $mysqli->error . "\n";
if ($mysqli->errno == 2002 || $mysqli->errno == 1040) {
// 데이터베이스 연결이 잘못되었거나 연결 수가 가득 찬 경우,데이터베이스를 전환하십시오
echo "데이터베이스를 전환하십시오...\n";
$mysqli = connectDatabase($secondary_db_config);
}
} else {
echo "쿼리 성공\n";
}
}
데이터베이스 구성 : 마스터 및 슬레이브 라이브러리에 대한 데이터베이스 연결 정보를 구성했습니다. 기본 라이브러리의 연결 구성은 $ dismart_db_config 변수에 저장되며 슬레이브 라이브러리의 구성은 $ Secondary_db_config 에 저장됩니다.
데이터베이스 연결 : ConnectDatabase () 함수는 데이터베이스 연결을 설정하는 데 사용됩니다. 데이터베이스 구성 정보를 수신하고 MySQLI 객체를 반환하고 연결이 실패하면 NULL을 반환합니다.
메인 라이브러리 연결이 실패하면 슬레이브로 전환 : 기본 라이브러리 연결이 실패하면 슬레이브에 연결하고 $ mysqli 변수를 새 연결에 가리 킵니다.
쿼리 작동 : $ mysqli-> query () 를 통해 데이터베이스 쿼리를 실행합니다. 쿼리가 실패하면 $ mysqli-> errno를 통해 오류 코드를 얻어 재해 복구 전환이 필요한지 여부를 결정합니다. 예를 들어, Errno == 2002는 데이터베이스 연결에 실패했음을 의미 하고 Errno == 1040은 데이터베이스 연결 번호가 가득 차 있음을 의미합니다. 두 경우 모두 대기 데이터베이스로 전환하려고합니다.
mysqli :: $ errno를 사용하면 데이터베이스 작업의 오류를 판단하고 오류 코드를 통해 재해 복구 전환이 필요한지 여부를 결정하는 데 효과적으로 도움이 될 수 있습니다. 이 간단한 예를 들어 마스터 슬레이브 데이터베이스 스키마에서 재해 복구 전환을 수행하는 방법을 보여줍니다. 실제 개발에서는 특정 오류 코드 및 시스템 요구 사항을 기반으로 재해 복구 전환 로직을 사용자 정의하여 시스템의 유용성과 안정성을 더욱 향상시킬 수 있습니다.