MariaDB: Iniziare
Come iniziare con MariaDB
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione MariaDB cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:
- Connessioni e trasferimenti illimitati.
- Interfaccia web phpMyAdmin inclusa.
- Aggiornamenti facili con un solo clic.
- Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.
Risparmiate tempo e semplificate la vostra vita: bastano solo 5 minuti per provare la soluzione di MariaDB cloud hosting di Stackhero!
URL di MariaDB
Il modo più semplice per connettersi al servizio MariaDB è utilizzare il formato URL MySQL, a condizione che il driver lo supporti:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Per gli utenti Ruby, l'URL MySQL differisce leggermente:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Utilizzare MariaDB con PHP
Di seguito sono riportati diversi esempi che utilizzano PHP per aiutarti a connetterti a MariaDB utilizzando diverse estensioni. Ricorda che non è consigliato utilizzare il database 'root' in produzione. Invece, considera di creare un database e un utente dedicati.
Utilizzare MariaDB con PHP e MySQLi (stile orientato agli oggetti)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Non è consigliato utilizzare il database 'root'. Questo è solo per l'esempio. La migliore pratica è creare un database e un utente dedicati in phpMyAdmin e utilizzarli qui.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Errore di connessione: ' . $mysqli->connect_error);
}
echo 'Connessione riuscita... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Utilizzare MariaDB con PHP e MySQLi (stile procedurale)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Non è consigliato utilizzare il database 'root'. Questo è solo per l'esempio. La migliore pratica è creare un database e un utente dedicati in phpMyAdmin e utilizzarli qui.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Errore di connessione: ' . mysqli_connect_error($mysqli));
}
echo 'Successo: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Utilizzare MariaDB con PHP e PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Non è consigliato utilizzare il database 'root'. Questo è solo per l'esempio. La migliore pratica è creare un database e un utente dedicati in phpMyAdmin e utilizzarli qui.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Se incontri un errore come "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", verifica se la directory /etc/ssl/certs/ contiene certificati 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 'Sei connesso a un database che esegue la versione ' . $version[0] . "\n";
?>
Gestire l'errore "SSL operation failed with code 1"
Se ricevi l'errore:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
probabilmente è perché la directory /etc/ssl/certs/ non contiene i certificati CA. Se hai accesso al sistema, puoi installare questi certificati come segue:
-
Su Ubuntu, puoi eseguire:
apt-get install ca-certificates -
Su Alpine Linux, esegui:
apk add ca-certificates
Se non hai accesso diretto al sistema che esegue il tuo codice PHP, puoi installare il certificato manualmente:
- Scarica il certificato: https://letsencrypt.org/certs/isrgrootx1.pem
- Aggiungi il file
isrgrootx1.pemai tuoi file di progetto PHP. - Commenta la linea con
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Decommenta la linea con
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Risolvere "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH"
Se vedi un errore come:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
o un errore simile che menziona una costante non definita per gli attributi PDO MySQL, indica che la tua installazione PDO manca del supporto MySQL.
Soluzione per Ubuntu/Debian
Installa l'estensione PHP MySQL richiesta con:
sudo apt-get install php-mysql
Soluzione per Docker
Se stai usando Docker, assicurati che il supporto MySQL sia incluso durante il processo di build. Considera di aggiungere quanto segue al tuo Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
Utilizzare MariaDB con Symfony e Doctrine
Modifica il file .env e definisci la variabile DATABASE_URL come segue:
DATABASE_URL="mysql://<USER>:<PASSWORD>@XXXXXX.stackhero-network.com:<PORT>/<DATABASE>"
Successivamente, aggiorna il file config/packages/doctrine.yaml, impostando il driver e le opzioni come segue:
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
Gestire l'errore "SSL operation failed with code 1"
Se incontri l'errore:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
probabilmente significa che la directory /etc/ssl/certs/ non contiene i certificati CA. Puoi risolvere questo problema installandoli:
-
Su Ubuntu/Debian, esegui:
sudo apt-get install ca-certificates -
Su Alpine Linux, esegui:
apk add ca-certificates
Se non puoi installare i certificati a livello di sistema, puoi aggiungerli manualmente:
-
Scarica il certificato: https://letsencrypt.org/certs/isrgrootx1.pem
-
Posiziona il file
isrgrootx1.pemnel tuo progetto Symfony. -
Quindi, aggiorna il file
config/packages/doctrine.yamlper utilizzare il certificato locale: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
Utilizzare MariaDB con Laravel
Per configurare MariaDB con Laravel, modifica il file config/database.php e aggiorna la configurazione mysql come segue:
'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([
// Se incontri errori SSL come "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", fai riferimento alle istruzioni sopra.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Utilizzare MariaDB con PHP CodeIgniter
Nel tuo file database.php, inserisci la seguente configurazione:
$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'); // Per convenzione, il nome del database corrisponde al nome utente.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Importante: attivare la crittografia TLS
);
Connettere MariaDB con PHP utilizzando variabili d'ambiente
È buona pratica evitare di codificare le credenziali. Invece, considera di utilizzare variabili d'ambiente. Puoi recuperare le credenziali come segue:
$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'); // Per convenzione, il nome del database corrisponde al nome utente.
Utilizzare MariaDB con WordPress
Connettere WordPress a Stackhero per MariaDB è semplice. Modifica il file wp-config.php e configura le impostazioni del database come segue:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Abilitare la crittografia TLS (nota anche come SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
La parte importante qui è l'attivazione della crittografia TLS (nota anche come SSL). Senza di essa, la connessione non funzionerà.
Utilizzare MariaDB con Node.js
In questo esempio, utilizziamo il pacchetto mysql2 con supporto per le promesse. Prima, installalo con:
npm install mysql2
Quindi, utilizza il seguente codice:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Crea il database 'stackherotest' se non esiste già
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Crea la tabella 'users' se non esiste ancora
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;'
);
// Inserisci un utente fittizio
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Genera un userId fittizio
'Nome utente', // Colonna 'name'
'Indirizzo utente', // Colonna 'address'
'user@email.com' // Colonna 'email'
]
]
);
// Conta il numero di righe nella tabella 'users'
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Ci sono ora ${usersCount[0].cpt} voci nella tabella "users"`);
// Chiudi la connessione a MariaDB
await db.end();
})().catch(error => {
console.error('');
console.error('🐞 Si è verificato un errore!');
console.error(error);
process.exit(1);
});
Utilizzare MariaDB con Node.js/NestJS/TypeORM
Quando ti connetti da Node.js, NestJS o TypeORM, includi l'opzione ssl come mostrato:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Utilizzare MariaDB con Prisma
Per connettersi con Prisma, aggiungi l'opzione sslaccept=strict per garantire che la crittografia SSL sia abilitata. Ad esempio, utilizzando l'utente "root" che si connette al database "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Utilizzare MariaDB con Django
Se non hai ancora installato il modulo mysqlclient (utilizzato per connettersi a MariaDB), esegui:
pip install mysqlclient
Se incontri l'errore
Exception: Can not find valid pkg-config namedurante l'installazione dimysqlclient, installa il pacchettolibmysqlclient. Su Ubuntu/Debian, puoi eseguire:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Inizialmente, puoi memorizzare le tue credenziali direttamente nel file settings.py per i test come mostrato di seguito. Nota che questo approccio non è sicuro per la produzione.
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>'
}
}
attenzione Fai attenzione: questo esempio non è consigliato per la produzione ed è solo a scopo di test!
Una volta che la connessione funziona, è meglio utilizzare variabili d'ambiente per memorizzare le tue credenziali. Ad esempio, utilizzando django-environ, installalo prima:
pip install django-environ
Quindi aggiorna settings.py come segue:
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')
}
}
Crea o aggiorna il file .env (nella stessa directory di settings.py) con quanto segue:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Infine, aggiungi .env al tuo .gitignore per evitare di commettere informazioni sensibili:
echo ".env" >> .gitignore
Connettere MariaDB con Java/Spring
Per connettere la tua applicazione Spring, imposta la variabile d'ambiente SPRING_DATASOURCE_URL con il tuo URL del database, prefissato con jdbc:. Ad esempio:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Connettere MariaDB con Groovy/Grails
Il seguente esempio mostra come configurare la tua applicazione Grails per connettersi a MariaDB:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// Proprietà specifiche 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" // Sostituisci '/root' con il nome del database desiderato.
username = "root" // È consigliabile creare un utente dedicato invece di utilizzare 'root'.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Considera di creare un utente dedicato.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Creare un utente su MariaDB utilizzando phpMyAdmin
È buona pratica creare un utente dedicato per la tua applicazione piuttosto che utilizzare l'utente 'root'. Il modo più semplice per farlo è tramite phpMyAdmin:
- In phpMyAdmin, fai clic su
Account utentein alto.
- Fai clic su
Aggiungi account utente.
- Completa il modulo di creazione dell'utente:
- Scegli un nome account (tipicamente il nome della tua applicazione).
- Fai clic su
Genera passwordper una password sicura, quindi copiala. - Seleziona l'opzione
Crea database con lo stesso nome e concedi tutti i privilegi.
Dopo l'invio, verrà creato un nuovo utente insieme a un database che condivide lo stesso nome dell'username.
Differenze tra MariaDB e MySQL
MariaDB è un fork indipendente creato dalla comunità open source dopo l'acquisizione di MySQL da parte di Oracle nel 2010. Per la maggior parte degli scopi, MariaDB e MySQL sono molto simili.