MySQL In App en Azure App Service, la base de datos para desarrollo y pruebas

En algunas ocasiones nos hemos visto en proyectos donde la base de datos a utilizar es MySQL y lo cierto es que en Microsoft Azure a día de hoy tienes varias alternativas para utilizar esta base de datos, como ClearDB, instalarlo en una máquina virtual o incluso el uso de contenedores. Todas ellas generan un gasto adicional que es posible que para entornos de desarrollos y pruebas no esté del todo justificado.

Por ello, el equipo de App Service a puesto a disposición del desarrollador MySQL In App (en preview), que te permite tener dentro del propio App Service una base de datos para desarrollo y pruebas exclusivamente.

MySQL In App - Preview
MySQL In App – Preview

Para poder usarlo, basta con acceder a la sección que te mostraba en la imagen anterior y cambiar el estado a ON.

Enable MySQL In App
Enable MySQL In App

En mi caso he habilitado además los logs para tener toda la información disponible en la carpeta D:/home/logfiles. En el momento que la base de datos MySQL quede habilitada, podrás ver la opción Manage que te llevará al portal phpAdmin.

MySQL In App - Manage
MySQL In App – Manage

donde podrás gestionar la base de datos llamada localdb.

MySQL In App - PhpAdmin
MySQL In App – PhpAdmin

Como ya sabes, desde el propio phpMyAdmin puedes crear todo lo que necesites en tu base de datos. La forma de acceder a la misma a través de código es utilizando la cadena de conexión MYSQLCONNSTR_localdb. Dependiendo del lenguaje de programación que utilices podrás acceder a ella de una forma u otra. En el caso de PHP sería de la siguiente forma, como se detalla en el anuncio oficial:

[php]$connectstr_dbhost = »;
$connectstr_dbname = »;
$connectstr_dbusername = »;
$connectstr_dbpassword = »;

foreach ($_SERVER as $key => $value) {
if (strpos($key, "MYSQLCONNSTR_localdb") !== 0) {
continue;
}

$connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
$connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
$connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
$connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}

$link = mysqli_connect($connectstr_dbhost, $connectstr_dbusername, $connectstr_dbpassword,$connectstr_dbname);

if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);[/php]

Para Node.js te dejo este ejemplo, donde te enseño cómo utilizar la cadena de conexión y algunas tareas comunes en MySQL, para que compruebes que todo funciona perfectamente:

[javascript]var mysql = require(‘mysql’),
mySQLconnString = process.env.MYSQLCONNSTR_localdb,
exports = module.exports = {};

exports.test = function() {

console.log(‘MYSQLCONNSTR_localdb’);
console.log(process.env.MYSQLCONNSTR_localdb);

function getElement(params, key) {
for (var i = 0; i < params.length; i++) { if (params[i].indexOf(key) > -1) {
return params[i].substring(params[i].indexOf(‘=’) + 1);
}
}

throw "Key doesn’t exist!";
}

var params = mySQLconnString.split(‘;’),
dbhost = getElement(params, ‘Data Source’),
dbport = dbhost.substring(dbhost.indexOf(‘:’) + 1),
dbhost = dbhost.substring(0, dbhost.indexOf(‘:’)); //host without port

var connection = mysql.createConnection({
host: dbhost,
port: dbport,
user: getElement(params, ‘User Id’),
password: getElement(params, ‘Password’),
database: getElement(params, ‘Database’)

});

connection.connect(function(error) {
if (error);
console.error(error);
});

connection.query(‘DROP TABLE test’, function(err, result) {

if (!err) {
console.log(‘Result: ‘, result);
}
else {
console.error(err);
}
});

connection.query(‘CREATE TABLE test (id INT(100) NOT NULL AUTO_INCREMENT, name VARCHAR(50), PRIMARY KEY(id))’, function(err, result) {

if (!err) {
console.log(‘Result: ‘, result);
}
else {
console.error(err);
}
});

var values = { name: ‘Gisela’ };
connection.query(‘INSERT INTO test SET ?’, values, function(err, result) {
if (err) {
console.error(err);
}
});

connection.query(‘SELECT * from test’, function(err, rows, fields) {

if (!err) {
console.log(‘Rows: ‘, rows);
}
else {
console.log(‘error:’, err);
}
});

connection.end();
};[/javascript]

Espero que sea de utilidad.

¡Saludos!

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.