2013-06-01 17 views
8

Tôi đã thiết lập một cơ sở dữ liệu RDS với nhóm bảo mật nơi tôi sử dụng IP Elastic EC2 làm CIDR/IP của mình. Tôi cũng đã liên kết nhóm bảo mật với EC2 của tôi.Không thể chọn Cơ sở dữ liệu Foo sử dụng Ec2 và RDS

enter image description here

Nhóm bảo mật của tôi trên EC2 Ví dụ như sau. Tôi liên kết một trong các cổng 3306 với IP đàn hồi của tôi.

enter image description here

tôi đã tạo ra một cơ sở dữ liệu và một bảng trong phpMyAdmin và đang cố gắng để kiểm tra nó ra bằng cách in ra tất cả các giá trị bằng cách sử dụng mã bên dưới:

<?php 


    // set database server access variables: 
    $host = "XXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com"; 
    $user = "XXXXXXX"; 
    $pass = "XXXXXXXX"; 
    $db = "XXXXXXX";  
    $con = mysql_connect($host, $user, $pass, $db); 

// Check connection 
if (mysql_connect_error()) 
    { 
    echo "Failed to connect to MySQL: " . mysql_connect_error(); 
    }else { echo "You have connected successfully!"; 
} 


$result = mysql_query($con, "SELECT * FROM `XXXXX` LIMIT 0, 30 "); 

echo "<p>starting again..</p>"; 

while($row = mysql_fetch_assoc($result)){ 
    //iterate over all the fields 
    foreach($row as $key => $val){ 
     //generate output 
     echo $key . ": " . $val . "<BR />"; 
    } 
} 
    mysql_close($connection); 

?> 

Các lỗi rằng tôi nhận được là Unknown database 'XXXX'. Bất kỳ ý tưởng?

EDIT 1

Tôi vừa thay đổi tất cả các mysqli báo cáo để mysql. Nhưng kết nối vẫn không thành công tức là cơ sở dữ liệu không thể tìm thấy.

EDIT 2

Đây là một ảnh chụp màn hình của đặc quyền mysql của tôi.

enter image description here

Trả lời

5

Cơ sở dữ liệu không xác định 'XXXX' có nghĩa là không thể truy cập cơ sở dữ liệu. Điều này có thể xảy ra vì:

  1. Máy chủ đang kết nối thành công, nhưng cơ sở dữ liệu không tồn tại. Thử kết nối mà không đặt tên cơ sở dữ liệu làm tham số. Sau đó, chạy truy vấn show databases;. Nó sẽ hiển thị tất cả các cơ sở dữ liệu ở đó.

  2. Bạn đang kết nối với máy chủ sai (bạn đã thêm cơ sở dữ liệu ở một nơi nào đó khác tồn tại trên máy chủ khác). Kiểm tra các cơ sở dữ liệu hiện tại có thể giúp bạn xác định máy chủ nào là nó.

Dường như bạn có thể kết nối với máy chủ Amazon RDS. Nhưng cơ sở dữ liệu không có ở đó. Lỗi tương tự sẽ hiển thị nếu chúng ta cố gắng kết nối với cài đặt mới của mysql. Nó có cơ sở dữ liệu không (trừ information_schemamysql).

+0

Đượ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'? –

+0

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

0

Bạn cần phải sử dụng mysqli_ hoặc mysql_, tốt nhất là người đầu tiên. Nó sẽ không hoạt động để trao đổi chúng.

Nếu bạn gặp lỗi cơ sở dữ liệu không xác định, kết nối của bạn thành công, bạn đang cố gắng chọn một db không tồn tại hoặc người dùng không có quyền truy cập.

+0

Xin chào, cảm ơn sự giúp đỡ. Tôi đã chuyển mọi thứ sang 'mysql', nhưng nó vẫn không hoạt động. Cơ sở dữ liệu chắc chắn thoát và tôi đã đăng các đặc quyền 'mysql' mà tôi nghĩ là không sao. Bất kỳ ý tưởng nào khác? –

+0

Vì nó không hoạt động, tôi có thể đề nghị chuyển về 'mysqli_', vì nó sẽ được chuyển tiếp và' mysql_' là một tính năng được khấu hao. Vui lòng kiểm tra xem tên cơ sở dữ liệu và người dùng có đúng trong trường hợp không - trong trường hợp MySQl phân biệt chữ hoa chữ thường. Bạn có thể tạo kết nối tới cơ sở dữ liệu 'INFORMATION_SCHEMA' không?Hoặc kết nối mà không chỉ định db, và sau đó làm 'USE' để chọn một db? – Stoleg

2

Giới thiệu

Các lỗi Unknown database 'XXXX' có nghĩa là cơ sở dữ liệu does not exist và không có gì để làm với quyền mysql của bạn.

phpMyAdmin trên RDS

Nếu bạn đã tạo cơ sở dữ liệu của bạn thông qua phpMyAdmin bạn có chắc nó đã được cấu hình để kết nối từ xa Amazon RDS instance hoặc bạn là sill làm việc trên bạn localhost

Vui lòng kiểm tra config.inc.php của bạn để đảm bảo cấu hình đúng. Bạn có thể thêm máy chủ từ xa của bạn bằng cách gọi

$i++; // This would add the new servers 
$cfg['Servers'][$i]['host'] = 'XXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com'; 
$cfg['Servers'][$i]['port'] = '3306'; 
$cfg['Servers'][$i]['socket'] = ''; 
$cfg['Servers'][$i]['connect_type'] = 'tcp'; 
$cfg['Servers'][$i]['extension'] = 'mysql'; 
$cfg['Servers'][$i]['compress'] = TRUE; 
$cfg['Servers'][$i]['auth_type'] = 'config'; 
$cfg['Servers'][$i]['user'] = 'XXXXXXX'; 
$cfg['Servers'][$i]['password'] = 'XXXXXXX'; 

Better DB Management

Bạn cũng có thể sử dụng MySQL workbench đó sẽ không chỉ cho phép bạn tạo và mange cơ sở dữ liệu của bạn, nhưng bạn cũng có thể theo dõi thời gian thực. Bạn có thể kết nối trực tiếp hoặc sử dụng SSH

Cuối cùng

Tôi vừa thay đổi tất cả những điều khoản mysqli để mysql. Nhưng kết nối vẫn không thành công tức là cơ sở dữ liệu không thể tìm thấy.

Có không có lí do gì bạn nên thay đổi mysqli-mysql vì nó Officially Depreciated at 5.5.0

5

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ác vấn đề liên quan