별도의 파일에 있는 db가 있는 mysqdump
하나의 SQL에 모든 데이터베이스를 덤프하는 대신 모든 데이터베이스를 각각의 이름으로 백업하는 단일 줄 명령어를 작성하고 있습니다.
예: db1은 db1.sql에 저장되고 db2는 db2.sql에 저장됩니다.
지금까지 모든 데이터베이스를 검색하기 위해 다음 명령을 수집했습니다.
mysql -uuname -ppwd -e 'show databases' | grep -v 'Database'
나는 그것을 어색하게 피울 계획입니다.
awk '{mysqldump -uuname -ppwd $1 > $1.sql}'
하지만 그것은 효과가 없습니다.
저는 욕을 처음 해봐서 제 생각이 틀릴 수도 있어요.
DB를 각자의 이름으로 내보내려면 어떻게 해야 합니까?
업데이트:
좋아요, 마침내 아래 힌트에서 작동할 수 있도록 해야 합니다.
대본입니다.
# replace [] with your own config
# replace own dir to save
# echo doesn't work. hmm...
mysql -u[uname] -p'[pwd]' -e "show databases" \
| grep -Ev 'Database|information_schema' \
| while read dbname; \
do \
echo 'Dumping $dbname' \
mysqldump -u[uanme] -p'[pwd]' $dbname > ~/db_backup/$dbname.sql;\
done
하지만 의 반향 부분은 작동하지 않습니다.
mysql -uroot -N -e 'show databases' | while read dbname; do mysqldump -uroot --complete-insert --some-other-options "$dbname" > "$dbname".sql; done
데이터베이스별로 백업을 생성하는 것이 훨씬 효율적입니다.한 번 필요하면 쉽게 복원할 수 있을 뿐만 아니라 테이블 하나가 손상되거나 손상된 경우 전체 데이터베이스를 백업할 수 있다는 사실도 경험했습니다.또한 데이터베이스별로 백업을 생성하면 해당 데이터베이스에 대한 백업만 중단되고 나머지는 여전히 유효합니다.
mysql 데이터베이스를 백업하기 위해 만든 라인은 다음과 같습니다.
mysql -s -r -u bupuser -pSecret -e 'show databases' | while read db; do mysqldump -u bupuser -pSecret $db -r /var/db-bup/${db}.sql; [[ $? -eq 0 ]] && gzip /var/db-bup/${db}.sql; done
암호가 '비밀'(변경!)인 새 읽기 전용 mysql 사용자 'bupuser'를 만드는 것이 가장 좋습니다.먼저 데이터베이스 목록을 검색합니다.그런 다음 및 를 루프하여 각 데이터베이스에 대해 dump.sql 파일을 /var/db-bup에 생성합니다(변경할 수 있음).또한 오류가 발생하지 않을 때만 파일을 gzip하여 스토리지를 획기적으로 절약할 수 있습니다.일부 데이터베이스에 오류가 발생하면 .sql.qz 파일이 아닌 .sql 파일이 표시됩니다.
다음과 같은 간단한 스크립트를 제공합니다.
- -> dump all DBA ->
SCHEMA_NAME.sql.gz
- [syscommit/sshd_foreign_key_sshd]를 사용하여 가져오기 속도를 높입니다.
- 기본 스키마 제외
파일: Dump_all.sh
사용 방법:
>./.sh -> DB를 덤프합니다.
SCHMA_NAME DB./Dump_all.sh SCHMA_NAME -> SCHMA_NAME DB를 .
#!/bin/bash
MYSQL_USER="root"
MYSQL_PASS="YOUR_PASS"
echo "-- START --"
echo "SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;" > tmp_sqlhead.sql
echo "SET autocommit=1;SET unique_checks=1;SET foreign_key_checks=1;" > tmp_sqlend.sql
if [ -z "$1" ]
then
echo "-- Dumping all DB ..."
for I in $(mysql -u $MYSQL_USER --password=$MYSQL_PASS -e 'show databases' -s --skip-column-names);
do
if [ "$I" = information_schema ] || [ "$I" = mysql ] || [ "$I" = phpmyadmin ] || [ "$I" = performance_schema ] # exclude this DB
then
echo "-- Skip $I ..."
continue
fi
echo "-- Dumping $I ..."
# Pipe compress and concat the head/end with the stoutput of mysqlump ( '-' cat argument)
mysqldump -u $MYSQL_USER --password=$MYSQL_PASS $I | cat tmp_sqlhead.sql - tmp_sqlend.sql | gzip -fc > "$I.sql.gz"
done
else
I=$1;
echo "-- Dumping $I ..."
# Pipe compress and concat the head/end with the stoutput of mysqlump ( '-' cat argument)
mysqldump -u $MYSQL_USER --password=$MYSQL_PASS $I | cat tmp_sqlhead.sql - tmp_sqlend.sql | gzip -fc > "$I.sql.gz"
fi
# remove tmp files
rm tmp_sqlhead.sql
rm tmp_sqlend.sql
echo "-- FINISH --"
이것은 제가 사용하는 것이고, 매우 간단하고 저에게 잘 맞습니다.
mysql --skip-column-names -u root -p -e 'show databases' | while read dbname; do mysqldump --lock-all-tables -u root -p "$dbname"> "$(date +%Y%m%d)-$dbname".sql; done
압축 옵션 포함:
mysql --skip-column-names -u root -p -e 'show databases' | while read dbname; do mysqldump --lock-all-tables -u root -p "$dbname" | gzip> /tmp/"$(date +%Y%m%d)-$dbname".sql.gz; done
명령에 비밀번호를 추가하지 않은 경우, 비밀번호에 데이터베이스의 총 개수를 더한 값을 입력해야 합니다.
이것이 저에게 효과가 있었던 것입니다.
mysql -s -r -uroot -e 'show databases' -N | while read dbname; do
mysqldump -uroot --complete-insert --single-transaction "$dbname" > "$dbname".sql;
done
단 몇 초 만에 효과를 본 가장 빠르고 간단한 해결책이 있습니다.
- FTP 클라이언트 앱 또는 Winscp 앱을 사용하여 FTP를 통해 서버에 로그인합니다.
- https://gist.github.com/daniel-werner/5ab30d2e5c566adaad3022f4da9e141d, 에서 이 스크립트를 다운로드하여 압축을 풀고 .sh 파일을 서버의 /home 디렉토리에 업로드합니다.
- sudo 권한이 있는 계정으로 OS(Linux)에 SSH하고 홈 디렉토리에 CD를 저장합니다.
- chmod +x dump-all 데이터베이스를 사용하여 스크립트를 실행할 수 있도록 합니다.sh 명령
- ./dump-all-databases.sh -u root -o /var/www/db_message_folder...를 사용하여 명령을 실행합니다.참고: 루트를 데이터베이스 사용자 이름으로 바꿉니다.
- Enter 키를 눌러 스크립트를 실행합니다.
- mysql - user 비밀번호를 입력합니다. 즉, 데이터베이스에 액세스할 수 있는 데이터베이스 사용자가 user12인 경우 다음 비밀번호 프롬프트에서 비밀번호를 입력합니다.
- 데이터베이스가 예상대로 덤프되었는지 확인하기 위해 백업 디렉토리를 탐색합니다.
기타 참조 및 신용: https://dev.to/daniel_werner/how-to-dump-all-mysql-databases-into-separate-files-4okc
질문에 대한 답변은 아니지만 AutoMy를 살펴보십시오.휠을 다시 발명하는 대신 소스포지에서 SQL 백업 프로젝트를 수행합니다.원하는 기능을 제공하며 압축, 암호화, 순환 및 전자 메일 알림을 비롯한 수많은 추가 기능을 제공합니다.제가 얼마 전에 사용한 적이 있는데 정말 잘 작동했습니다.
괜찮아 보입니다.현재 테스트하지 않고 찾을 수 있는 유일한 것은 Show Tables 뒤에 세미콜론이 없다는 것입니다.
AutoMy에 사용할 수 있는 패키지를 찾는 동안@Jeshurun이 제안한 SQLBackup 프로젝트 네덜란드를 우연히 발견했습니다.
(저는 네덜란드 남부의 벨기에에 살고 있으며, 때때로 - 또는 더 나은 지역들 - "홀란드"라고 지칭됨)이라는 이름에 흥미를 느껴, 저는 그것을 확인하기로 결정했습니다.아마도 그것은 당신에게도 도움이 될 것입니다.
언급URL : https://stackoverflow.com/questions/10867520/mysqldump-with-db-in-a-separate-file
'programing' 카테고리의 다른 글
수백만 개의 파일이 있는 폴더의 파일 크기와 파일 수를 찾기 위한 PowerShell 스크립트? (0) | 2023.09.04 |
---|---|
JQuery가 모든 Ajax 오류를 검색합니다. (0) | 2023.09.04 |
jDIV에 클래스 "x"가 없는 경우 쿼리 (0) | 2023.09.04 |
6 LEFT JOIN을 사용하는 Maria DB 쿼리가 매우 느림 (0) | 2023.09.04 |
MySQL 쿼리 최적화를 실행하기 위한 대규모 샘플 데이터베이스는 어디서 얻을 수 있습니까? (0) | 2023.09.04 |