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

Posted

技术标签:

【中文标题】最小化数据库以便从 Magento 导出所有产品【英文标题】:Minimize database in order to export all products from Magento 【发布时间】:2012-12-24 01:03:51 【问题描述】:

我有一个 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 命令行内容。

【问题讨论】:

【参考方案1】:

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

例如,您可以在 Magento 根目录中创建一个名为 tiny-dump.php 的文件,并将脚本粘贴到该文件中。稍后,如果您点击 url,您可以运行脚本:http://mydomain.com/tiny-dump.php ...如果一切正常,您将在 var/ 目录中找到一个带有 DB 转储的 sql 文件。文件名将包含 DB name-current date.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();

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

希望对您有所帮助!

【讨论】:

你错过了结束 ?&gt; 标记,但我已经添加了它,执行了脚本并且什么也没发生(没有错误,但也没有转储)关于如何调试的任何想法? @Bogdan 最好不要关闭 php 标签,如果 php 文件中只有 php 代码,请检查:***.com/questions/4410704/… 你能把这个放在开始的php标签后面吗:ini_set('display_errors', 1); ...它应该显示是否有任何错误。 我仍然看到一个空白文件:检查一下:visagestudio.ro/tiny-dump.php。顺便说一句,值得注意的是,这是一个 Magento 1.4.0.1 站点。 您是否可以通过 FTP 访问商店的文件系统?您是否检查了 var/ 目录中的任何 .sql 文件?商店也是基于linux还是windows?

以上是关于最小化数据库以便从 Magento 导出所有产品的主要内容,如果未能解决你的问题,请参考以下文章

从 Magento 导出订单以进行装运

Magento - 使用 cronjob 将产品(使用 Dataflow)导出到 CSV

Magento 2 从搜索页面获取所有产品

从类别中加载所有产品并按 Magento 中选定的多选属性进行过滤

Magento 高级数据流配置文件不起作用

如何在magento中对库存状态的产品集合进行排序