繁体   English   中英

php exec mysql命令-不同版本

[英]php exec mysql command - different version

在过去的两天里,我一直在弄弄这个,但仍在设法弄清楚……

作为较大脚本的一部分,我尝试在php文件中运行以下命令:

$export = exec("/usr/bin/mysqldump -u MY_USERNAME -pMY_PASS DATABASE_NAME products > /path/to/www/directory/sync/products.sql");

该命令不起作用,如果我添加并回显$result_var$result_var得到127而不是0,因此显然存在一些错误。 经过研究,我设法提出了一个稍有不同的命令,它的工作原理很好:

$export = exec('mysqldump -u MY_USERNAME -pMY_PASS DATABASE_NAME products -r "/path/to/www/directory/sync/products.sql"');

我的第一个问题 -有什么区别? 为什么第一种选择不起作用? 也许值得一提:在mysqldump上使用path没什么区别。 我做了which mysqldump和第一个命令中的路径是正确的。

我的第二个问题 -我正在尝试运行以下命令将表导入到数据库中:

$import = exec('/usr/bin/mysql -h localhost -u MY_USERNAME -p MY_PASS DATABASE_NAME < /path/to/www/directory/sync/products.sql')

但这不起作用,什么也没发生。 如果我在命令行中运行它,它只会抛出帮助文本,就好像我运行了mysql -?

我在这里想念什么? 我还需要向mysql命令添加其他任何参数(选项)吗? 而且,如果是这样,发生了什么变化? 这段代码在另一台服务器上运行得很好。

我可以立即解决-r问题。 -r问题也很可能与您的第二个问题直接相关。

mysqldump上的-r开关是--result-file的缩写。 此开关执行两项基本操作:

  1. 它阻止\\ n行尾在Windows上被\\ r \\ n转换。 如果您在Windows上执行此操作,则可能是需要-r的原因。
  2. 即使有错误,它也会强制进行转储。 这可以解释为什么您创建的转储未正确插入。 您检查转储文件以确保它可以吗?

因此,这不是一个确切的解决方案,但可能会帮助您朝正确的方向看:检查转储文件,看是否存在问题。

编辑

如果您的源数据库中有utf-8,则可能是字符编码问题。

首先检查centos机器的字符集

cat /etc/sysconfig/i18n 

看看是否是utf-8。 如果不是,那可能就是为什么需要-r的原因。

然后测试您的两个数据库,看看它们的字符集是什么

select schema_name as 'database', default_character_set_name as 'charset', default_collation_name as 'default_collation' from information_schema.schemata;

如果您的源数据库是utf-8,而目标数据库不是,则这可以解释为什么插入无效。 您可以尝试将其添加到导入mysql调用中:

--default-character-set=utf-8 

但是,如果未将mysql设置为处理utf-8,则可能会导致一组单独的错误

再次回答我自己的问题...

我的问题是由php safe_mode引起的-在禁用safe_mode并为用户启用了正常的shell访问之后,现在一切正常。

此外,还有一个小细节mysql命令使用-p后需要密码且没有空格。 换一种说法,

$import = exec('/usr/bin/mysql -h localhost -u MY_USERNAME -p MY_PASS DATABASE_NAME < /path/to/www/directory/sync/products.sql')

不是有效的命令,并且-p必须跟密码,且不能带空格。 有效命令为:

$import = exec('/usr/bin/mysql -h localhost -u MY_USERNAME -pMY_PASS DATABASE_NAME < /path/to/www/directory/sync/products.sql')

我希望这可以帮助别人...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM