1

问题是当我使用类似的东西进行转储时:
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 命令中缺少标志或类似的东西。

4

2 回答 2

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 标志。

供参考:

根据mysqldump 上的 MySQL 5.1 Reference

" --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 中。

于 2013-08-13T15:56:29.930 回答
0

我认为您只需要添加删除表(如果存在)...--add-drop-table 到 mysqldump 作为选项

于 2013-08-13T21:56:53.207 回答