Apache + PhP + MySQL

Bùi Hải Thanh
(thanhbh)

New Member
Ti`m ba(`ng google ma~i kho^ng ddu+o+.c, ho?i luo^n dda^y cho nhanh, ai co' nha~ y' thi` tra? lo+`i ho^. ca'i:

Co' 1 ma'y cha.y Debian, Apache + PhP & MySQL support, nhu+ng khi dda(.t le^.nh connect va`o MySQL tu+` PhP script thi` no' ba'o lo^~i kho^ng connect ddu+o+.c, y' la` no' kho^ng nha^.n ra MySQL username, hostname va` password mi`nh pass trong le^.nh

<?php
$db= mysql_connect(mysql_hostname, mysql_username, password);
?>

Vi` kho^ng nha^.n ra ne^n username, hostname bi. ma(.c ddi.nh la` cu?a he^. ddie^`u ha`nh.

Va^.y pha?i ddo^?i ca'i gi` va` o+? dda^u\?

Ca?m o+n nhie^`u
/Thanh
 
Bùi Hải Thanh đã viết:
Ti`m ba(`ng google ma~i kho^ng ddu+o+.c, ho?i luo^n dda^y cho nhanh, ai co' nha~ y' thi` tra? lo+`i ho^. ca'i:

Co' 1 ma'y cha.y Debian, Apache + PhP & MySQL support, nhu+ng khi dda(.t le^.nh connect va`o MySQL tu+` PhP script thi` no' ba'o lo^~i kho^ng connect ddu+o+.c, y' la` no' kho^ng nha^.n ra MySQL username, hostname va` password mi`nh pass trong le^.nh

<?php
$db= mysql_connect(mysql_hostname, mysql_username, password);
?>

Vi` kho^ng nha^.n ra ne^n username, hostname bi. ma(.c ddi.nh la` cu?a he^. ddie^`u ha`nh.

Va^.y pha?i ddo^?i ca'i gi` va` o+? dda^u\?

Ca?m o+n nhie^`u
/Thanh
hẹhẹ, tất nhiên là ko configure thì làm seo nó bít mà thay đổi pass theo ý mình cơ chứ. Vào terminal:
mysqladmin -u username -poldpassword password new_password
Trong đó username là username của user, new_password là password mới. Chú ý: -p và oldpassword phải viết liền nhau. Mặc định old password sẽ là chuỗi rỗng vì vậy có thể bỏ qua phần -p.
 
Ông anh dùng Debian thì có thể dpkg-reconfigure mysql-server. Sau đó nó configure lại.

Nếu ko khá khẩm rì hơn thì stat /etc/init.d/mysql xem nó đã chmod 755 chưa, nếu chưa thì chmod 755 rùi chạy /etc/init.d/mysql.
 
Đặng Trần Hiếu đã viết:
Ông anh dùng Debian thì có thể dpkg-reconfigure mysql-server. Sau đó nó configure lại.

Nếu ko khá khẩm rì hơn thì stat /etc/init.d/mysql xem nó đã chmod 755 chưa, nếu chưa thì chmod 755 rùi chạy /etc/init.d/mysql.

Thx Hie^'u,

Va^'n dde^` la` muo^'n connect va`o MySQL server o+? 1 ma'y kha'c chu+' kho^ng pha?i o+? ma'y Debian + Apache + PhP

/Thanh
 
Bùi Hải Thanh đã viết:
Đặng Trần Hiếu đã viết:
Ông anh dùng Debian thì có thể dpkg-reconfigure mysql-server. Sau đó nó configure lại.

Nếu ko khá khẩm rì hơn thì stat /etc/init.d/mysql xem nó đã chmod 755 chưa, nếu chưa thì chmod 755 rùi chạy /etc/init.d/mysql.

Thx Hie^'u,

Va^'n dde^` la` muo^'n connect va`o MySQL server o+? 1 ma'y kha'c chu+' kho^ng pha?i o+? ma'y Debian + Apache + PhP

/Thanh
Tìm trong file /etc/mysql/my.cnf dòng skip-networking rùi thêm vào đầu dòng dấu #.

Nếu vẫn ko connect từ remote được thì xem file /etc/hosts, tìm hostname của máy làm mysql server. Sau đó vào mysql. Dùng: grant all privileges on database.* to username@hostname indentified by 'password'; flush privileges; Sau đó khởi động lại mysql server.
 
Đặng Trần Hiếu đã viết:
Nếu vẫn ko connect từ remote được thì xem file /etc/hosts, tìm hostname của máy làm mysql server. Sau đó vào mysql. Dùng: grant all privileges on database.* to username@hostname indentified by 'password'; flush privileges; Sau đó khởi động lại mysql server.

Thx la^`n nu+~a!

Nhu+ng Hie^'u va^~n chu+a hie^?u y' anh. Anh kho^ng ga(.p va^'n dde^` gi` ve^` MySQL itself ca?, command line access giu+~a 2 ma'y OK. Ca'i anh ca^`n co' le~ la` config la.i PhP dde^? no' nha^.n ra ca'i le^.nh anh vie^'t o+? post dda^`u tie^n. PhP cha.y safe mode\. Da~ thu+? turn off safe mode nhu+ng ko a(n thua\.

DDa.i loa.i kho^ng lie^n quan gi` dde^'n MYSQL Server ca?, vi` no' KHO^NG ca`i tre^n ma'y ddo', va` anh dda~ config MySQL server tre^n ma'y kia ngon la`nh ro^`i :)

/Thanh
 
Nếu như sử dụng console kết nối đến remote được thì tức là tại PHP. Các bản PHP mới đều có mySQL extension built-in.

Trên máy chạy mysql-server: cat /etc/services | grep mysql. Xem xem mysql chạy ở port nèo. Sau đó trên máy remote, sửa lại dòng mysql.default_port trong php.ini là giá trị đó.

Với lại từ nãy đến giờ em đều nói về config mysql server đấy chứ. Anh ko bỏ dòng skip-networking đi thì mysql sẽ drop tất cả connection từ remote.

Tốt nhất là anh post thẳng cái lỗi anh gặp phải khi chạy file PHP thì mới troubleshoot được chứ.
 
Chỉnh sửa lần cuối:
Đặng Trần Hiếu đã viết:
Tốt nhất là anh post thẳng cái lỗi anh gặp phải khi chạy file PHP thì mới troubleshoot được chứ.

Lỗi là thế này, hiện ra khi chạy PhP script:

Err# 1044: Access denied for user: '@localhost' to database 'myDB'

Cái file PhP script không có lỗi cú pháp gì hết, vì nó đang chạy ngon lành khi đặt ở 1 máy khác. MySQL cũng không có vấn đề gì về config, vì connect bình thường được -> không cần quan tâm đến networking or user settings in MySQL.

Theo anh đóan thì PhP cố tình connect vào MySQL ở ngay máy local, dùng tên user là user của OS, thay vì nó đọc lệnh mysql_connect để lấy thông tin về user và địa chỉ đúng của MySQL server.

/Thanh
 
Ko thể ko cần quan tâm đến user settings hay networking được. Lý do là vì anh đang cố connect đến mysql-server ở máy khác. Mặc định my.cnf có dòng skip-networking, nếu anh ko comment out dòng nì thì tất cả các connection đến nó mà ko phải từ localhost sẽ bị drop. Hơn nữa anh phải thực hiện grant all privileges... như em đã nói ở trên nếu ko username đó sẽ ko thể dùng được.

Tuy nhiên cái dòng lỗi của anh em thấy lạ là tại seo lại là @localhost??? Thế còn user đâu?? Có 1 điều em chắc chắn là dù anh làm cách nèo đi nữa, 1 khi anh đã chỉ rõ mysql_host rùi thì nó sẽ ko connect đến localhost.
 
Việc nó hiện ra @localhost ko có username chứng tỏ tất cả user đều bị deny.
 
Đặng Trần Hiếu đã viết:
Ko thể ko cần quan tâm đến user settings hay networking được. Lý do là vì anh đang cố connect đến mysql-server ở máy khác. Mặc định my.cnf có dòng skip-networking, nếu anh ko comment out dòng nì thì tất cả các connection đến nó mà ko phải từ localhost sẽ bị drop. Hơn nữa anh phải thực hiện grant all privileges... như em đã nói ở trên nếu ko username đó sẽ ko thể dùng được.

Tuy nhiên cái dòng lỗi của anh em thấy lạ là tại seo lại là @localhost??? Thế còn user đâu?? Có 1 điều em chắc chắn là dù anh làm cách nèo đi nữa, 1 khi anh đã chỉ rõ mysql_host rùi thì nó sẽ ko connect đến localhost.

:)

Xin lỗi vì anh trình bày tối nghĩa quá nên hơi khó hiểu. Anh nói không quan tâm đến MySQL settings là vì nếu chạy ở shell của Debian thì anh connect đến MySQL server ở máy kia ngon lành. Nghĩa là máy chủ MySQL accept connection và login từ máy Debian.

Vấn đề là mặc dù anh đã khai rõ tất cả thông tin để connect như thế này

<?php
$db = mysql_connect($mysqlserver, $mysqlwebuser, $mysqlwebpw);
mysql_select_db("myDB", $db);
echo mysql_errno($db) . ": " . mysql_error($db). "\n";
?>

.... mà khi connect nó vẫn thay $mysqlwebuser bằng user login của Linux và có lẽ thay luôn cả $mysqlserver thành localhost.

Anh không có quyền admin của máy Debian, chỉ quản lý được MySQL server và cái PhP script. Cho nên rất khó trouble shooting.

/Thanh
 
Trước tiên anh thử tạo 1 file chỉ có:
<?php
$db = mysql_connect($host, $user, $pass);
?>
Có điều anh ko dùng $host, $user hay $pass mà thay vào đó là host, user & pass thực sự. Ví dụ, nếu connect đến 192.168.0.22, user: hieudt, pass: test thì sẽ như sau:
<?php
$db = mysql_connect('192.168.0.22', 'hieudt', 'test');
?>
Thử xem có lỗi ko.
 
1 việc nữa là trên máy chạy PHP script: cat /etc/hosts | grep mysql_server. Trong đó mysql_server là mysql_server trùng với cái anh dùng trong PHP script. Nếu có kết quả thì lỗi nằm ở đó.

Tốt nhất là thử kết nối thẳng = IP xem seo. Đừng dùng hostname.
 
Chỉnh sửa lần cuối:
Đặng Trần Hiếu đã viết:
1 việc nữa là trên máy chạy PHP script: cat /etc/hosts | grep mysql_server. Trong đó mysql_server là mysql_server trùng với cái anh dùng trong PHP script. Nếu có kết quả thì lỗi nằm ở đó.

Tốt nhất là thử kết nối thẳng = IP xem seo. Đừng dùng hostname.

Nếu trong hosts file mà có MySQL server bị map vào localhost thì làm sao anh connect từ shell được :)

Anh ghi $mysqlhostname trong script cho nó formal thôi, hiển nhiên giá trị của nó là IP address.

/Thanh
 
Bùi Hải Thanh đã viết:
Nếu trong hosts file mà có MySQL server bị map vào localhost thì làm sao anh connect từ shell được :)

Anh ghi $mysqlhostname trong script cho nó formal thôi, hiển nhiên giá trị của nó là IP address.

/Thanh

Tu+. kie^?m duye^.t :D, em kho^ng ddo.c ky~ do ba^.n đi cho+i\. Đe^? la't em config thu+? vo+'i ba'c xem va^.y
 
Chỉnh sửa lần cuối bởi người điều hành:
Quách Tung Dương đã viết:
....
hosts: files nis dns
passwd: files nis dns.

Không hiểu tại sao anh hỏi rất cụ thể làm sao chữa bệnh ỉa chảy thì toàn nhận được lời khuyên là nên xem xem toilet có bị tắc không vậy nhỉ :))

/Thanh
 
Khó có thể là lỗi ở /etc/nsswitch.conf vì vẫn connect được = console.
 
Anh thử tắt mysqld ở máy chạy PHP script xem nó báo lỗi rì.
 
Đặng Trần Hiếu đã viết:
Anh thử tắt mysqld ở máy chạy PHP script xem nó báo lỗi rì.

Anh không có quyền admin của máy đó, nên chả bật tắt cái gì được cả. Có mỗi 1 quyền là phàn nàn với thằng admin thôi, mà quyền đó thực hiện cũng phức tạp. Nếu biết cụ thể là cần thay đổi 1 dòng nào đó trong php.ini chẳng hạn thì cũng có thể bảo nó để bắt nó thay.

Cảm ơn sự nhiệt tình của chú Hiếu, anh quyết định give up :)

/Thanh
 
Em chắc chắn là ko có tính năng nèo của PHP có thể tự động thay đổi lựa chọn của người dùng như thế cả.

Theo em nghĩ, nó dùng iptables để redirect toàn bộ outbound traffic đến máy nó ---> khi anh cố connect đến 1 server mySQL khác thì iptables lại cứ redirect nó quay lại điểm ban đầu.
 
Chỉnh sửa lần cuối:
Back
Bên trên