Уменьшить размер файла БД


Я пытаюсь скопировать свой живой магазин на другой тестовый сервер

Из-за ограничения пространства на моем тестовом сервере мне нужно уменьшить размер файла БД при импорте БД

Я получил файл БД объемом 2,5 ГБ при сбросе в live store и надеюсь, что смогу получить файл БД объемом менее 1 ГБ

В какой таблице много места и безопасно удалять?

Я уже создаю и копирую свою живую базу данных как другую базу данных на своем живом сервере, поэтому безопасно удалять любые таблицы (например, клиент, заказ)

Я не обязательно иметь все продукты на тестовом сервере (достаточно нескольких продуктов)

Есть ли хороший, безопасный способ уменьшить размер файла БД для создания тестового хранилища?

 4
Author: Yohan, 2015-02-15

4 answers

Таблицы журналов, если их часто не очищать, могут накапливаться и создавать большие размеры базы данных. Как указывали другие, это действительно должно быть обработано magentos cron, если очистка журнала включена в admin, но с целью сокращения вашей резервной копии любые таблицы с префиксом log_ могут быть довольно безопасно усечены.

Кроме того, данные о продажах и клиентах вряд ли понадобятся в среде разработки, поэтому вы можете пропустить их данные в своей резервной копии.

Взгляните на инструмент командной строки magerun, в частности, команда db:дамп. Флаги --strip и --compression могут быть весьма полезны, вы должны иметь возможность значительно уменьшить размер файла дампа.

Например, ./n98-magerun.phar db:dump --compression="gzip" --strip="@development" db.sql пропустит данные во всех таблицах продаж, клиентов и журналов, а также заархивирует файл sql. За кулисами он выполнит команду mysqldump, аналогичную этой:

mysqldump --single-transaction --quick 
--ignore-table=magento_db.catalogsearch_fulltext 
--ignore-table=magento_db.catalogsearch_query 
--ignore-table=magento_db.catalogsearch_result 
--ignore-table=magento_db.core_session 
--ignore-table=magento_db.customer_address_entity 
--ignore-table=magento_db.customer_address_entity_datetime 
--ignore-table=magento_db.customer_address_entity_decimal 
--ignore-table=magento_db.customer_address_entity_int 
--ignore-table=magento_db.customer_address_entity_text 
--ignore-table=magento_db.customer_address_entity_varchar 
--ignore-table=magento_db.customer_entity 
--ignore-table=magento_db.customer_entity_datetime 
--ignore-table=magento_db.customer_entity_decimal 
--ignore-table=magento_db.customer_entity_int 
--ignore-table=magento_db.customer_entity_text 
--ignore-table=magento_db.customer_entity_varchar 
--ignore-table=magento_db.dataflow_batch 
--ignore-table=magento_db.dataflow_batch_export 
--ignore-table=magento_db.dataflow_batch_import 
--ignore-table=magento_db.dataflow_import_data 
--ignore-table=magento_db.dataflow_session 
--ignore-table=magento_db.log_url 
--ignore-table=magento_db.log_url_info 
--ignore-table=magento_db.log_visitor 
--ignore-table=magento_db.log_visitor_info 
--ignore-table=magento_db.log_visitor_online 
--ignore-table=magento_db.newsletter_problem 
--ignore-table=magento_db.newsletter_queue 
--ignore-table=magento_db.newsletter_queue_link 
--ignore-table=magento_db.newsletter_queue_store_link 
--ignore-table=magento_db.newsletter_subscriber 
--ignore-table=magento_db.newsletter_template 
--ignore-table=magento_db.report_compared_product_index 
--ignore-table=magento_db.report_event 
--ignore-table=magento_db.report_viewed_product_aggregated_daily 
--ignore-table=magento_db.report_viewed_product_aggregated_monthly 
--ignore-table=magento_db.report_viewed_product_aggregated_yearly 
--ignore-table=magento_db.report_viewed_product_index 
--ignore-table=magento_db.sales_bestsellers_aggregated_daily 
--ignore-table=magento_db.sales_bestsellers_aggregated_monthly 
--ignore-table=magento_db.sales_bestsellers_aggregated_yearly 
--ignore-table=magento_db.sales_flat_creditmemo 
--ignore-table=magento_db.sales_flat_creditmemo_comment 
--ignore-table=magento_db.sales_flat_creditmemo_grid 
--ignore-table=magento_db.sales_flat_creditmemo_item 
--ignore-table=magento_db.sales_flat_invoice 
--ignore-table=magento_db.sales_flat_invoice_comment  
--ignore-table=magento_db.sales_flat_invoice_grid 
--ignore-table=magento_db.sales_flat_invoice_item 
--ignore-table=magento_db.sales_flat_order 
--ignore-table=magento_db.sales_flat_order_address 
--ignore-table=magento_db.sales_flat_order_grid 
--ignore-table=magento_db.sales_flat_order_item 
--ignore-table=magento_db.sales_flat_order_payment 
--ignore-table=magento_db.sales_flat_order_status_history 
--ignore-table=magento_db.sales_flat_quote 
--ignore-table=magento_db.sales_flat_quote_address 
--ignore-table=magento_db.sales_flat_quote_address_item 
--ignore-table=magento_db.sales_flat_quote_item 
--ignore-table=magento_db.sales_flat_quote_item_option 
--ignore-table=magento_db.sales_flat_quote_payment 
--ignore-table=magento_db.sales_flat_quote_shipping_rate 
--ignore-table=magento_db.sales_flat_shipment 
--ignore-table=magento_db.sales_flat_shipment_comment 
--ignore-table=magento_db.sales_flat_shipment_grid 
--ignore-table=magento_db.sales_flat_shipment_item 
--ignore-table=magento_db.sales_flat_shipment_track 
--ignore-table=magento_db.sales_order_aggregated_created 
--ignore-table=magento_db.sales_order_aggregated_updated 
--ignore-table=magento_db.sales_order_tax 
--ignore-table=magento_db.sales_order_tax_item 
--ignore-table=magento_db.sales_payment_transaction 
--ignore-table=magento_db.sales_recurring_profile 
--ignore-table=magento_db.sales_recurring_profile_order 
--ignore-table=magento_db.sales_refunded_aggregated 
--ignore-table=magento_db.sales_refunded_aggregated_order 
-h'host' -u'username' -p'password' 'magento_db' | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | gzip -c  >> 'db.sql.gz'`
 8
Author: Andrew Kett, 2015-02-15 08:21:37

Из вашего домашнего каталога magento во время сеанса ssh php -f shell/log.php clean

Это автоматически очистит безопасные таблицы mysql в вашей базе данных. Обычно это выполняется через задание cron, но я заметил, что magento любит пренебрегать этим.

 7
Author: Carl Andren, 2015-02-15 05:21:58

Вот что я бы сделал:

1] Усеките таблицы журналов.
Создайте сценарий и поместите его в shell/housekeeping.php

<?php
doSomeHouseKeeping();
function doSomeHouseKeeping() {
    $xml = simplexml_load_file(dirname(__FILE__) . '/../app/etc/local.xml', NULL, LIBXML_NOCDATA);

    if(is_object($xml)) {
        $db['host'] = $xml->global->resources->default_setup->connection->host;
        $db['name'] = $xml->global->resources->default_setup->connection->dbname;
        $db['user'] = $xml->global->resources->default_setup->connection->username;
        $db['pass'] = $xml->global->resources->default_setup->connection->password;
        $db['pref'] = $xml->global->resources->db->table_prefix;

        $tables = array(
            'dataflow_batch_export',
            'dataflow_batch_import',
            'log_customer',
            'log_quote',
            'log_summary',
            'log_summary_type',
            'log_url',
            'log_url_info',
            'log_visitor',
            'log_visitor_info',
            'log_visitor_online',
            'index_event',
            'report_event',
            'report_viewed_product_index',
            'report_compared_product_index',
            'catalog_compare_item',
            'catalogindex_aggregation',
            'catalogindex_aggregation_tag',
            'catalogindex_aggregation_to_tag'
        );

        mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
        mysql_select_db($db['name']) or die(mysql_error());

        foreach($tables as $table) {
            @mysql_query('TRUNCATE `'.$db['pref'].$table.'`');
        }
    } else {
        exit('Unable to load local.xml file');
    }
}

И запустите его как:
php -f shell/housekeeping.php
Примечание: Вы можете использовать инструмент MageRun, но я не буду рекомендовать его для производственной среды.

2] Дамп mysql с использованием сжатия gzip:

mysqldump -u [user] -p[pass] [database] | gzip > [dump-file-name].sql.gz

3] Импортируйте сброшенный файл на конечный сервер:

gunzip < [dump-file-name].sql.gz | -u [user] -p[pass] [database]
 2
Author: MagePsycho, 2015-02-15 07:56:59

Немедленное log.php и методы бд, перечисленные здесь, а также http://docs.nexcess.net/article/magento-database-maintenance.html#sthash.4KDCAaeT.dpuf

Для общей опрятности бд.

В интерфейсе администратора Magento перейдите в раздел Система > Конфигурация.

В левом меню в разделе Дополнительно выберите Система.

В разделе Очистка журнала измените значение Включить очистку журнала на Да и настройте Сохранение журнала в течение 15 дней:

Нажмите кнопку Сохранить Конфигурация.

 0
Author: ladle3000, 2015-02-15 12:53:24