最小化数据库,以便从Magento导出所有产品


Minimize database in order to export all products from Magento

我有一个Magento 1.4.0.1网站,我想以CSV格式导出所有产品。我尝试运行导入/导出配置文件,但是php.ini中的max_timeout限制对于运行操作所需的时间来说太低了。由于我的提供商不允许我设置更高的max_timeout,我必须将站点复制到我的本地机器并从那里运行配置文件。

我的本机运行Windows 7和WAMP 2.2

我复制了所有的文件,但是我在导入数据库时遇到了真正的麻烦,因为它有300MB。我将php.ini配置为:

max_execution_time=3600
post_max_size=999M
memory_limit=999M
upload_max_filesize=999M
max_input_time=5000

我重新启动WAMP服务器并通过PhpMyAdmin导入转储,但我仍然得到错误。因此,我的计划是减少数据库的大小,以便有一个功能的后端和所有的产品,并清空所有不重要的表。问题是我不知道哪些是重要的,哪些不是。你能给我列个表,哪些是我必须保留的,哪些是我必须清空的吗?

请注意,因为我在windows上运行WAMP,所以我不可能使用任何SSH命令行内容。

我将分享一个简单的php脚本,我通常使用它来获得占用空间较小的Magento DB转储。

例如,您可以在Magento根目录下创建一个名为:tiny-dump.php的文件,并将脚本粘贴到该文件中。稍后,如果您点击url: http://mydomain.com/tiny-dump.php,就可以运行该脚本…如果一切正常,您将在var/目录下找到一个带有DB转储的sql文件。文件名将包含{数据库名称}-{当前日期}.sql

我使用了本文中的一些想法:http://www.crucialwebhost.com/kb/article/log-cache-maintenance-script/

如果你的主机安装了"mysqldump"

下面是脚本的链接:https://gist.github.com/4495889

脚本如下:

<?php
$xml = simplexml_load_file('./app/etc/local.xml', NULL, LIBXML_NOCDATA);
$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;
function export_tiny() {
global $db;
$sqlFileName =  'var/' . $db['name'] . '-' . date('j-m-y-h-i-s') . '.sql';
$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_compared_product_index',
    'report_viewed_product_index',
    'catalog_compare_item',
    'catalogindex_aggregation',
    'catalogindex_aggregation_tag',
    'catalogindex_aggregation_to_tag'
);
$ignoreTables = ' ';
foreach($tables as $table) {
    $ignoreTables .= '--ignore-table=' . $db['name'] . '.' . $db['pref'] . $table . ' ';
}
$dumpSchema = 'mysqldump' . ' ';
$dumpSchema .= '--no-data' . ' ';
$dumpSchema .=  '-u ' . $db['user'] . ' ';
$dumpSchema .= '-p' . $db['pass'] . ' ';
$dumpSchema .= $db['name'] .' > ' . $sqlFileName;
exec($dumpSchema);

$dumpData = 'mysqldump' . ' ';
$dumpData .= $ignoreTables;
$dumpData .=  '-u ' . $db['user'] . ' ';
$dumpData .= '-p' . $db['pass'] . ' ';
$dumpData .= $db['name'] .' >> ' . $sqlFileName;
exec($dumpData);
}
export_tiny();

已知问题:如果数据库密码包含特殊字符,有时脚本无法创建数据库转储。

希望,这是有用的!