본문 바로가기

Backend/DB 실무

[MySQL] bat파일을 이용한 export import

반응형

MySQL 에러

1) Could not acquire management access for administration

RuntimeError: Unable to execute command chcp.

 

workbranch 실행에 로그인 까지 잘되는데 스키마 접속등 다른 것들이 작동하지 않는다

나의 경우에는 서비스도 잘 올라와있고, 환경설정에서 Path도 잘 적용되어 있었다.

런타임에러는... 복합적으로 나오는 에러 같아 완전 삭제 후 재설치를 권장...

 

하지만 나의 경우에는 맞는 케이스가 아닌지 전부 시도했지만 증상은 동일했다.

 

참고 블로그 : 설치과정에서 나오는 트러블슈팅을 잘 정리해 놓으신 글을 보았다.
https://velog.io/@timointhebush/MySQL-%EC%82%AC%ED%88%AC%EA%B8%B0

 

MySQL 설치하며 마주친 오류와 해결

사건의 발단 현재 진행중인 프로젝트를 위해 MySQL을 연동해야 했다. 지난 학기 수업에서 MySQL을 사용한 경험이 있어 금방 끝날 것 이라 생각했지만... 다시 생각해보니 그건 맥북이었고 현 방학때

velog.io

 

2) 

ERROR 1046 (3D000) : No database selected

DB선택이 되지 않아 조회가 안된다 함

mysql> use DB명;

으로 DB잡고 조회하면 나타남

 

 

MySQL DB복사하는 배치파일

# Linux
# 복사 대상 DB 정보
export SOURCE_DB_HOST=source_host
export SOURCE_DB_USER=source_user
export SOURCE_DB_PASSWORD=source_password
export SOURCE_DB_NAME=source_database

# 대상 DB 정보
export TARGET_DB_HOST=target_host
export TARGET_DB_USER=target_user
export TARGET_DB_PASSWORD=target_password
export TARGET_DB_NAME=target_database

# 테이블 목록
export TABLE_LIST="테이블1 테이블2 ..."

# 테이블 리스트 만큼 복사
for TABLE in $TABLE_LIST; do
# Target에 테이블이 있다면 삭제
  mysql -h $TARGET_DB_HOST -u $TARGET_DB_USER -p$TARGET_DB_PASSWORD $TARGET_DB_NAME -e "DROP TABLE IF EXISTS $TABLE;"
# 복사
  mysqldump -h $SOURCE_DB_HOST -u $SOURCE_DB_USER -p$SOURCE_DB_PASSWORD $SOURCE_DB_NAME "$TABLE" \
  | mysql -h $TARGET_DB_HOST -u $TARGET_DB_USER -p$TARGET_DB_PASSWORD $TARGET_DB_NAME
done

:: WINDOWS
:: 복사 대상 DB 정보
set SOURCE_DB_HOST=source_host
set SOURCE_DB_USER=source_user
set SOURCE_DB_PASSWORD=source_password
set SOURCE_DB_NAME=source_database

:: 대상 DB 정보
set TARGET_DB_HOST=target_host
set TARGET_DB_USER=target_user
set TARGET_DB_PASSWORD=target_password
set TARGET_DB_NAME=target_database

:: 테이블 목록
set TABLE_LIST=테이블1 테이블2 ...

:: 테이블 리스트 만큼 복사
for %%i in (%TABLE_LIST%) do (
:: Target에 테이블 존재하면 삭제
  mysql -h %TARGET_DB_HOST% -u %TARGET_DB_USER% -p%TARGET_DB_PASSWORD% %TARGET_DB_NAME% -e "DROP TABLE IF EXISTS %%i;"
:: 복사
  mysqldump -h %SOURCE_DB_HOST% -u %SOURCE_DB_USER% -p%SOURCE_DB_PASSWORD% %SOURCE_DB_NAME% "%%i" ^
  | mysql -h %TARGET_DB_HOST% -u %TARGET_DB_USER% -p%TARGET_DB_PASSWORD% %TARGET_DB_NAME%
)

Linux든 Windows든 MySQL에서는 복사할때 테이블정보를 큰따옴표("")로 묶으면 테이블 명이 유지된다

하지만 utf8_general_ci는 대소문자를 구분하지 않는 일반적인 콜레이션이기에 해당 콜레이션으로 되어있다면 변화가 없을 수 있다

 

추가 정보>

1) 임시파일을 이용한 복사방법

# Linux
# 변수 설정은 동일
# 테이블 복사
for TABLE in $TABLE_LIST; do
  mysqldump -h $SOURCE_DB_HOST -u $SOURCE_DB_USER -p$SOURCE_DB_PASSWORD \
    --default-character-set=utf8 --skip-set-charset --skip-quote-names \
    --result-file=dump.sql $SOURCE_DB_NAME "$TABLE"
  
  mysql -h $TARGET_DB_HOST -u $TARGET_DB_USER -p$TARGET_DB_PASSWORD \
    --default-character-set=utf8 --skip-set-charset --init-command="SET sql_mode='ANSI_QUOTES';" $TARGET_DB_NAME < dump.sql
done

# 임시 파일 삭제
rm dump.sql


:: WINDOWS
:: 변수 설정은 동일
:: 테이블 복사
for %%i in (%TABLE_LIST%) do (
  mysqldump -h %SOURCE_DB_HOST% -u %SOURCE_DB_USER% -p%SOURCE_DB_PASSWORD% ^
    --default-character-set=utf8 --skip-set-charset --skip-quote-names ^
    --result-file=dump.sql %SOURCE_DB_NAME% "%%i"
  
  mysql -h %TARGET_DB_HOST% -u %TARGET_DB_USER% -p%TARGET_DB_PASSWORD% ^
    --default-character-set=utf8 --skip-set-charset --init-command="SET sql_mode='ANSI_QUOTES';" %TARGET_DB_NAME% < dump.sql
)

:: 임시 파일 삭제
del dump.sql

 

반응형

'Backend > DB 실무' 카테고리의 다른 글

[Query] 초를 시간과 분으로 변환  (0) 2024.04.25
[DBeaver] Connection Error  (0) 2024.03.28
[SQL] 문자 처리  (0) 2024.03.18
[Mybatis] 쿼리문  (0) 2024.02.28
[SQL] SELECT한 결과 Insert 혹은 Update  (0) 2024.02.28