Trước hết, bạn không nên (không bao giờ) sử dụng mysql_ * mở rộng và chức năng của nó nữa. Chúng đã lỗi thời, không được dùng nữa và sẽ bị xóa khỏi php trong một phiên bản gần. Sử dụng mysqli_ hoặc PDO. Xem the huge red warning at the top of the mysql_connect page in the php docs để biết thêm thông tin.
- Kiểm tra xem bạn kết nối đến máy chủ ngay
Kết nối với máy chủ web của bạn trong ssh, và sử dụng các khách hàng mysql địa phương để kết nối đến máy chủ cơ sở dữ liệu như là người chủ (bạn sẽ được yêu cầu mật khẩu cho người dùng root):
$ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 100530
Server version: 5.1.66-0+squeeze1 (Debian)
[...]
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Nếu công việc này, bạn sẽ kết thúc bằng dấu nhắc mysql. Nếu điều này không làm việc, vấn đề của bạn nằm trong cấu hình mạng của bạn, máy chủ web của bạn không thể kết nối với máy chủ mysql (kiểm tra cổng mở).
Hãy chắc chắn rằng cơ sở dữ liệu trong câu hỏi tồn tại trên máy chủ
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| [... db names ...] |
+--------------------+
X rows in set (0.00 sec)
mysql>
Nếu bạn không thể nhìn thấy tên của cơ sở dữ liệu của bạn trong danh sách, điều này có nghĩa máy chủ see bạn trong phpmyadmin là không chính xác một; kiểm tra cài đặt phpmyadmin của bạn.
Kiểm tra xem bạn có thể kết nối với người dùng này bằng ứng dụng khách Cli mysql hay không. Lưu ý rằng tôi không chỉ định một cơ sở dữ liệu trên đường kết nối.
// close the root connection
mysql> quit
Bye
// connect using your specific user, replace USERNAME with your db user (and type its password when asked)
$ mysql -uUSERNAME -p
Enter password:
[...]
mysql>
Nếu đây thất bại và bạn không nhận được để một dấu nhắc, điều này có thể là vì sự cho phép không tồn tại, hoặc vì thành viên này không thể kết nối từ máy chủ mà bạn chỉ định. Nhìn vào thông báo lỗi mysql sẽ hiển thị; cái gì đó như!
ERROR 1045 (28000): Access denied for user 'USERNAME'@'HOST' (using password: NO)
Điều gì trong HOST là quan trọng và bạn phải chắc chắn rằng nó được cho phép trong đặc quyền của bạn. Nếu mọi thứ có vẻ ổn và nó vẫn không hoạt động, hãy thử chỉnh sửa các đặc quyền cho người dùng đó và đặt HOST thành '%' (có nghĩa là mọi thứ được cho phép). Nếu nó làm việc với điều đó, nó có nghĩa là HOST được cấu hình sai trong các đặc quyền của mysql.
Kiểm tra xem người dùng có thể xem cơ sở dữ liệu được đề cập không. Khi bạn kết nối với một người dùng cụ thể, "hiển thị cơ sở dữ liệu" sẽ chỉ liệt kê các cơ sở dữ liệu mà người dùng này có quyền xem.
mysql > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| [... db names ...] |
+--------------------+
X rows in set (0.00 sec)
mysql>
Nếu bạn không thể nhìn thấy cơ sở dữ liệu của bạn trong danh sách, nó có nghĩa là đặc quyền cho người sử dụng là sai/không được đặt cho cơ sở dữ liệu này.
Nếu mỗi bước ở đây hoạt động tốt, nó có thể có nghĩa là bạn có một lỗi trong mã php của bạn, hãy kiểm tra các máy chủ, mật khẩu, tên người dùng, ...
Nếu bạn thực sự không thể hình ra phần nào của đặc quyền là sai, hãy thử tạo một người dùng giả sẽ tất cả các quyền từ bất kỳ máy chủ:
$ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
Enter password:
mysql > GRANT ALL ON yourdbname.* to 'testuser'@'%' IDENTIFIED BY 'dummypassword';
mysql > quit
Bye
// note that I give the password in the prompt directly, to make sure this isn't an input error just in case
$ mysql -utestuser -pdummypassword
mysql >
Khi bạn đã thực hiện thành viên này và có thể kết nối đến nó, cố gắng kết nối với nó bằng cách sử php của bạn mã. Khi công việc này, xóa người dùng (sử dụng DROP USER 'testuser'
), tạo lại nó với đặc quyền HOST hạn chế hơn và thử lại, cho đến khi bạn sao chép các quyền mà bạn muốn.
Hãy nhớ xóa người dùng đó và bạn đã hoàn tất.
Được rồi, đây là phản hồi thực sự tốt. Tôi chạy truy vấn 'show databases' và nó liệt kê các cơ sở dữ liệu' information_schema', 'performance_schema',' mysql' và 'ckdb'. Nhưng trong 'phpMyAdmin' tôi chỉ thấy hai lược đồ ở trên, cộng với' mysql' cộng với những cái mà tôi đã tạo ra như 'test' và' test1', nhưng không phải là 'ckdb'. Làm cách nào để đọc và ghi vào các bảng 'test' và' test1' mà tôi đã tạo trong 'phpMyAdmin'? –
Ahh, có vẻ như bạn đã tạo cơ sở dữ liệu trong máy cục bộ của bạn thông qua phpMyAdmin thay vì Amazon RDS. Bạn phải cấu hình phpMyAdmin để sử dụng Amazon RDS làm cơ sở dữ liệu bên ngoài. Xem hướng dẫn này về cách cấu hình nó: 'http: // blog.benkuhl.com/2010/12/how-to-remote-quản lý-an-amazon-rds-instance-với-phpmyadmin /'. Và sau đó bạn phải đề cập đến cơ sở dữ liệu bạn muốn chạy truy vấn trên cơ sở dữ liệu selectbox. – user568109