問題描述
我目前正在閱讀 David Golding 的Beginning CakePHP:從新手到專業人士".有一次,我必須使用 CLI 命令蛋糕烘烤",我會看到歡迎屏幕,但是當我嘗試烘烤時,例如我收到以下錯誤消息的控制器:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 第 117 行警告:mysql_select_db():在第 122 行的/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 中提供的參數不是有效的 MySQL-Link 資源警告:mysql_get_server_info():在第 130 行的/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 中提供的參數不是有效的 MySQL-Link 資源警告:mysql_query():在第 154 行的/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 中提供的參數不是有效的 MySQL-Link 資源錯誤:您的數據庫沒有任何表.
我懷疑錯誤消息與 php 試圖訪問錯誤的 mysql-socket,即默認的 osx mysql-socket - 而不是 MAMP 使用的那個有關.因此,我更改了數據庫配置以連接到 UNIX mysql-socket (:/Applications/MAMP/tmp/mysql/mysql.sock):
class DATABASE_CONFIG {var $default = 數組('司機' =>'mysql','連接' =>'mysql_connect','持久' =>錯誤的,'host' =>':/Applications/MAMP/tmp/mysql/mysql.sock',//UNIX MySQL-socket'登錄' =>'我的用戶','密碼' =>'my_pass','數據庫' =>'博客','前綴' =>'',);}
但是我收到了與新套接字相同的錯誤消息:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock:3306' (2) in/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 第 117 行警告:mysql_select_db():在第 122 行的/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 中提供的參數不是有效的 MySQL-Link 資源警告:mysql_get_server_info():在第 130 行的/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 中提供的參數不是有效的 MySQL-Link 資源警告:mysql_query():在第 154 行的/Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php 中提供的參數不是有效的 MySQL-Link 資源錯誤:您的數據庫沒有任何表.
此外,即使我使用 MAMP 在歡迎屏幕上顯示的 UNIX 套接字,當使用此套接字而不是 localhost 時,CakePHP 會丟失數據庫連接.
關于如何讓烘焙工作有任何想法?
-- 編輯 1 --
謝謝你們幫我解決問題!:)
我在確定 my.cnf 中的何處進行編輯以使 MySQL 偵聽 TCP/IP 請求時遇到問題.我能找到提到 TCP/IP 的唯一段落如下:
# 根本不監聽 TCP/IP 端口.這可以是一個安全增強,# 如果所有需要連接到 mysqld 的進程都運行在同一臺主機上.# 與 mysqld 的所有交互都必須通過 Unix 套接字或命名管道進行.# 請注意,在 Windows 上使用此選項而不啟用命名管道#(通過enable-named-pipe"選項)將使mysqld無用!##skip-網絡
這讓我可以完全關閉 TCP/IP,這與我的意圖相反.我不知道如何去做你的建議,如果你能更詳細一點,那就太好了.我在這些事情上完全是 n00b :S
注冊.連接到本地套接字:我刪除了主機參數中的前導冒號,結果相同.
從錯誤來看,它似乎正在嘗試連接到實際 IP 地址而不是 UNIX 套接字,請看:
<前>'/Applications/MAMP/tmp/mysql/mysql.sock:3306'它在套接字上附加了一個端口,這是錯誤的.
因此,我首先嘗試配置 MySQL 以偵聽 TCP/IP 請求(編輯 my.cnf 中的相應部分)并嘗試提供 127.0.0.1 而不是套接字.
如果您不向下滾動:
要在 CakePHP 級別修復它,請將 database.php 上的主機更改為localhost"并添加一個端口指令,其值設置為套接字名稱/Applications/MAMP/tmp/mysql/mysql.sock"
I am currently reading "Beginning CakePHP:From Novice to Professional" by David Golding. At one point I have to use the CLI-command "cake bake", I get the welcome-screen but when I try to bake e.g. a Controller I get the following error messages:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
I suspect that the error-messages has to do with php trying to access the wrong mysql-socket, namely the default osx mysql-socket - instead of the one that MAMP uses. Hence I change my database configurations to connect to the UNIX mysql-socket (:/Applications/MAMP/tmp/mysql/mysql.sock):
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'persistent' => false,
'host' =>':/Applications/MAMP/tmp/mysql/mysql.sock', // UNIX MySQL-socket
'login' => 'my_user',
'password' => 'my_pass',
'database' => 'blog',
'prefix' => '',
);
}
But I get the same error-messages with the new socket:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock:3306' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
Also, even though I use the UNIX-socket that MAMP show on it's welcome-screen, CakePHP loses the database-connection, when using this socket instead of localhost.
Any ideas on how I can get bake to work?
-- Edit 1 --
Thank you guys for helping me out! :)
I have a problem figuring out where in my.cnf to edit to get MySQL to listen to TCP/IP request. The only paragraph I can find where TCP/IP is mentioned is the following:
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
That allows me to turn off TCP/IP completely, which is the opposite of my intention. I don't know how to go about what you suggest, if you could be more elaborate it would be great. I am a total n00b on these matters :S
Reg. connecting to a local socket: I removed the leading colon in the host-parameter, same result.
From the error, it looks like it's trying to connect to an actual IP address and not a UNIX socket, look:
'/Applications/MAMP/tmp/mysql/mysql.sock:3306'
It's appending a port to the socket, which is wrong.
So, I'd first try to configure MySQL to listen to TCP/IP requests (edit the proper section in my.cnf) and try providing 127.0.0.1 instead of the socket.
In case you won't scroll down:
To fix it at CakePHP level, change host on database.php to 'localhost' and add a port directive with its value set to the socket name '/Applications/MAMP/tmp/mysql/mysql.sock'
這篇關于在 Mac OSX 上使用 MAMP 時,如何讓 CakePHP 烘焙以找到 mysql.sock 并識別 MySQL?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!