MariaDB: Aan de slag
Hoe u aan de slag gaat met MariaDB
👋 Welkom bij de Stackhero-documentatie!
Stackhero biedt een gebruiksklare MariaDB cloud oplossing die tal van voordelen biedt, waaronder:
- Onbeperkte verbindingen en overdrachten.
- phpMyAdmin webinterface inbegrepen.
- Moeiteloze updates met slechts één klik.
- Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.
Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de MariaDB cloud hosting oplossing van Stackhero te proberen!
MariaDB-URL's
De eenvoudigste manier om verbinding te maken met uw MariaDB-dienst is door het MySQL-URL-formaat te gebruiken, zolang uw driver dit ondersteunt:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Als u Ruby gebruikt, is de MySQL-URL iets anders:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
MariaDB gebruiken met PHP
Hieronder vindt u enkele voorbeelden van hoe u verbinding kunt maken met MariaDB vanuit PHP met verschillende extensies. Hoewel deze voorbeelden de "root"-database gebruiken, is het aanbevolen om voor uw applicatie een aparte database en gebruiker aan te maken, zeker in productieomgevingen.
MariaDB gebruiken met PHP en MySQLi (objectgeoriënteerde stijl)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Alleen ter demonstratie. Maak voor best practices uw eigen database en gebruiker aan in phpMyAdmin en gebruik deze inloggegevens.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Verbindingsfout: ' . $mysqli->connect_error);
}
echo 'Verbinding succesvol... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
MariaDB gebruiken met PHP en MySQLi (procedurele stijl)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Alleen ter demonstratie. Maak voor best practices uw eigen database en gebruiker aan in phpMyAdmin en gebruik deze inloggegevens.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Verbindingsfout: ' . mysqli_connect_error($mysqli));
}
echo 'Succes: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
MariaDB gebruiken met PHP en PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Alleen ter demonstratie. Maak voor best practices uw eigen database en gebruiker aan in phpMyAdmin en gebruik deze inloggegevens.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Als u een foutmelding krijgt zoals "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", controleer dan of uw directory /etc/ssl/certs/ de benodigde CA-certificaten bevat.
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 'U bent verbonden met een database met versie ' . $version[0] . "\n";
?>
Hoe lost u de foutmelding "SSL operation failed with code 1" op
Als u deze foutmelding ziet:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
komt dit waarschijnlijk doordat de benodigde CA-certificaten ontbreken in de map /etc/ssl/certs/. Als u systeemtoegang heeft, kunt u deze als volgt installeren:
-
Op Ubuntu kunt u het volgende uitvoeren:
apt-get install ca-certificates -
Op Alpine Linux probeert u:
apk add ca-certificates
Als u geen systeemtoegang heeft, kunt u het certificaat handmatig toevoegen:
- Download het certificaat: https://letsencrypt.org/certs/isrgrootx1.pem
- Plaats het bestand
isrgrootx1.pemin uw PHP-project. - Zet de regel met
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/'in commentaar. - Haal de commentaar weg bij de regel met
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Hoe lost u "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH" op
Als u een foutmelding krijgt zoals:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
of een vergelijkbare melding over een onbekende constante voor PDO MySQL-attributen, dan ondersteunt uw PDO-installatie waarschijnlijk geen MySQL.
Op Ubuntu/Debian
U kunt de benodigde PHP MySQL-extensie installeren met:
sudo apt-get install php-mysql
Als u Docker gebruikt
Om MySQL-ondersteuning te activeren, voegt u het volgende toe aan uw Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
### MariaDB gebruiken met Symfony en Doctrine
Om te beginnen, bewerk uw `.env`-bestand en stel de variabele `DATABASE_URL` in als volgt:
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
Werk vervolgens uw bestand `config/packages/doctrine.yaml` bij om de driver en opties in te stellen:
```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
Hoe lost u de foutmelding "SSL operation failed with code 1" op
Als u deze foutmelding krijgt:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
komt dit waarschijnlijk doordat de CA-certificaten niet op uw systeem zijn geïnstalleerd. U kunt deze als volgt installeren:
-
Op Ubuntu/Debian voert u uit:
sudo apt-get install ca-certificates -
Op Alpine Linux probeert u:
apk add ca-certificates
Als u geen systeemtoegang heeft om CA-certificaten te installeren, kunt u ze handmatig toevoegen:
-
Download het certificaat: https://letsencrypt.org/certs/isrgrootx1.pem
-
Plaats het bestand
isrgrootx1.pemin uw Symfony-project. -
Werk uw bestand
config/packages/doctrine.yamlbij: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
MariaDB gebruiken met Laravel
Om MariaDB te configureren met Laravel, opent u config/database.php en past u de mysql-configuratie als volgt aan:
'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([
// Als u SSL-fouten krijgt zoals "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", zie de bovenstaande troubleshooting-stappen.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
MariaDB gebruiken met PHP CodeIgniter
In uw database.php-bestand kunt u de volgende configuratie instellen:
$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'), // Volgens conventie komt de databasenaam overeen met de gebruikersnaam.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Belangrijk: activeer TLS-encryptie
);
MariaDB verbinden met PHP via omgevingsvariabelen
Het is een goede praktijk om uw inloggegevens niet in de code te plaatsen, maar gebruik te maken van omgevingsvariabelen. U kunt deze als volgt ophalen:
$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'); // Volgens conventie komt de databasenaam overeen met de gebruikersnaam.
MariaDB gebruiken met WordPress
WordPress verbinden met Stackhero voor MariaDB is eenvoudig. Stel in uw wp-config.php-bestand de volgende databaseparameters in:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Activeer TLS-encryptie (ook wel SSL genoemd)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
De belangrijkste stap hier is het inschakelen van TLS-encryptie (ook wel SSL genoemd). Zonder deze instelling werkt de verbinding niet.
MariaDB gebruiken met Node.js
Als u Node.js gebruikt, kunt u het mysql2-pakket proberen, dat ondersteuning biedt voor promises. Om het te installeren:
npm install mysql2
Hieronder een voorbeeld dat u kunt aanpassen:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Maak de database aan als deze nog niet bestaat
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Maak de users-tabel aan als deze nog niet bestaat
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;'
);
// Voeg een voorbeeldgebruiker toe
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Genereer een userId
'User name', // name
'User address', // address
'[email protected]' // email
]
]
);
// Tel het aantal gebruikers in de tabel
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Er staan nu ${usersCount[0].cpt} records in de tabel "users"`);
// Sluit de verbinding
await db.end();
})().catch(error => {
console.error('');
console.error('Er is een fout opgetreden!');
console.error(error);
process.exit(1);
});
MariaDB gebruiken met Node.js/NestJS/TypeORM
Voor Node.js, NestJS of TypeORM kunt u SSL inschakelen door de optie ssl toe te voegen:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
MariaDB gebruiken met Prisma
Om verbinding te maken met MariaDB via Prisma, voegt u eenvoudig sslaccept=strict toe aan uw connectie-URL. Bijvoorbeeld, als u als gebruiker "root" op de database "root" wilt verbinden:
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
MariaDB gebruiken met Django
Als u dat nog niet heeft gedaan, kunt u de module mysqlclient installeren om Django met MariaDB te verbinden:
pip install mysqlclient
Als u de foutmelding
Exception: Can not find valid pkg-config namekrijgt tijdens de installatie, moet u mogelijk eerst het pakketlibmysqlclientinstalleren. Voor Ubuntu/Debian:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Om uw verbinding te testen, kunt u uw inloggegevens direct in settings.py plaatsen. Dit is prima voor testdoeleinden, maar niet veilig voor productie.
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>'
}
}
Let op: dit voorbeeld is alleen bedoeld voor testdoeleinden. Gebruik geen hardcoded credentials in productie.
Zodra u de verbinding heeft getest, is het veiliger om de inloggegevens in omgevingsvariabelen op te slaan. Als u django-environ gebruikt, installeert u deze als volgt:
pip install django-environ
Werk vervolgens settings.py bij:
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')
}
}
Maak vervolgens of werk het .env-bestand bij (in dezelfde map als settings.py) met:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Tot slot, om uw inloggegevens te beschermen, voegt u .env toe aan uw .gitignore:
echo ".env" >> .gitignore
MariaDB verbinden met Java/Spring
Om een Spring-applicatie te verbinden met MariaDB, stelt u de omgevingsvariabele SPRING_DATASOURCE_URL in met uw database-URL, met het jdbc:-voorvoegsel. Bijvoorbeeld:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
MariaDB verbinden met Groovy/Grails
Hieronder een voorbeeld van hoe u uw Grails-applicatie kunt configureren om verbinding te maken met MariaDB:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// SSL-specifieke eigenschappen
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" // Vervang '/root' door uw daadwerkelijke databasenaam.
username = "root" // Het is verstandig om een aparte gebruiker voor uw applicatie aan te maken.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Overweeg een aparte gebruiker aan te maken.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Een gebruiker aanmaken in MariaDB via phpMyAdmin
Voor een betere beveiliging is het aanbevolen om een aparte gebruiker voor uw applicatie aan te maken in plaats van "root" te gebruiken. Dit kan eenvoudig in phpMyAdmin:
- Klik in phpMyAdmin bovenaan op
User accounts.
- Klik op
Add user account.
- Vul het formulier in:
- Kies een gebruikersnaam (vaak de naam van uw applicatie).
- Klik op
Generate passwordvoor een sterk wachtwoord en kopieer dit. - Vink
Create database with same name and grant all privilegesaan.
Na het indienen worden uw nieuwe gebruiker en een bijbehorende database aangemaakt.
Verschillen tussen MariaDB en MySQL
MariaDB is een onafhankelijke fork van MySQL, ontwikkeld door de open source-community nadat Oracle MySQL in 2010 heeft overgenomen. Voor de meeste toepassingen bieden MariaDB en MySQL zeer vergelijkbare functionaliteit en compatibiliteit.