공유 웹 호스트에 mysql 데이터베이스가 있습니다. 크기가 너무 커지면 압축이 포함된 단일 덤프 프로세스가 종료됩니다. 각 테이블을 개별적으로 덤프하고 압축하고 싶습니다. 이 명령을 사용하세요
mysqldump -uuser -ppass database < show_tables.sql
다음과 같이 모든 테이블의 이름을 반환하도록 할 수 있습니다.
table1
table2
etc
...
각 줄이 이 구문을 사용하여 명령에 입력되도록 이를 bash 스크립트에 어떻게 입력합니까?
mysqldump -uuser -ppass database table_name_goes_here > and_here.sql
?
편집하다죄송합니다. 원본 형식에 실수를 했습니다. 쿼리의 출력은 show tables
공백으로 구분된 테이블 이름이 포함된 한 줄이 아닙니다. 실제로는 현재 형식과 마찬가지로 한 줄에 하나의 테이블 이름입니다. 혼란을 드려 죄송합니다.
답변1
mysqldump -uuser -ppass database < show_tables.sql |
xargs -I TableName sh -c 'mysqldump -uuser -ppass database TableName > TableName.sql'
답변2
테이블 이름에 개행 문자가 포함될 수 없다고 가정하면,
mysqldump -uuser -ppass database < show_tables.sql |
while IFS= read -r table; do
mysqldump -uuser -ppass database "$table" > and_here.sql
done
답변3
이것수동설명하다
Arrays are assigned to using compound assignments of the form name=(value1 ... valuen),
따라서 명령의 출력을 원하는 위치에 배치할 수 있는 방법이 필요합니다 value1 ... valuen
.
당신은 이것을 할 수 있습니다
databases=( $(mysqldump -uuser -ppass database < show_tables.sql) )
그런 다음 이렇게 반복하십시오.
for database in ${databases[*]}; do
...
done
그러나 테이블 이름이 정말 이상하고 줄 바꿈이 포함되어 있는 경우를 대비하여 이를 사용하여 mysql -Bse
데이터베이스 및/또는 테이블을 나열하고 jw013이 제안한 대로 사용하는 것이 좋습니다(아마 해당 옵션 while read IFS=
없이 ).-r
답변4
mysql database -e 'show tables' | while read table
do mysqldump -uuser -ppass database "$table" -r "$table.sql"
done
테이블의 공백에서도 작동합니다.