> 데이터 베이스 > MySQL 튜토리얼 > PHP를 사용하여 대용량 MySQL 파일을 공유 호스팅 환경으로 가져오는 방법은 무엇입니까?

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

Linda Hamilton
풀어 주다: 2024-10-31 11:30:17
원래의
992명이 탐색했습니다.

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

PHP에서 MySQL 데이터베이스 가져오기 최적화: 쿼리를 안정적으로 분할

웹 개발 영역에서는 공유 서버에서 호스팅되는 웹 사이트를 업데이트하는 시나리오가 발생합니다. 데이터베이스 업데이트가 필요합니다. 그러나 외부에서 MySQL에 액세스할 수 없다는 점은 문제를 야기합니다. 이 문제를 해결하려면 PHP를 통해 MySQL 파일을 가져오는 것이 필요합니다. 이 기사에서는 대용량 MySQL 데이터베이스 파일을 개별 쿼리로 분할하고 PHP를 사용하여 이를 가져오는 효율적인 솔루션을 탐색합니다.

문제 설명

목표는 전체 파일을 동시에 열지 않고도 대용량 데이터베이스 파일을 개별 쿼리로 분할합니다. 제약 조건에는 MySQL 명령줄 기능, LOAD DATA INFILE, phpMyAdmin 및 mysqli_multi_query()를 사용할 수 없다는 것이 포함됩니다.

해결책: SplitSQL 함수

해결책은 메모리에 있습니다. - 파일을 한 줄씩 반복하고 쿼리 구분 문자를 식별하는 SplitSQL이라는 친숙한 함수입니다. 구분 기호가 나타날 때까지 행을 배열에 누적하여 완전한 쿼리를 형성합니다. 그런 다음 함수는 쿼리를 실행하고 성공 또는 실패에 대한 피드백을 제공합니다.

구현

<code class="php">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;
}</code>
로그인 후 복사

테스트 및 출력

대규모 phpMyAdmin SQL 덤프로 테스트한 결과 SplitSQL 함수는 성공적인 결과를 얻었습니다. 샘플 입출력은 다음과 같습니다.

테스트 데이터

<code class="sql">CREATE TABLE IF NOT EXISTS "test" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT,
    "name" TEXT,
    "description" TEXT
);

BEGIN;
    INSERT INTO "test" ("name", "description")
    VALUES (";;;", "something for you mind; body; soul");
COMMIT;

UPDATE "test"
    SET "name" = "; "
    WHERE "id" = 1;</code>
로그인 후 복사

출력

SUCCESS: CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT );
SUCCESS: BEGIN;
SUCCESS: INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul");
SUCCESS: COMMIT;
SUCCESS: UPDATE "test" SET "name" = "; " WHERE "id" = 1;
로그인 후 복사

결론

SplitSQL 기능은 대용량 MySQL 데이터베이스 파일을 개별 쿼리로 분할하고 이를 PHP를 사용하여 실행하기 위한 안정적인 솔루션을 제공합니다. 앞서 언급한 제약 조건을 효과적으로 해결하고 데이터베이스 업데이트를 자동으로 가져올 수 있습니다. 이 접근 방식은 공유 호스팅 환경에서 원활한 데이터베이스 유지 관리를 보장합니다.

위 내용은 PHP를 사용하여 대용량 MySQL 파일을 공유 호스팅 환경으로 가져오는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿