MariaDB: Aan de slag
Hoe te beginnen 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-service is door het MySQL URL-formaat te gebruiken, mits uw driver dit ondersteunt:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Voor Ruby-gebruikers verschilt de MySQL URL enigszins:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
MariaDB gebruiken met PHP
Hieronder staan verschillende voorbeelden met PHP om u te helpen verbinding te maken met MariaDB met verschillende extensies. Onthoud dat het gebruik van de 'root'-database niet wordt aanbevolen voor productie. Overweeg in plaats daarvan een speciale database en gebruiker aan te maken.
MariaDB gebruiken met PHP en MySQLi (objectgeoriënteerde stijl)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Het wordt niet aanbevolen om de 'root'-database te gebruiken. Dit is alleen voor het voorbeeld. De beste praktijk is om een speciale database en gebruiker aan te maken in phpMyAdmin en deze hier te gebruiken.
$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'; // Het wordt niet aanbevolen om de 'root'-database te gebruiken. Dit is alleen voor het voorbeeld. De beste praktijk is om een speciale database en gebruiker aan te maken in phpMyAdmin en deze hier te gebruiken.
$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'; // Het wordt niet aanbevolen om de 'root'-database te gebruiken. Dit is alleen voor het voorbeeld. De beste praktijk is om een speciale database en gebruiker aan te maken in phpMyAdmin en deze hier te gebruiken.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Als u een fout tegenkomt zoals "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", controleer dan of de /etc/ssl/certs/ directory 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 die versie ' . $version[0] . "\n" draait;
?>
Fout "SSL operation failed with code 1" oplossen
Als u de fout ontvangt:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
dan komt dit waarschijnlijk omdat de /etc/ssl/certs/ directory de CA-certificaten niet bevat. Als u toegang heeft tot het systeem, kunt u deze certificaten als volgt installeren:
-
Op Ubuntu kunt u uitvoeren:
apt-get install ca-certificates -
Op Alpine Linux, voer uit:
apk add ca-certificates
Als u geen directe toegang heeft tot het systeem dat uw PHP-code uitvoert, kunt u het certificaat handmatig installeren:
- Download het certificaat: https://letsencrypt.org/certs/isrgrootx1.pem
- Voeg het
isrgrootx1.pembestand toe aan uw PHP-projectbestanden. - Commentaar de regel met
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Haal de commentaar weg bij de regel met
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Fout "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH" oplossen
Als u een fout ziet zoals:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
of een soortgelijke fout die een niet-gedefinieerde constante voor PDO MySQL-attributen vermeldt, betekent dit dat uw PDO-installatie MySQL-ondersteuning mist.
Oplossing voor Ubuntu/Debian
Installeer de vereiste PHP MySQL-extensie met:
sudo apt-get install php-mysql
Oplossing voor Docker
Als u Docker gebruikt, zorg ervoor dat MySQL-ondersteuning is opgenomen tijdens het buildproces. Overweeg het volgende toe te voegen aan uw Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
MariaDB gebruiken met Symfony en Doctrine
Bewerk het .env bestand en definieer de DATABASE_URL variabele als volgt:
DATABASE_URL="mysql://<USER>:<PASSWORD>@XXXXXX.stackhero-network.com:<PORT>/<DATABASE>"
Werk vervolgens het config/packages/doctrine.yaml bestand bij, waarbij u de driver en opties als volgt instelt:
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
Fout "SSL operation failed with code 1" oplossen
Als u de fout tegenkomt:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
dan betekent dit waarschijnlijk dat de /etc/ssl/certs/ directory de CA-certificaten niet bevat. U kunt dit oplossen door ze te installeren:
-
Op Ubuntu/Debian, voer uit:
sudo apt-get install ca-certificates -
Op Alpine Linux, voer uit:
apk add ca-certificates
Als u de certificaten niet systeemwijd kunt installeren, kunt u ze handmatig toevoegen:
-
Download het certificaat: https://letsencrypt.org/certs/isrgrootx1.pem
-
Plaats het
isrgrootx1.pembestand in uw Symfony-project. -
Werk vervolgens het
config/packages/doctrine.yamlbestand bij om het lokale certificaat te gebruiken: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 met Laravel in te stellen, bewerk het config/database.php bestand en werk de mysql configuratie als volgt bij:
'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 tegenkomt zoals "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", raadpleeg dan de bovenstaande instructies.
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
Voeg in uw database.php bestand de volgende configuratie in:
$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'); // Conventioneel 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 met behulp van omgevingsvariabelen
Het is het beste om uw inloggegevens niet hard te coderen. Overweeg in plaats daarvan om omgevingsvariabelen te gebruiken. U kunt de inloggegevens 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'); // Conventioneel komt de databasenaam overeen met de gebruikersnaam.
MariaDB gebruiken met WordPress
Het verbinden van WordPress met Stackhero voor MariaDB is eenvoudig. Bewerk het wp-config.php bestand en configureer uw database-instellingen als volgt:
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 bekend als SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Het belangrijke deel hier is de activering van TLS-encryptie (ook bekend als SSL). Zonder dit zal de verbinding niet werken.
MariaDB gebruiken met Node.js
In dit voorbeeld gebruiken we het mysql2 pakket met ondersteuning voor promises. Installeer het eerst met:
npm install mysql2
Gebruik vervolgens de volgende code:
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 'stackherotest' aan als deze nog niet bestaat
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Maak de tabel 'users' 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 fictieve gebruiker toe
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Genereer een fictieve userId
'Gebruikersnaam', // 'name' kolom
'Gebruikersadres', // 'address' kolom
'user@email.com' // 'email' kolom
]
]
);
// Tel het aantal rijen in de 'users' tabel
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Er zijn nu ${usersCount[0].cpt} vermeldingen in de tabel "users"`);
// Sluit de verbinding met MariaDB
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
Bij het verbinden vanuit Node.js, NestJS of TypeORM, voeg de ssl optie toe zoals getoond:
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 Prisma, voeg de sslaccept=strict optie toe om ervoor te zorgen dat SSL-encryptie is ingeschakeld. Bijvoorbeeld, met de gebruiker "root" die verbinding maakt met de database "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
MariaDB gebruiken met Django
Als u de mysqlclient module nog niet heeft geïnstalleerd (gebruikt om verbinding te maken met MariaDB), voer uit:
pip install mysqlclient
Als u de fout
Exception: Can not find valid pkg-config nametegenkomt bij het installeren vanmysqlclient, installeer dan hetlibmysqlclientpakket. Op Ubuntu/Debian, kunt u uitvoeren:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Aanvankelijk kunt u uw inloggegevens direct in het settings.py bestand opslaan voor testen zoals hieronder getoond. Merk op dat deze aanpak niet veilig is 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>'
}
}
waarschuwing Wees voorzichtig: dit voorbeeld wordt niet aanbevolen voor productie en is alleen voor testdoeleinden!
Zodra de verbinding werkt, is het het beste om omgevingsvariabelen te gebruiken om uw inloggegevens op te slaan. Bijvoorbeeld, met django-environ, installeer het eerst:
pip install django-environ
Werk vervolgens settings.py bij als volgt:
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 of werk het .env bestand bij (in dezelfde directory als settings.py) met het volgende:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Voeg ten slotte .env toe aan uw .gitignore om te voorkomen dat gevoelige informatie wordt gecommit:
echo ".env" >> .gitignore
MariaDB verbinden met Java/Spring
Om uw Spring-applicatie te verbinden, stelt u de omgevingsvariabele SPRING_DATASOURCE_URL in met uw database-URL, voorafgegaan door jdbc:. Bijvoorbeeld:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
MariaDB verbinden met Groovy/Grails
Het volgende voorbeeld laat zien hoe u uw Grails-applicatie configureert 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 gewenste databasenaam.
username = "root" // Het is raadzaam om een speciale gebruiker aan te maken in plaats van 'root' te gebruiken.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Overweeg een speciale 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 op MariaDB met phpMyAdmin
Het is goed om een speciale gebruiker voor uw applicatie aan te maken in plaats van de 'root'-gebruiker te gebruiken. De eenvoudigste manier om dit te doen is via phpMyAdmin:
- Klik in phpMyAdmin bovenaan op
Gebruikersaccounts.
- Klik op
Gebruikersaccount toevoegen.
- Vul het gebruikersaanmaakformulier in:
- Kies een accountnaam (meestal de naam van uw applicatie).
- Klik op
Wachtwoord genererenvoor een veilig wachtwoord en kopieer het. - Vink de optie
Maak een database met dezelfde naam aan en geef alle rechtenaan.
Na indiening wordt er een nieuwe gebruiker aangemaakt samen met een database die dezelfde naam heeft als de gebruikersnaam.
Verschillen tussen MariaDB en MySQL
MariaDB is een onafhankelijke fork gemaakt door de open source gemeenschap nadat Oracle MySQL in 2010 had overgenomen. Voor de meeste doeleinden zijn MariaDB en MySQL zeer vergelijkbaar.