Показать сообщение отдельно
Старый 25.10.2012, 12:52   #9
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

А ведь в исходном вопросе речь шла не про чистку как таковую, а про бэкап базы без лишних данных.

Еще раз про мой рецепт подробнее и с примером.
Суть в том, что бы дампить таблицы содержание которых нам в бэкапе не нужно без данных (только структуру), остальные таблицы бэкапить с данными.

Пример bash скрипта для этой цели:

Код:
# юзер базы данных + пароль
USER=user
PASSWORD=pass
CHARSET=cp1251

# куда сохранять бэкапы - желательно за пределами htdocs
BACKUP=/home/userX/dump

date '+%Y-%m-%d %T'
echo "Backup databases to $BACKUP"
    
# делаем выборку списка баз, исключаем не нужные в бэкапе (как минимум information_schema)
for database in `mysql -u $USER -p$PASSWORD -e'SHOW DATABASES;' | grep -v information_schema | grep -v something`;
do
	mkdir --mode=777 $BACKUP/$database
	cd $BACKUP/$database

    for table in `mysql -u $USER -p$PASSWORD $database -e'SHOW TABLES;'`;
    do
    	### exclude empty tables 
    	if [[ $table == cache_* || $table == tx_realurl_* || $table == tx_tcdirectmail_clicklinks || $table == tx_tcdirectmail_sentlog ]];
		then
			echo ''
			echo "mysqldump --opt --no-data -u $USER -p$PASSWORD $database $table > $table.sql;"
			mysqldump --default-character-set=$CHARSET --opt --no-data -u $USER -p$PASSWORD $database $table > $table.sql
			date '+%Y-%m-%d %T'
			echo "gzip --force $table.sql;"
			gzip --force $table.sql
			date '+%Y-%m-%d %T'

		### else full data export
		else
			echo ''
			echo "mysqldump --default-character-set=$CHARSET --add-locks --skip-comments --skip-extended-insert --hex-blob --add-drop-table --quick  -u $USER -p$PASSWORD $database $table > $table.sql;"
			mysqldump --default-character-set=$CHARSET --add-locks --skip-comments --skip-extended-insert --hex-blob --add-drop-table --quick  -u $USER -p$PASSWORD $database $table > $table.sql
			date '+%Y-%m-%d %T'
			echo "gzip --fast --force $table.sql;"
			gzip --fast --force $table.sql
			date '+%Y-%m-%d %T'
		fi
	done
done
В примере строчки с date и echo только для логгирования работы (можно получать на почту результат cron задания).

В результате в BACKUP папке создается структура папок с названими всех нужных баз данных. В каждой папке для каждой таблицы создается отдельный архив. BACKUP папка скачивается раз в день по расписанию по FTP.
dmartynenko вне форума   Ответить с цитированием