TIDB 데이터베이스에 데이터를 가져오는 예를 기록합니다.

5314 단어
데이터 내보내기
오늘 Mysql의 한 라이브러리에서 시계를 내보낸 지 20분 정도 걸렸습니다. 잠시 기다린 끝에 드디어 내보냈습니다.파일의 크기를 보려면 다음과 같이 하십시오.
[tidb@:vg_adn_CkhsTest ~]$du -h ./creative_output.sql 
41G    ./creative_output.sql

이 서류는 상당히 큰 것으로 41G 정도 된다.
내보내는 명령은 간단합니다. mysqldump -hhost-uname -ppwd 테이블 이름 > xxx.sql
이렇게 해서 나온 것이니 우리는 결과를 기다리기만 하면 된다.
데이터베이스를 내보내려면 mysqldump -hhost-uname -ppwd - 데이터베이스 라이브러리 이름 > xxx를 사용해야 합니다.sql.그러니까 매개 변수를 하나 더 넣은 거야.
 
데이터 가져오기
mysqldump에서 내보낸 데이터를 사용합니다. 열어 보면 테이블 구조가 포함되어 있습니다. Csv와 같은 순수한 텍스트 데이터가 아닙니다. 따라서 source 명령을 사용하여 데이터를 가져오면 됩니다.
본인이 데이터 백업과 복구 명령을 몇 개 헷갈려서 워낙 빨리 끝내는 일이 몇 시간 걸렸어요.구덩이를 많이 밟았지만 그래도 수확이 있었다.
주의: mysqldump에서 내보낸 데이터는 테이블 구조를 포함하는 데이터이며, 이외에 mysql의 상태 매개 변수 등도 포함되어 있습니다.순수한 텍스트 데이터가 아닙니다.그래서 여기에서 나는 처음에loaddata 명령을 사용하여 데이터를 가져왔는데, 항상 오류가 발생하는 것을 발견했다.로드데이터 명령은 물론이고 매개 변수가 많습니다.
loaddata 파라미터를 사용하여 데이터를 가져올 때 가져온 파일이 순수한 텍스트 파일인지 확인해야 합니다. loaddata는 csv 형식과 비슷한 텍스트만 가져올 수 있습니다.이런 유형의 텍스트는 데이터만 있기 때문에 먼저 데이터베이스를 만든 다음에 테이블 구조도 만들어야 한다. 나는 이번에 테이블 구조를 만든 후에 데이터를 가져오려고 시도했다. 이 과정에서 나는 이상하다고 느꼈다. 왜냐하면 나도 이전에 테이블 백업을 했기 때문이다. 그때 나는 테이블을 만들지 않고 바로 테이블을 데이터베이스에 가져오면 된다.근데 어떻게 도입했는지 기억이 안 나요.나중에 인터넷에서 찾아봤는데 로드데이터 명령을 가져올 수 있어서 계속 구덩이를 밟았어요.load 데이터 명령에서 오류가 계속 순환합니다.
그래서 여기서 mysqldump에서 내보낸 데이터는 mysql 명령(클라이언트가 데이터베이스에 로그인하지 않았음)이나source 명령(클라이언트가 mysql를 링크한 후)으로 데이터를 가져옵니다.
1. 먼저 오류가 발생합니다.
# mysqlimport -uabc -p'123' -h db1 -P 3306 DB a.txt
mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table:

mysql에서 데이터를 가져오는 디렉터리를 제한했기 때문에 수정하면 됩니다.
secure-file-priv 매개 변수를 살펴보겠습니다.
> show global variables like 'secure_file_priv';
+------------------+-----------+
| Variable_name    | Value     |
+------------------+-----------+
| secure_file_priv | /dev/null |
+------------------+-----------| 

 
이 매개변수는 동적 매개변수가 아닙니다.서비스를 다시 시작하려면 설정 파일을 추가해야 합니다.
1) 가져오기 및 내보내기 제한 없음
# cat /etc/my.cnf
    [mysqld]
    secure_file_priv = ""

2) 특정 디렉토리로 제한
# cat /etc/my.cnf
    [mysqld]
    secure_file_priv    = /tmp

-/tmp 디렉토리의 데이터 파일만 가져올 수 있고 다른 디렉토리의 파일은 가져올 수 없습니다.
2. load 데이터에서 오류가 발생했습니다. 예를 들어 다음과 같습니다.
>load  data .........................
error(2013):Lost connection to MySQL server during query

이런 오류는 클라이언트가 mysql 데이터베이스에 연결할 때 지연되는 오류입니다.좀 더 깊이 들어가면 sql문장의 조작 시간이 너무 길고 조회나 가져온 문장이 너무 커서 일어난 것이다.
우리는 이렇게 할 수 있다.
먼저 max 보기allowed_packet의 값은 다음과 같습니다.
show VARIABLES like '%max_allowed_packet%'; 

만약 당신이 비교적 작다고 생각한다면 mysql 클라이언트에서 maxallowed_패키지 등 몇 가지 설정이 비교적 큰 값입니다.KB 단위
예를 들면 다음과 같습니다.
set global max_allowed_packet = 50000000

set global wait_timeout=2880000
set global interactive_timeout = 2880000

이 세 가지 중에서 우리는 첫 번째를 설정해야 한다. 첫 번째 설정의 값을 좀 크게 설정해야 한다. 위의 이 예는 내가 이미 설정한 것이다. 네가 알아내면 이렇게 크지 않을 것이다. 왜냐하면 나의 파일은 40여 개의 G이기 때문에 나는 50G의 크기로 설정했다. 일반적으로 파일의 크기에 따라 설정한다.
만약 첫 번째 설정을 한 후에도 같은 문제가 발생한다면 나머지 두 개의 값도 좀 크게 설정해야 한다.주의: 내 위에는 내가 이미 설치한 것이 비교적 크다.
마지막으로 설정이 끝난 후에 클라이언트를 종료하고 다시 연결해야 효력이 발생합니다. (mysql 데이터베이스를 다시 시작하는 것이 아닙니다.) 다시 연결한 후에 이 값이 수정된 값으로 변하는 것을 발견할 수 있습니다.그러나 mysql을 다시 시작하면 이 값이 다시 복원됩니다. 따라서 영구적으로 적용되려면 설정 파일에 이 세 개의 인자를 추가하는 것이 좋습니다.
 
저에게 있어서 가져온 데이터는loaddata 명령을 사용해서 가져오지 말아야 합니다. 위의 상황이 발생했기 때문에 파라미터를 수정했지만 해결되지 않았습니다. 그리고 제 시스템의 오류 보고가 매우 빠릅니다. 바로loaddata 명령을 실행한 후에 바로 오류를 반환하는 것입니다. 여러분은 주의해야 합니다. 지연 시간을 초과하지 않으면 오류가 발생할 수 있습니다.그 자체가 수상합니다.
이번 실험액은 두 명의 블로거를 참고했다.
https://blog.csdn.net/lovemysea/article/details/79121154
https://www.aliyun.com/jiaocheng/1125866.html
참조 연결:http://blog.51cto.com/11580138/1931925
전재 대상:https://www.cnblogs.com/FengGeBlog/p/9965656.html

좋은 웹페이지 즐겨찾기