як сказав LukeR, опція --no data для mysqldump зробить все, що ви хочете.
щоб додати до цього, ось резервний скрипт, який я написав, що скидає всі бази даних mysql до звичайних текстових файлів, і створює окремі файли дампів для кожної таблиці таблиць бази даних та даних (досить часто потрібно відновити або створити таблиці на іншому сервері mysql БЕЗ дані, і це набагато простіше зробити, коли у вас вже є невеликий файл із лише командами CREATE TABLE / CREATE INDEX тощо)
#! / бін / баш
# backup-mysql.sh
#
# Крейг Сандерс <cas@taz.net.au>
# цей скрипт є загальнодоступним. робіть з нею все що завгодно.
MYUSER = "USERNAME"
MYPWD = "PASSWD"
ARGS = "- одиночна транзакція - flush-logs --complete-insert"
DATABASES = $ (mysql -D mysql --skip-column-names -B -e 'показати бази даних;' | egrep -v 'information_schema');
BACKUPDIR = / var / резервне копіювання / mysql
YEAR = $ (дата + "% Y")
MONTH = $ (дата + "% m")
DAY = $ (дата + "% d")
DATE = "$ YEAR- $ MONTH / $ YEAR- $ MONTH- $ DAY"
mkdir -p $ BACKUPDIR / $ DATE
cd $ BACKUPDIR / $ DATE
для i в $ DATABASES; робити
echo -n "резервне копіювання $ i: схема ..."
mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql
echo -n "дані ..."
mysqldump $ ARGS --skip-opt --no-create-db --no-create-info -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql
відлуння -n "стискання ..."
gzip -9fq $ i.schema.sql $ i.data.sql
відлуння "зроблено".
зроблено
# видалити файли резервного копіювання старше 30 днів
OLD = $ (знайти $ BACKUPDIR -типу d -mtime +30)
if [-n "$ OLD"]; потім
ехо видалення старих резервних файлів: $ OLD
ехо $ СТАРИЙ | xargs rm -rfv
фі