"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP를 사용하여 대용량 MySQL 파일을 공유 호스팅으로 효율적으로 가져오는 방법은 무엇입니까?

PHP를 사용하여 대용량 MySQL 파일을 공유 호스팅으로 효율적으로 가져오는 방법은 무엇입니까?

2024년 11월 19일에 게시됨
검색:598

How to Efficiently Import Large MySQL Files into Shared Hosting Using PHP?

PHP에서 효율적인 MySQL 파일 가져오기: 공유 호스팅을 위한 쿼리 분할

웹 개발 영역에서 공유 호스팅 제공업체를 공통적으로 사용하면서 대용량 데이터베이스 파일을 가져와야 하는 필요성 발생합니다. 안타깝게도 명령줄을 통한 MySQL 액세스는 제한될 수 있으므로 쿼리 구문 분석 및 실행을 위한 PHP 기반 솔루션이 필요합니다.

이 문제를 해결하기 위해 SplitSQL()이라는 강력한 기능이 개발되어 과도한 메모리를 소비하지 않고 데이터베이스 파일을 개별 쿼리로 변환합니다.

작동 방식

SplitSQL()은 파일 읽기 접근 방식을 활용하여 파일을 한 줄씩 반복합니다. 줄 끝에서 지정된 구분 기호(기본적으로;)를 감지하여 쿼리를 식별합니다. 완전한 쿼리가 조합되면 mysql_query()를 사용하여 즉시 실행됩니다.

주요 기능

  • 메모리 효율적: 전체 쿼리를 로드할 필요가 없음 파일을 메모리에 저장하는 경우 SplitSQL()은 성능 문제 없이 대용량 파일을 처리하는 데 적합합니다.
  • Fault-tolerance: 쿼리가 실패하면 디버깅을 위해 오류 메시지가 표시됩니다.
  • 출력 버퍼링: 메모리 고갈을 방지하기 위해 SplitSQL()은 각 쿼리 실행 후 출력을 플러시합니다.

사용 예

function SplitSQL($file, $delimiter = ';')
{
    set_time_limit(0);

    if (is_file($file) === true)
    {
        $file = fopen($file, 'r');

        if (is_resource($file) === true)
        {
            $query = array();

            while (feof($file) === false)
            {
                $query[] = fgets($file);

                if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query)) === 1)
                {
                    $query = trim(implode('', $query));

                    if (mysql_query($query) === false)
                    {
                        echo '<h3>ERROR: ' . $query . '</h3>' . "\n";
                    }

                    else
                    {
                        echo '<h3>SUCCESS: ' . $query . '</h3>' . "\n";
                    }

                    while (ob_get_level() > 0)
                    {
                        ob_end_flush();
                    }

                    flush();
                }

                if (is_string($query) === true)
                {
                    $query = array();
                }
            }

            return fclose($file);
        }
    }

    return false;
}

// Test data
$file = '/path/to/db_dump.sql';
SplitSQL($file);
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3