>  기사  >  백엔드 개발  >  대규모 데이터 가져오기 및 내보내기를 구현하는 PHP+MySQL 요약

대규모 데이터 가져오기 및 내보내기를 구현하는 PHP+MySQL 요약

little bottle
little bottle앞으로
2019-04-16 13:25:242591검색

얼마 전부터 테스트를 위해 프로덕션 환경에서 테스트 서버로 일부 데이터를 전송해야 할 필요성이 있었습니다. 특정 계정의 데이터만 가져오면 되기 때문에, 데이터를 SQL 문으로 모아서 SQL 파일로 내보낸 다음, 테스트 서버로 전송하고 MySQL로 가져오는 스크립트를 작성할까 생각했습니다. 상상은 아름답지만 과정은 고통스럽다.

PHP 스크립트 처리

1. 스크립트의 아이디어는 특정 계정 데이터를 쿼리하고 이를 조합하여 SQL 텍스트 데이터로 연결하는 것입니다. 일부 필드에는 '(작은따옴표), "(큰따옴표), `(왼쪽 상단에서 두 번째 문자)와 같은 일부 잘못된 문자가 포함되어 있으므로 쿼리 값을 필터링해야 합니다. 키보드) 이러한 기호는 서로 이어져 있는데, sql 문을 만들면 클로저의 반대쪽 끝을 찾을 수 없기 때문에 값이 변경되어 sql 문을 이어붙이는 데 문제가 발생합니다. str_replace() 함수를 사용하여 이러한 기호를 비워 둡니다.

2

. is_numeri 함수를 사용하여 값이 숫자 유형 구조인지 확인하는 경우 ""(큰따옴표)를 추가하지만 문제가 있습니다. is_numeri. 일부 값에 문자 e가 있으면 true를 반환합니다.

""를 추가하지 않으면 MySQL에 값을 삽입할 수 없기 때문에 문제가 있는 것으로 나타났습니다. 값을 추가해야 하는지 확인하기 위해 is_float() 및 is_string() 함수를 동시에 추가했습니다.

3

내보낸 데이터의 양이 많아서 4개의 PHP로 나눴습니다. 이는 많은 시간을 절약할 수 있지만 동시에 여러 프로세스가 텍스트 파일을 작성하면 데이터 손실이 발생할 수 있으므로 SQL 텍스트도 구별해야 한다는 점에 유의해야 합니다. (나중에 알고 보니 데이터를 채우는 데 시간이 많이 걸렸습니다.)

4 tar -xcvf 명령을 사용하여 sql 파일을 압축하고 패키지하면 700MB 이상까지 압축할 수 있습니다. 압축 효과는 여전히 좋습니다.

PHP 비디오 튜토리얼

데이터를 MySQL로 가져오기

1

데이터의 양이 상대적으로 많기 때문에 데이터를 실행하는 데에는 여러 프로세스가 사용됩니다. sql 파일에는 use 데이터베이스가 포함되어 있습니다. 여기서는 use 데이터베이스를 사용할 필요가 없습니다.

source 명령을 통해 여러 파일을 가져오고 저장할 수 있습니다. 예:

    mysql>source D:/www/sql/data.sql;

이 방법으로 하나의 소스 명령으로 여러 sql 파일을 가져올 수 있습니다.

프로세스 중에 몇 가지 문제도 있었습니다.

나타난:

mysql Got a packet. 'max_allowed_packet'바이트보다 큼

확인해 보니 단일 테이블의 데이터 양이 크기 때문입니다. 일반적으로 mysql은 단일 테이블에 많은 양의 데이터가 있는 SQL을 제한할 것이라고 생각됩니다.

해결책:

max_allowed_packet 패키지 크기 변경

옵션 1, 임시 수정: set global max_allowed_packet = size; 명령을 입력합니다. (여기서 크기는 바이트 단위로만 채울 수 있습니다. mysql 서비스를 다시 시작한 후에는 구성이 무효화됩니다!) 옵션 2, my.ini 파일 수정, [mysqld] 섹션에 max_allowed_packet=size

2

추가 다음과 같이 sh

    source c:/1.sql;
    source c:/2.sql;

를 가져오면 나중에 문제 해결을 용이하게 하는 몇 가지 오류 메시지를 찾을 수 있습니다.

mysql 비디오 튜토리얼

위 내용은 대규모 데이터 가져오기 및 내보내기를 구현하는 PHP+MySQL 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제