Уменьшить размер файла БД
Я пытаюсь скопировать свой живой магазин на другой тестовый сервер
Из-за ограничения пространства на моем тестовом сервере мне нужно уменьшить размер файла БД при импорте БД
Я получил файл БД объемом 2,5 ГБ при сбросе в live store и надеюсь, что смогу получить файл БД объемом менее 1 ГБ
В какой таблице много места и безопасно удалять?
Я уже создаю и копирую свою живую базу данных как другую базу данных на своем живом сервере, поэтому безопасно удалять любые таблицы (например, клиент, заказ)
Я не обязательно иметь все продукты на тестовом сервере (достаточно нескольких продуктов)
Есть ли хороший, безопасный способ уменьшить размер файла БД для создания тестового хранилища?
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'`
Из вашего домашнего каталога magento во время сеанса ssh php -f shell/log.php clean
Это автоматически очистит безопасные таблицы mysql в вашей базе данных. Обычно это выполняется через задание cron, но я заметил, что magento любит пренебрегать этим.
Вот что я бы сделал:
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]
Немедленное log.php и методы бд, перечисленные здесь, а также http://docs.nexcess.net/article/magento-database-maintenance.html#sthash.4KDCAaeT.dpuf
Для общей опрятности бд.
В интерфейсе администратора Magento перейдите в раздел Система > Конфигурация.
В левом меню в разделе Дополнительно выберите Система.
В разделе Очистка журнала измените значение Включить очистку журнала на Да и настройте Сохранение журнала в течение 15 дней:
Нажмите кнопку Сохранить Конфигурация.