php - ec2 - mysql aws
No se puede seleccionar Database Foo usando Ec2 y RDS (4)
Configuré una Instancia de base de datos RDS con un grupo de seguridad donde uso mi EC2 Elastic IP como mi CIDR / IP. También he asociado el grupo de seguridad con mi EC2.
Mi grupo de seguridad en la instancia EC2 se ve así. Asocié uno de los puertos 3306 con mi IP elástica.
He creado una base de datos y una tabla en phpMyAdmin y estoy intentando probarlo imprimiendo todos los valores usando el siguiente código:
<?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);
?>
El error que estoy recibiendo es la Unknown database ''XXXX''
. ¿Algunas ideas?
EDIT 1
Acabo de cambiar todas las declaraciones mysqli
a mysql
. Pero la conexión aún no es exitosa, es decir, no se puede encontrar la base de datos.
EDIT 2
Aquí hay una captura de pantalla de mis privilegios de mysql.
Necesita usar mysqli_ o mysql_, preferiblemente el primero. No funcionará intercambiarlos.
Si obtiene un error de base de datos desconocido, su conexión es exitosa, está intentando seleccionar un db que no existe o que el usuario no tiene concesiones para acceder.
La base de datos desconocida ''XXXX'' significa que no se pudo acceder a la base de datos. Esto podría suceder porque:
El servidor se está conectando correctamente, pero la base de datos no existe. Intente conectarse sin dar el nombre de la base de datos como parámetro. Luego ejecuta las
show databases;
consultasshow databases;
. Mostrará todas las bases de datos allí.Se está conectando al servidor equivocado (agregó la base de datos en otro lugar existe la base de datos en otro servidor). Verificar las bases de datos presentes puede ayudarlo a identificar qué servidor es.
Parece que puede conectarse al servidor de Amazon RDS. Pero la base de datos no está allí. Se mostrará un error similar si tratamos de conectarnos a la instalación nueva de mysql. Tiene cero bases de datos (que no sean information_schema
y mysql
).
En primer lugar, no deberías (nunca) usar la extensión mysql_ * y su función nunca más. Están desactualizados, obsoletos y se eliminarán de php en una versión cercana. Use mysqli_ , o PDO . Consulte la gran advertencia roja en la parte superior de la página mysql_connect en los documentos php para obtener más información.
- Verifique que se conecte al servidor correcto
Conéctese a su servidor web en ssh y use el cliente mysql local para conectarse al servidor de la base de datos como root (se le preguntará la contraseña del usuario raíz):
$ 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>
Si esto funciona, deberías terminar en un prompt mysql. Si esto no funcionó, su problema radica en la configuración de su red, su servidor web no puede conectarse al servidor mysql (compruebe las aperturas de puertos).
Asegúrese de que la base de datos en cuestión exista en el servidor
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | [... db names ...] | +--------------------+ X rows in set (0.00 sec) mysql>
Si no puede ver el nombre de su base de datos en la lista, esto significa que el servidor que ve en phpmyadmin no es el correcto; verifica tu configuración de phpmyadmin.
Compruebe si puede conectarse con este usuario utilizando el cliente cli mysql. Tenga en cuenta que no especifico una base de datos en la línea de conexión.
// 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>
Si esto falla y no llega a un aviso, esto puede ser porque el permiso no existe o porque este usuario no puede conectarse desde el host que usted especificó. Mire el mensaje de error que se mostrará en mysql; ¡algo como!
ERROR 1045 (28000): Access denied for user ''USERNAME''@''HOST'' (using password: NO)
Lo que está en HOST es importante y debe asegurarse de que esté permitido en sus privilegios. Si todo parece correcto y todavía no funciona, intente editar los privilegios para ese usuario y configure el HOST en ''%'' (significa que todo está permitido). Si funciona con eso, significa que el HOST está configurado incorrectamente en los privilegios de mysql.
Verifique si el usuario puede ver la base de datos en cuestión. Cuando se conecta con un usuario específico, "mostrar bases de datos" solo mostrará las bases de datos que este usuario tiene privilegios para ver.
mysql > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | [... db names ...] | +--------------------+ X rows in set (0.00 sec) mysql>
Si no puede ver su base de datos en la lista, significa que los privilegios para el usuario son incorrectos / no están establecidos para esta base de datos.
Si todos los pasos aquí funcionan bien, probablemente signifique que tiene un error en su código php, verifique de nuevo el host, la contraseña, el nombre de usuario, ...
Si realmente no puede descubrir qué partes de los privilegios son incorrectos, intente crear un usuario ficticio con todos los permisos de cualquier host:
$ 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 >
Una vez que haya creado este usuario y pueda conectarse, intente conectarse utilizando su código php. Una vez hecho esto, elimine al usuario (usando DROP USER ''testuser''
), créelo nuevamente con un privilegio HOST más limitado y vuelva a intentarlo hasta que haya replicado los permisos que desea.
Recuerde eliminar ese usuario y listo.
Introducción
El error Unknown database ''XXXX''
significa que la base de datos does not exist
y no tiene nada que ver con sus privilegios de mysql.
phpMyAdmin en RDS
Si creó su base de datos a través de phpMyAdmin
está seguro de que estaba configurada para conectarse a una Amazon RDS instance
remota de Amazon RDS instance
o usted está trabajando en su localhost
Verifique su config.inc.php
para asegurarse de que esté configurado correctamente. Puede agregar su servidor remoto llamando
$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'';
Mejor gestión de BD
También puede usar MySQL workbench, que no solo le permitirá crear y gestionar su base de datos, sino que también puede supervisar el tiempo real. Puede conectarse directamente o usar SSH
- Cómo crear una conexión de MySQL Workbench al servidor de Amazon EC2
- Monitoreo y administración de bases de datos de Amazon RDS utilizando MySQL Workbench
Finalmente
Acabo de cambiar todas las declaraciones mysqli a mysql. Pero la conexión aún no es exitosa, es decir, no se puede encontrar la base de datos.
No hay razón alguna para cambiar mysqli
a mysql
porque oficialmente se depreció en 5.5.0