【问题标题】:How to correctly backup Magento database using PHP如何使用 PHP 正确备份 Magento 数据库
【发布时间】:2013-08-14 05:56:53
【问题描述】:

问题是当我使用类似的东西进行转储时:
shell_exec("mysqldump -uuser {$backup_db} > {$sql_name}");

然后在安装商店时使用此代码:
shell_exec("mysql -u user -ppass -h localhost {$dbName} < {$storeName}.sql");

它没有正确安装 - 打开 Magento 时出现异常:

    a:5:{i:0;s:206:"Error in file: "/home/vhosts/username/11300N_test/app/code/core/Mage/Admin/sql/admin_setup/install-1.6.0.0.php" - SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'admin_assert' already exists";i:1;s:1024:"#0 /home/vhosts/username/11300N_test/app/code/core/Mage/Core/Model/Resource/Setup.php(645): Mage::exception('Mage_Core', 'Error in file: ...')
    #1 /home/vhosts/username/11300N_test/app/code/core/Mage/Core/Model/Resource/Setup.php(421): Mage_Core_Model_Resource_Setup->_modifyResourceDb('install', '', '1.6.1.1')
    #2 /home/vhosts/username/11300N_test/app/code/core/Mage/Core/Model/Resource/Setup.php(327): Mage_Core_Model_Resource_Setup->_installResourceDb('1.6.1.1')
    #3 /home/vhosts/username/11300N_test/app/code/core/Mage/Core/Model/Resource/Setup.php(235): Mage_Core_Model_Resource_Setup->applyUpdates()
    #4 /home/vhosts/username/11300N_test/app/code/core/Mage/Core/Model/App.php(417): Mage_Core_Model_Resource_Setup::applyAllUpdates()
    #5 /home/vhosts/username/11300N_test/app/code/core/Mage/Core/Model/App.php(343): Mage_Core_Model_App->_initModules()
    #6 /home/vhosts/username/11300N_test/app/Mage.php(683): Mage_Core_Model_App->run(Array)
    #7 /home/vhosts/username/11300N_test/index.php(87): Mage::run('', 'store')
    #8 {main}";s:3:"url";s:28:"/11300N_test/index.php/admin";s:11:"script_name";s:22:"/11300N_test/index.php";s:4:"skin";s:7:"default";}


另外我应该补充一点,这仅适用于企业版 - 使用此代码可以正常安装 CE 商店。
另外我应该注意,当我手动进行转储时(通过 MyAdmin 的界面使用导出) - Magento EE 一切正常。因此,它让我确定问题出在我的 mysqldump 命令中。
我认为我的 linux 命令中缺少标志或类似的东西。

【问题讨论】:

    标签: php sql linux magento magento-1.13


    【解决方案1】:

    phpMyAdmin(当您说 MyAdmin 时我假设您指的是它)和其他基于 Web 的 MySQL 转储通过将 --opt 标志(有时其他类似 -c 用于压缩)传递到备份文件中生成完整的插入行到转储命令。

    默认情况下命令行mysqldump不这样做。

    如果你使用:

    shell_exec("mysqldump --opt --default-character-set=utf8 -uuser {$backup_db} > {$sql_name}");
    

    它应该工作。我只添加了 --opt 和 --default-character-set=utf8 标志。

    仅供参考:

    根据MySQL 5.1 Reference on mysqldump

    " --opt 该选项是简写。与指定 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables 相同--quick --set-charset。它应该给你一个快速的转储操作并生成一个可以快速重新加载到 MySQL 服务器的转储文件。"

    而且 --default-character-set=utf8 可能不是必需的,但不会造成伤害,并且会强制转储为 Magento EE 使用的 utf8。

    【讨论】:

      【解决方案2】:

      我认为你只需要添加 drop table 如果存在...--add-drop-table 到 mysqldump 作为选项

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 2011-11-10
        相关资源
        最近更新 更多