Piszę polecenie pojedynczego wiersza, który tworzy kopie zapasowe wszystkich baz danych w ich odpowiednich nazwach zamiast za pomocą dumpingu wszystko w jednym sql.mysqldump z db w osobnym pliku
Np db1 zapisywane do db1.sql i DB2 zostaje zapisany do db2.sql
tej pory ja zebrane następujące polecenia, aby pobrać wszystkie bazy danych.
mysql -uuname -ppwd -e 'show databases' | grep -v 'Database'
Zamierzam to rury z awk coś zrobić jak
awk '{mysqldump -uuname -ppwd $1 > $1.sql}'
Ale to nie działa.
Jestem nowy na basha, więc mógłbym się mylić w moim myśleniu.
Co należy zrobić, aby eksportować bazę danych w odpowiednich nazwach?
aktualizacja:
Ok, nareszcie udało się to zrobić działając z podpowiedzi poniżej.
Jest to ostatni scenariusz
# 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
odbijając część nie działa choć.
Echo nie działa, ponieważ jest przekierowany do ~/db_backup/$ dbname.sql. Twój mysqldump prawdopodobnie też nie działa - tak jak jest tutaj napisany, jest po prostu argumentem do echa. Polecam użyć argumentu mysqldump --result-file zamiast przekierowania, aby po prostu wyjaśnić, co się dzieje. –
przynajmniej musisz dodać ";" po echo "Dumping $ dbname" – Nadir