MariaDB: Primeros pasos
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 conectar con su servicio MariaDB es utilizar el formato de URL de MySQL, siempre que su driver lo soporte:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Si utiliza Ruby, la URL de MySQL es ligeramente diferente:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Uso de MariaDB con PHP
A continuación, encontrará algunos ejemplos que muestran cómo puede conectar con MariaDB desde PHP utilizando diferentes extensiones. Aunque estos ejemplos usan la base de datos "root", lo más recomendable es crear una base de datos y un usuario dedicados para su aplicación, especialmente en entornos de producción.
Uso de MariaDB con PHP y MySQLi (estilo orientado a objetos)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Solo para demostración. Como buena práctica, cree su propia base de datos y usuario en phpMyAdmin y utilice esas credenciales.
$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();
?>
Uso de MariaDB con PHP y MySQLi (estilo procedural)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Solo para demostración. Como buena práctica, cree su propia base de datos y usuario en phpMyAdmin y utilice esas credenciales.
$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);
?>
Uso de MariaDB con PHP y PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Solo para demostración. Como buena práctica, cree su propia base de datos y usuario en phpMyAdmin y utilice esas credenciales.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Si obtiene un error como "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", asegúrese de que su directorio /etc/ssl/certs/ contiene los 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 con la versión ' . $version[0] . "\n";
?>
Cómo resolver el error "SSL operation failed with code 1"
Si ve este error:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
probablemente se deba a que el directorio /etc/ssl/certs/ no contiene los certificados CA necesarios. Si tiene acceso al sistema, aquí tiene algunas sugerencias para instalarlos:
-
En Ubuntu, puede ejecutar:
apt-get install ca-certificates -
En Alpine Linux, pruebe:
apk add ca-certificates
Si no dispone de acceso a nivel de sistema, puede añadir el certificado manualmente:
- Descargue el certificado: https://letsencrypt.org/certs/isrgrootx1.pem
- Coloque el archivo
isrgrootx1.pemen su 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'
Cómo resolver "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH"
Si ve un error como este:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
o un mensaje similar que haga referencia a una constante indefinida de atributos MySQL de PDO, probablemente su instalación de PDO no incluye soporte para MySQL.
En Ubuntu/Debian
Puede instalar la extensión PHP MySQL necesaria con:
sudo apt-get install php-mysql
Si utiliza Docker
Para asegurarse de que el soporte para MySQL está disponible, puede añadir lo siguiente a su Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
### Uso de MariaDB con Symfony y Doctrine
Para empezar, edite su archivo `.env` y defina la variable `DATABASE_URL` así:
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
A continuación, actualice su archivo `config/packages/doctrine.yaml` para establecer el driver y las opciones:
```yaml
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
Cómo solucionar el error "SSL operation failed with code 1"
Si se encuentra con este error:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
probablemente se deba a que su sistema no tiene instalados los certificados CA. Aquí tiene algunas formas de instalarlos:
-
En Ubuntu/Debian, puede ejecutar:
sudo apt-get install ca-certificates -
En Alpine Linux, pruebe:
apk add ca-certificates
Si no puede instalar los certificados CA a nivel de sistema, puede añadirlos manualmente:
-
Descargue el certificado: https://letsencrypt.org/certs/isrgrootx1.pem
-
Coloque el archivo
isrgrootx1.pemen su proyecto Symfony. -
Actualice su archivo
config/packages/doctrine.yaml: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
Uso de MariaDB con Laravel
Para configurar MariaDB con Laravel, abra 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 los pasos de resolución anteriores.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Uso de MariaDB con PHP CodeIgniter
En su archivo database.php, puede configurar la conexión de la siguiente manera:
$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 usuario.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Importante: active el cifrado TLS
);
Conexión a MariaDB con PHP usando variables de entorno
Una buena práctica es no poner sus credenciales directamente en el código, sino utilizar variables de entorno. Puede recuperarlas así:
$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 usuario.
Uso de MariaDB con WordPress
Conectar WordPress a Stackhero para MariaDB es muy sencillo. En su archivo wp-config.php, defina los siguientes parámetros de base de datos:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Active el cifrado TLS (también llamado SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
El paso clave aquí es activar el cifrado TLS (a veces llamado SSL). La conexión no funcionará sin ello.
Uso de MariaDB con Node.js
Si utiliza Node.js, puede probar el paquete mysql2, que soporta promesas. Para instalarlo:
npm install mysql2
Aquí tiene un ejemplo que puede adaptar:
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 si no existe
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Crear la tabla users si no existe
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 de ejemplo
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generar un userId
'User name', // name
'User address', // address
'[email protected]' // email
]
]
);
// Contar usuarios en la tabla
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Ahora hay ${usersCount[0].cpt} registros en la tabla "users"`);
// Cerrar la conexión
await db.end();
})().catch(error => {
console.error('');
console.error('¡Ha ocurrido un error!');
console.error(error);
process.exit(1);
});
Uso de MariaDB con Node.js/NestJS/TypeORM
Para Node.js, NestJS o TypeORM, puede activar SSL añadiendo la opción ssl:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Uso de MariaDB con Prisma
Para conectar a MariaDB con Prisma, simplemente añada sslaccept=strict a su URL de conexión. Por ejemplo, si se conecta como usuario "root" a la base de datos "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Uso de MariaDB con Django
Si aún no lo ha hecho, puede instalar el módulo mysqlclient para conectar Django con MariaDB:
pip install mysqlclient
Si obtiene el error
Exception: Can not find valid pkg-config namedurante la instalación, puede que necesite instalar primero el paquetelibmysqlclient. Para Ubuntu/Debian:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Para probar la conexión, puede empezar poniendo sus credenciales directamente en settings.py. Esto es válido para pruebas, pero no es seguro para un entorno de 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>'
}
}
Tenga en cuenta: Este ejemplo es solo para pruebas. No debe usar credenciales en texto plano en producción.
Una vez que haya comprobado que la conexión funciona, es más seguro almacenar las credenciales en variables de entorno. Si utiliza django-environ, puede instalarlo así:
pip install django-environ
Después, actualice settings.py:
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')
}
}
A continuación, cree o actualice el archivo .env (en el mismo directorio que settings.py) con:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Por último, para mantener sus credenciales seguras, añada .env a su .gitignore:
echo ".env" >> .gitignore
Conexión de MariaDB con Java/Spring
Para conectar una aplicación Spring a MariaDB, puede definir la variable de entorno SPRING_DATASOURCE_URL con la URL de su base de datos, utilizando el prefijo jdbc:. Por ejemplo:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Conexión de MariaDB con Groovy/Grails
Aquí tiene un ejemplo de cómo puede configurar su aplicación Grails para conectar con 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" // Sustituya '/root' por el nombre real de su base de datos.
username = "root" // Es recomendable crear un usuario dedicado para su aplicación.
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
Por motivos de seguridad, es preferible crear un usuario dedicado para su aplicación en lugar de utilizar el usuario "root". Puede hacerlo fácilmente en phpMyAdmin:
- En phpMyAdmin, haga clic en
User accountsen la parte superior.
- Haga clic en
Add user account.
- Rellene el formulario:
- Elija un nombre de usuario (a menudo el nombre de su aplicación).
- Haga clic en
Generate passwordpara obtener una contraseña segura y cópiela. - Marque
Create database with same name and grant all privileges.
Una vez enviado, se crearán su nuevo usuario y una base de datos asociada.
Diferencias entre MariaDB y MySQL
MariaDB es un fork independiente de MySQL, creado por la comunidad open source tras la adquisición de MySQL por Oracle en 2010. Para la mayoría de los casos de uso, MariaDB y MySQL ofrecen características y compatibilidad muy similares.