MariaDB: Comenzando
Cómo empezar con MariaDB
👋 ¡Bienvenido a la documentación de Stackhero!
Stackhero ofrece una solución MariaDB cloud lista para usar que proporciona una serie de beneficios, incluyendo:
- Conexiones y transferencias ilimitadas.
- Interfaz web phpMyAdmin incluida.
- Actualizaciones sin esfuerzo con solo un clic.
- Rendimiento óptimo y seguridad robusta gracias a una VM privada y dedicada.
Ahorre tiempo y simplifique su vida: ¡solo toma 5 minutos probar la solución de MariaDB cloud hosting de Stackhero!
URLs de MariaDB
La forma más sencilla de conectarse a su servicio MariaDB es utilizando el formato de URL de MySQL, siempre que su controlador lo soporte:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Para los usuarios de Ruby, la URL de MySQL difiere ligeramente:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Usar MariaDB con PHP
A continuación se presentan varios ejemplos utilizando PHP para ayudarle a conectarse a MariaDB con diferentes extensiones. Recuerde que no se recomienda usar la base de datos 'root' en producción. En su lugar, considere crear una base de datos y un usuario dedicados.
Usar MariaDB con PHP y MySQLi (estilo orientado a objetos)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // No se recomienda usar la base de datos 'root'. Esto es solo para el ejemplo. La mejor práctica es crear una base de datos y un usuario dedicados en phpMyAdmin y usarlos aquí.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Error de conexión: ' . $mysqli->connect_error);
}
echo 'Conexión exitosa... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Usar MariaDB con PHP y MySQLi (estilo procedural)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // No se recomienda usar la base de datos 'root'. Esto es solo para el ejemplo. La mejor práctica es crear una base de datos y un usuario dedicados en phpMyAdmin y usarlos aquí.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Error de conexión: ' . mysqli_connect_error($mysqli));
}
echo 'Éxito: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Usar MariaDB con PHP y PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // No se recomienda usar la base de datos 'root'. Esto es solo para el ejemplo. La mejor práctica es crear una base de datos y un usuario dedicados en phpMyAdmin y usarlos aquí.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Si encuentra un error como "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", verifique si el directorio /etc/ssl/certs/ contiene certificados CA.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
);
$pdo = new PDO($dsn, $user, $password, $options);
$stm = $pdo->query('SELECT VERSION()');
$version = $stm->fetch();
echo 'Está conectado a una base de datos que ejecuta la versión ' . $version[0] . "\n";
?>
Manejar el error "SSL operation failed with code 1"
Si recibe el error:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
esto probablemente se deba a que el directorio /etc/ssl/certs/ no contiene los certificados CA. Si tiene acceso al sistema, puede instalar estos certificados de la siguiente manera:
-
En Ubuntu, puede ejecutar:
apt-get install ca-certificates -
En Alpine Linux, ejecute:
apk add ca-certificates
Si no tiene acceso directo al sistema que ejecuta su código PHP, puede instalar el certificado manualmente:
- Descargue el certificado: https://letsencrypt.org/certs/isrgrootx1.pem
- Agregue el archivo
isrgrootx1.pema sus archivos de proyecto PHP. - Comente la línea con
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Descomente la línea con
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Resolver "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH"
Si ve un error como:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
o un error similar que menciona una constante indefinida para los atributos PDO MySQL, indica que su instalación de PDO carece de soporte MySQL.
Solución para Ubuntu/Debian
Instale la extensión PHP MySQL requerida con:
sudo apt-get install php-mysql
Solución para Docker
Si está utilizando Docker, asegúrese de que el soporte MySQL esté incluido durante el proceso de construcción. Considere agregar lo siguiente a su Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
Usar MariaDB con Symfony y Doctrine
Edite el archivo .env y defina la variable DATABASE_URL de la siguiente manera:
DATABASE_URL="mysql://<USER>:<PASSWORD>@XXXXXX.stackhero-network.com:<PORT>/<DATABASE>"
A continuación, actualice el archivo config/packages/doctrine.yaml, configurando el controlador y las opciones de la siguiente manera:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
options:
# PDO::MYSQL_ATTR_SSL_CAPATH
1010: '/etc/ssl/certs'
# PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
1014: true
Manejar el error "SSL operation failed with code 1"
Si encuentra el error:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
esto probablemente significa que el directorio /etc/ssl/certs/ no contiene los certificados CA. Puede resolver esto instalándolos:
-
En Ubuntu/Debian, ejecute:
sudo apt-get install ca-certificates -
En Alpine Linux, ejecute:
apk add ca-certificates
Si no puede instalar los certificados a nivel del sistema, puede agregarlos manualmente:
-
Descargue el certificado: https://letsencrypt.org/certs/isrgrootx1.pem
-
Coloque el archivo
isrgrootx1.pemen su proyecto Symfony. -
Luego, actualice el archivo
config/packages/doctrine.yamlpara usar el certificado local:doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' driver: 'pdo_mysql' options: # PDO::MYSQL_ATTR_SSL_CA 1009: 'isrgrootx1.pem' # PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT 1014: true
Usar MariaDB con Laravel
Para configurar MariaDB con Laravel, edite el archivo config/database.php y actualice la configuración mysql de la siguiente manera:
'mysql' => [
'driver' => 'mysql',
'host' => env('STACKHERO_MARIADB_HOST'),
'port' => env('STACKHERO_MARIADB_PORT'),
'username' => env('STACKHERO_MARIADB_USER'),
'password' => env('STACKHERO_MARIADB_PASSWORD'),
'database' => env('STACKHERO_MARIADB_USER'),
'charset' => 'utf8mb4',
'collation'=> 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'sslmode' => 'require',
'options' => extension_loaded('pdo_mysql')
? array_filter([
// Si encuentra errores SSL como "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", consulte las instrucciones anteriores.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Usar MariaDB con PHP CodeIgniter
En su archivo database.php, inserte la siguiente configuración:
$db['default'] = array(
'hostname' => getenv('STACKHERO_MARIADB_HOST'),
'port' => getenv('STACKHERO_MARIADB_PORT'),
'username' => getenv('STACKHERO_MARIADB_USER'),
'password' => getenv('STACKHERO_MARIADB_PASSWORD'),
'database' => getenv('STACKHERO_MARIADB_USER'); // Por convención, el nombre de la base de datos coincide con el nombre de usuario.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Importante: activar el cifrado TLS
);
Conectar MariaDB con PHP usando variables de entorno
Es mejor evitar codificar sus credenciales. En su lugar, considere usar variables de entorno. Puede recuperar las credenciales de la siguiente manera:
$hostname = getenv('STACKHERO_MARIADB_HOST');
$port = getenv('STACKHERO_MARIADB_PORT');
$user = getenv('STACKHERO_MARIADB_USER');
$password = getenv('STACKHERO_MARIADB_PASSWORD');
$database = getenv('STACKHERO_MARIADB_USER'); // Por convención, el nombre de la base de datos coincide con el nombre de usuario.
Usar MariaDB con WordPress
Conectar WordPress a Stackhero para MariaDB es sencillo. Edite el archivo wp-config.php y configure sus ajustes de base de datos de la siguiente manera:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Activar el cifrado TLS (también conocido como SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
La parte importante aquí es la activación del cifrado TLS (también conocido como SSL). Sin él, la conexión no funcionará.
Usar MariaDB con Node.js
En este ejemplo, utilizamos el paquete mysql2 con soporte de promesas. Primero, instálelo con:
npm install mysql2
Luego, use el siguiente código:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Crear la base de datos 'stackherotest' si no existe
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Crear la tabla 'users' si no existe aún
await db.query(
'CREATE TABLE IF NOT EXISTS `stackherotest`.`users` (' +
'`userId` INT UNSIGNED NOT NULL,' +
'`name` VARCHAR(128) NOT NULL,' +
'`address` TEXT NOT NULL,' +
'`email` VARCHAR(265) NOT NULL' +
') ENGINE = InnoDB;'
);
// Insertar un usuario ficticio
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generar un userId ficticio
'Nombre de usuario', // Columna 'name'
'Dirección de usuario', // Columna 'address'
'user@email.com' // Columna 'email'
]
]
);
// Contar el número de filas en la tabla 'users'
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Ahora hay ${usersCount[0].cpt} entradas en la tabla "users"`);
// Cerrar la conexión a MariaDB
await db.end();
})().catch(error => {
console.error('');
console.error('🐞 ¡Ocurrió un error!');
console.error(error);
process.exit(1);
});
Usar MariaDB con Node.js/NestJS/TypeORM
Al conectarse desde Node.js, NestJS o TypeORM, incluya la opción ssl como se muestra:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Usar MariaDB con Prisma
Para conectarse con Prisma, agregue la opción sslaccept=strict para garantizar que el cifrado SSL esté habilitado. Por ejemplo, utilizando el usuario "root" conectándose a la base de datos "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Usar MariaDB con Django
Si aún no ha instalado el módulo mysqlclient (utilizado para conectarse a MariaDB), ejecute:
pip install mysqlclient
Si encuentra el error
Exception: Can not find valid pkg-config nameal instalarmysqlclient, instale el paquetelibmysqlclient. En Ubuntu/Debian, puede ejecutar:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Inicialmente, puede almacenar sus credenciales directamente en el archivo settings.py para pruebas como se muestra a continuación. Tenga en cuenta que este enfoque no es seguro para producción.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '<XXXXXX>.stackhero-network.com',
'PORT': '<PORT>',
'OPTIONS': {
'ssl_mode': 'REQUIRED',
},
'NAME': 'root',
'USER': 'root',
'PASSWORD': '<ROOT_PASSWORD>'
}
}
alerta Tenga cuidado: este ejemplo no se recomienda para producción y es solo para fines de prueba.
Una vez que la conexión funcione, es mejor usar variables de entorno para almacenar sus credenciales. Por ejemplo, usando django-environ, primero instálelo:
pip install django-environ
Luego actualice settings.py de la siguiente manera:
import environ
env = environ.Env()
environ.Env.read_env()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': env('STACKHERO_MARIADB_HOST'),
'PORT': env('STACKHERO_MARIADB_PORT'),
'OPTIONS': {
'ssl_mode': 'REQUIRED',
},
'NAME': 'root',
'USER': 'root',
'PASSWORD': env('STACKHERO_MARIADB_ROOT_PASSWORD')
}
}
Cree o actualice el archivo .env (en el mismo directorio que settings.py) con lo siguiente:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Finalmente, agregue .env a su .gitignore para evitar comprometer información sensible:
echo ".env" >> .gitignore
Conectar MariaDB con Java/Spring
Para conectar su aplicación Spring, configure la variable de entorno SPRING_DATASOURCE_URL con su URL de base de datos, prefijada con jdbc:. Por ejemplo:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Conectar MariaDB con Groovy/Grails
El siguiente ejemplo muestra cómo configurar su aplicación Grails para conectarse a MariaDB:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// Propiedades específicas de SSL
properties {
useSSL = true
requireSSL = true
verifyServerCertificate = true
sslMode = "REQUIRED"
}
}
environments {
production {
dataSource {
dbCreate = "none"
url = "jdbc:mysql://" + System.env.STACKHERO_MYSQL_HOST + ":" + System.env.STACKHERO_MYSQL_PORT + "/root?useSSL=true&requireSSL=true&verifyServerCertificate=true&sslMode=required" // Reemplace '/root' con el nombre de su base de datos deseada.
username = "root" // Es aconsejable crear un usuario dedicado en lugar de usar 'root'.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Considere crear un usuario dedicado.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Crear un usuario en MariaDB usando phpMyAdmin
Es bueno crear un usuario dedicado para su aplicación en lugar de usar el usuario 'root'. La forma más sencilla de hacerlo es a través de phpMyAdmin:
- En phpMyAdmin, haga clic en
Cuentas de usuarioen la parte superior.
- Haga clic en
Agregar cuenta de usuario.
- Complete el formulario de creación de usuario:
- Elija un nombre de cuenta (generalmente el nombre de su aplicación).
- Haga clic en
Generar contraseñapara una contraseña segura, luego cópiela. - Marque la opción
Crear base de datos con el mismo nombre y otorgar todos los privilegios.
Después de enviar, se creará un nuevo usuario junto con una base de datos que comparte el mismo nombre que el nombre de usuario.
Diferencias entre MariaDB y MySQL
MariaDB es un fork independiente creado por la comunidad de código abierto después de que Oracle adquiriera MySQL en 2010. Para la mayoría de los propósitos, MariaDB y MySQL son muy similares.