我编写了一个CGI
脚本,用于bash
执行MySQL
查询。对于 MySQL 身份验证,通过在 .my.cnf 文件中提供凭据来使用自动登录,如下所示。
# the following section will be read by *all* client programs
[client]
user=dbuser
password=password
由于CGI程序是作为apache用户执行的,所以我将.my.cnf放在apache的主目录下。
# grep apache /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin
# ls -l /var/www/.my.cnf
-rw------- 1 apache apache 97 Apr 23 12:36 /var/www/.my.cnf
但看起来这不起作用,因为 mysql 查询没有被执行。我实际上很困惑应该将 .my.cnf 放在哪里,以便 CGI 脚本中的 mysql 查询可以从该位置读取它。
脚本的代码片段如下
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<html>"
echo "<body>"
mysql -h 192.168.2.140 -D mysql -e "select User from mysql;"
echo "</body>"
echo "</html>"
答案1
您可以使用--defaults-extra-file
mysql 的参数来指定它要使用的 cnf 文件:
mysql --defaults-extra-file=/var/www/.my.cnf -h 192.168.2.140 -D mysql -e "select User from mysql;"