sourcetip

mysqdump에 없는 경우 테이블 만들기

fileupload 2023. 9. 15. 21:16
반응형

mysqdump에 없는 경우 테이블 만들기

내 sqdump에 적절한 테이블 만들기 옵션 [만약 존재하지 않는다면]을 추가할 수 있는 방법이 있는지 궁금합니다.무슨 생각 있어요?

SQL 파일에서 이를 사용해 보십시오.

sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>

혹은 저장하기 위해

sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>

이상적이지는 않지만 효과는 있습니다 :P

소식통에 따르면 mysqldump에는 이 옵션이 없습니다.

당신은 사용할 수 있습니다.--force덤프 파일을 다시 가져올 때 옵션을 선택합니다. 여기서 MySQL은 중복 테이블을 만들기 위해 발생한 오류를 무시합니다.그러나 이 방법을 사용하면 다른 오류도 무시됩니다.

그렇지 않으면 모든 경우를 대체하는 스크립트를 통해 덤프 파일을 실행할 수 있습니다.CREATE TABLE와 함께CREATE TABLE IF NOT EXISTS.

사용.sed@Paewel이 설명한 대로 잘 작동합니다.그럼에도 불구하고 데이터를 절대적으로 필요한 것보다 더 많은 잠재적 오류 소스를 통해 전달하는 것이 마음에 들지 않을 수도 있습니다.이 경우 두 개의 개별 덤프를 사용할 수 있습니다.

  • 테이블 정의가 들어 있는 첫 번째 덤프(--no-data --skip-add-drop-table)
  • 데이터만 있는 두 번째 덤프(--no-create-info --skip-add-drop-table)

하지만 주의해야 할 사항이 몇 가지 있습니다(예: 트리거).자세한 사항은 설명서를 확인합니다.

당신이 원하는 것이 아니라, 당신과 함께.--add-drop-table모든 CREATE에는 그에 따른 DROP TABLE 문이 앞에 붙습니다.

그렇지 않으면 간단한 검색/바꾸기(예:sed).

덤프 출력은 DROP과 CREATE의 조합이므로 DROP 문을 제거하고 CREATE 문을 변경하여 유효한 (논리적인) 출력을 구성해야 합니다.

 mysqldump --no-data -u root <schema> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /'| sed 's/^DROP TABLE IF EXISTS /-- DROP TABLE IF EXISTS /' > <schema>.sql

이것으로 bash 스크립트를 만듭니다.예: dump.shtouch dump.sh

실행 가능한지 확인합니다.chmod 0750 dump.sh

dump.sh :

#!/bin/bash

name="mysqldump_${HOSTNAME}_$(date +'%Y-%m-%d_%H-%M').sql"
echo "Using filename: ${name}"
mysqldump --replace --skip-add-drop-table --skip-comments izon -p > "${name}"
sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' "${name}"

그 끝에 'g'(global)가 없으면 이들은 훨씬 더 빨라질 것입니다.

예:

mysqldump -e <database> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /' > <database>.sql 

PowerShell을 사용하여 Windows 7에서 텍스트 찾기 및 바꾸기

명령 프롬프트를 열고 아래 명령을 사용합니다.

powershell -Command "(gc E:\map\map_2017.sql) -replace 'CREATE TABLE', 'CREATE TABLE IF NOT EXISTS' | Out-File E:\map\map_replaced.sql"
  • 첫 번째 매개 변수는 파일 경로입니다.

  • 두 번째 매개 변수는 'find string'입니다.

  • 세 번째 매개 변수는 'replace string'입니다.

이 명령은 대체된 텍스트로 새 파일을 만듭니다.동일한 파일에 내용을 교체하여 저장하려면 '|'(파이프)부터 시작하는 Command를 제거합니다.

언급URL : https://stackoverflow.com/questions/2220469/create-table-if-not-exists-from-mysqldump

반응형