echo "set names utf8mb4;" > test_schema.sql
echo "set names utf8mb4;" > test_data.sql
해당 명령어는 "test"라는 이름의 데이터베이스에 대해 "utf8mb4" 문자 세트를 사용하도록 설정하는 SQL 스크립트인 "schema.sql"을 생성합니다.
- echo: 주어진 텍스트를 표준 출력으로 보내는 명령어입니다.
- "set names utf8mb4;": 데이터베이스 연결에 대한 문자 세트를 "utf8mb4"로 설정하는 SQL 문입니다. "utf8mb4"는 유니코드 문자를 지원하는 문자 세트로서, 이를 사용하면 다양한 언어와 이모지 등의 문자를 저장하고 검색할 수 있습니다.
- >: 리다이렉션 연산자로, 왼쪽에 있는 결과를 오른쪽에 있는 파일로 리다이렉션(전송)합니다.
- test_schema.sql: "test"라는 이름의 데이터베이스에 대한 SQL 스크립트 파일 "schema.sql"을 생성합니다.
따라서 위의 명령어는 "schema.sql" 파일에 "set names utf8mb4;"라는 SQL 문을 작성하여 "test" 데이터베이스에 대해 utf8mb4 문자 세트를 설정합니다.
두 줄의 차이점
위에는 스키마를 설정하는 용도로 사용됩니다.
스키마는 데이터베이스의 구조와 테이블들의 정의를 포함하는 것으로, 데이터베이스의 기본적인 뼈대를 형성합니다.
반면 아래의 경우 데이터베이스에 삽입될 초기 데이터나 데이터 조작 관련 작업에 사용될 수 있습니다. 데이터 파일은 데이터베이스에 저장된 실제 데이터를 포함하며, 데이터베이스의 테이블에 삽입되거나 수정될 수 있는 데이터를 담고 있습니다.
따라서 첫번째 명령어는 데이터베이스 스키마 설정을 위한 파일을 생성하고, 두 번째 명령어는 초기 데이터나 데이터 조작을 위한 파일을 생성하는 차이가 있습니다.
생성되기 원하는 경로로 들어가서 저 명령문을 치면 해당 경로에 .sql 파일이 생성됩니다!
* 그리고 나서 해당 서버의 mysqldump를 뜰 때 참고할 사항
이 때 크론탭의 기본에 대해서 알아야 합니다.
crontab -e를 하면 편집할 수 있는 곳이 로딩되면서 크론탭을 설정할 수 있는 장소가 나옵니다.
crontab -l은 어떤 내용이 들어있는지 알 수 있습니다.
크론탭에서 mysql_backup.sql에 대한 경로를 확인할 수 있는데 이 경로를 참고하여
vi /root/bin/mysql_backup.sh 이라고 치면 backup.sh에 대한 내용을 참고 할 수 있습니다. 내용을 보면 덤프 시 실행 구문에 대해 참고 할 수 있습니다. (mysql_dump)
위에서 mysql_dump의 경로를 맨 앞에 붙여 줍니다.
/mysqldump 파일경로 -u아이디 -해당 서버의 주소 -p비밀번호
/mysqldump 파일경로 -u아이디 -해당 서버의 주소 -p비밀번호 --no-data --default-character-set=utf8 test > test_schema.sql (데이터 베이스의 구조를 백업)
- 'test' 데이터베이스의 스키마 정보만을 백업 파일인 test_schema.sql에 저장하고, 옵션인 no-data~는 데이터를 백업하지 않고 백업 파일의 문자 세트를 utf8로 설정합니다.
/mysqldump 파일경로 -u아이디 -해당 서버의 주소 -p비밀번호 --no-create-info --default-character-set=utf8 test > test_data.sql (데이터를 백업)
- 'test' 데이터베이스의 데이터만을 백업 파일인 test_data.sql에 저장하고, 옵션인 no-create~는 테이블 구조를 백업하지 않고, 백업 파일의 문자 세트를 utf8로 설정합니다.
이제 이 부분들에 대해서 쉘 스크립트로 실행해서 한번에 처리될 수 있도록 만들어 봅니다.
1. vi test.sh 를 쳐서 위의 구문들을 넣어줍니다. i - 작성, :wq - 저장하고 나가기, esc -
예를 들어서
#!/bin/bash (bin 앞에 / 없을 시에 실행이 안되는 문제점이 있었음)
echo "set names utf8mb4;" > test_schema.sql
echo "set names utf8mb4;" > test_data.sql
/mysqldump 파일경로 -u아이디 -해당 서버의 주소 -p비밀번호 --no-data --default-character-set=utf8 test > test_schema.sql
/mysqldump 파일경로 -u아이디 -해당 서버의 주소 -p비밀번호 --no-create-info --default-character-set=utf8 test > test_data.sql
그리고 나서 ./test.sh 라고 쳤더니 허가 거부라는 내용이 나와서 chmod +x test.sh 라고 입력하여 파일을 실행할 수 있는 권한을 주었습니다.권한을 주고난 후 ./test.sh라고 다시 작성하고 실행을 시키면 자동적으로 두 구문이 실행됩니다.
반복 돌리기도 가능하다!#!/bin/bash
dir_path="/home/min"temp_file_path="/home/min/temp.sql"
for file_path in "$dir_path"/*.sql; dosed -i 's/CHARSET=utf8/CHARSET=utf8mb4/g' "$file_path"done
* 덤프 뜨다가 서버에 lock이 걸리는 이유
서버에 lock이 걸리는 이유는 mysqldump 명령어가 실행되는 동안 데이터베이스의 일관성을 유지하기 위해 발생할 수 있습니다. mysqldump는 데이터베이스를 백업하기 위해 데이터베이스 서버와 상호 작용하며, 백업 도중 다른 클라이언트의 데이터베이스 작업이나 변경을 방지하기 위해 lock을 설정합니다.
일반적으로 mysqldump은 테이블 단위로 lock을 설정하여 백업을 수행합니다. 백업 도중 트랜잭션이나 데이터 변경 작업이 발생하면 해당 테이블에 대한 lock이 설정되고, 다른 클라이언트는 해당 테이블에 대한 쓰기 작업을 수행할 수 없습니다. 이는 백업 도중 데이터의 일관성을 보장하기 위한 조치입니다.
따라서 서버에 lock이 걸리는 경우, 다른 클라이언트가 동시에 데이터베이스 작업을 수행할 수 없으므로 일시적으로 데이터베이스 서비스의 성능이 저하될 수 있습니다. 또한, lock이 설정된 테이블에 대한 데이터 변경 작업은 백업이 완료될 때까지 대기해야 합니다.
이러한 상황을 방지하거나 최소화하기 위해서는 백업 작업을 수행하는 시간을 데이터베이스의 부하가 적은 시간대로 조정하거나, 백업을 별도의 읽기 전용 복제본에서 수행하는 등의 전략을 사용할 수 있습니다. 또한, MySQL 데이터베이스의 설정을 조정하여 동시성을 향상시키는 방법도 고려할 수 있습니다.
'TIL > Linux' 카테고리의 다른 글
FTP를 이용하여 서버에 파일을 옮길 때 발생하는 Permission Denied 오류 해결 방법 (0) | 2023.05.21 |
---|---|
root 계정의 ssh 접속 허용 설정 (0) | 2023.05.15 |
day95-rinux (0) | 2023.03.27 |
day94-rinux (0) | 2023.03.22 |
day93-rinux (0) | 2023.03.21 |