Вход

Просмотр полной версии : Что можно очистить в typo3 (на сервере|в БД) - для создания Бэкапа


Ивано
23.10.2012, 12:26
Раз в день приходится делать бэкап (копирую папки с сервера, БД - через adminer делаю выгрузку).

Что бы существенно уменьшить вес бэкапа
На сервере копирую все кроме папки typo3temp
В базе данных перед копированием очищаю таблицы sys_log и sys_history
Что еще можно очищать из временных данных и что за таблицы:

cache_extensions
cache_imagesizes
cache_md5params
cache_treelist
cache_typo3temp_log
cf_cache_hash
cf_cache_hash_tags
cf_cache_pages
cf_cache_pages_tags
cf_cache_pagesection
cf_cache_pagesection_tags
cf_extbase_object
cf_extbase_object_tags
cf_extbase_reflection
cf_extbase_reflection_tags
cf_workspaces_cache
cf_workspaces_cache_tags

dmartynenko
23.10.2012, 14:02
Чистить кэши = замедлять работу сайта пока кэши снова не наполнятся.

Лучше напишите простенький скрипт-обертку для mysqldump и делайте выгрузку всех таблиц полностью, а *cache* таблиц только как "CREATE TABLE".

К вашему списку я бы добавил cache_pages, и tx_realurl***cache

-=UncleByte=-
23.10.2012, 16:24
Обычно самая большая таблица на не нагруженных проектах это cache_extensions - ее записи можно смело выкинуть при бэкапе.

Ивано
23.10.2012, 19:53
В общем после очистки БД все начинает весить примерног на 25% меньше...
Это уже хорошо!

Спасибо!

Андрей Аксенов
24.10.2012, 12:05
Может так проще:
http://xn--80abcjdogk0b.xn--80afg4bgm.xn--p1ai/blog/blog-post/2011/01/21/uproshchenie-rezervirovanija-bazy-dannykh-pri-pomoshchi-sypex-dump/
Как уже писал, БД использует InnoDB, что подразумевает постоянное разрастание размера файла БД... Решить это можно лишь периодическим созданием резервной копии и воссозданием БД из нее...
Может я где-то и ошибаюсь, но других решений не нашел, а вот инструментик для БД хороший...

-=UncleByte=-
24.10.2012, 22:10
Может так проще:
http://xn--80abcjdogk0b.xn--80afg4bgm.xn--p1ai/blog/blog-post/2011/01/21/uproshchenie-rezervirovanija-bazy-dannykh-pri-pomoshchi-sypex-dump/
Как уже писал, БД использует InnoDB, что подразумевает постоянное разрастание размера файла БД... Решить это можно лишь периодическим созданием резервной копии и воссозданием БД из нее...
Может я где-то и ошибаюсь, но других решений не нашел, а вот инструментик для БД хороший...

В принципе для InnoDB есть прекрасные рецепты - http://www.dmitry-dulepov.com/2012/01/cleaning-and-optimising-cache-tables-in.html

Андрей Аксенов
24.10.2012, 23:29
Та же ерунда, вид сбоку... Сервер нужно останавливать, ну так какая разница - конвертить БД несколько раз, или просто зарезервировать и воссоздать?

-=UncleByte=-
25.10.2012, 01:40
Сервер в рецепте нужно остановить один раз, далее очистка просто производиться конвертацией таблиц двойной без необходимости остановки. Рецепт, отмечу, предназначен не для переноса, но для работающего сайта.
А SypexDumper - бесспорно замечательный инструмент, сам пользуюсь и всем тут советовал раньше.

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

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

Пример 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.

Ивано++
23.02.2013, 18:48
Еще можно очистить

cache_extensions
sys_log
sys_history
tx_realurl_errorlog

+ можно выключить ведение логов для sys_log

Илья
24.02.2013, 12:29
+ можно выключить ведение логов для sys_log
Недавно в одном небольшом проекте видел раздувшуюся до 1000Мб sys_log :rolleyes:

dmartynenko
25.02.2013, 12:36
Часто бывает при обновлении на 4.5-4.6 в лог начинают писаться всякие сообщения про deprecated методы. При этом все работает как обычно, а в логи редко кто заглядывает.

Ивано++
25.02.2013, 13:14
Вот удивительно - вроде ведение логов отключено...


$TYPO3_CONF_VARS['SYS']['displayErrors'] = '0';
$TYPO3_CONF_VARS['SYS']['devIPmask'] = '';
$TYPO3_CONF_VARS['SYS']['errorHandler'] = '';
$TYPO3_CONF_VARS['SYS']['debugExceptionHandler'] = '';
$TYPO3_CONF_VARS['SYS']['productionExceptionHandler'] = '';
$TYPO3_CONF_VARS['SYS']['systemLog'] = '';
$TYPO3_CONF_VARS['SYS']['enable_errorDLOG'] = '0';
$TYPO3_CONF_VARS['SYS']['enable_exceptionDLOG'] = '0';
$TYPO3_CONF_VARS['SYS']['enableDeprecationLog'] = '0'; //Сообщаяе системе что бы она не вела служебные логи
$TYPO3_CONF_VARS['SYS']['setMemoryLimit'] = '128'; //Максимальное время работы

А в таблицу всеравно что-то пишется в таблицу sys_log...

Ивано++
24.03.2013, 23:27
Можно еще очистить:
sys_ter
sys_lockedrecords
sys_history (не желательно, но можно - наверное!)

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

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

Пример 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.

Если это получается на раз, два три - то это круто...