MariaDB: Erste Schritte
Wie man mit MariaDB beginnt
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite MariaDB Cloud Lösung, die zahlreiche Vorteile bietet, darunter:
- Unbegrenzte Verbindungen und Übertragungen.
- phpMyAdmin Web-UI inklusive.
- Mühelose Updates mit nur einem Klick.
- Optimale Performance und robuste Sicherheit durch eine private und dedizierte VM.
Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die MariaDB Cloud Hosting Lösung von Stackhero auszuprobieren!
MariaDB URLs
Der einfachste Weg, sich mit Ihrem MariaDB-Dienst zu verbinden, ist die Verwendung des MySQL-URL-Formats, vorausgesetzt, Ihr Treiber unterstützt es:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Für Ruby-Nutzer unterscheidet sich die MySQL-URL leicht:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Verwendung von MariaDB mit PHP
Nachfolgend finden Sie einige Beispiele zur Verwendung von PHP, um sich mit MariaDB über verschiedene Erweiterungen zu verbinden. Denken Sie daran, dass die Verwendung der 'root'-Datenbank in der Produktion nicht empfohlen wird. Erstellen Sie stattdessen eine dedizierte Datenbank und einen Benutzer.
Verwendung von MariaDB mit PHP und MySQLi (objektorientierter Stil)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Es wird nicht empfohlen, die 'root'-Datenbank zu verwenden. Dies ist nur für das Beispiel. Die beste Praxis ist es, eine dedizierte Datenbank und einen Benutzer in phpMyAdmin zu erstellen und diese hier zu verwenden.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
echo 'Verbindung erfolgreich... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Verwendung von MariaDB mit PHP und MySQLi (prozeduraler Stil)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Es wird nicht empfohlen, die 'root'-Datenbank zu verwenden. Dies ist nur für das Beispiel. Die beste Praxis ist es, eine dedizierte Datenbank und einen Benutzer in phpMyAdmin zu erstellen und diese hier zu verwenden.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Verbindungsfehler: ' . mysqli_connect_error($mysqli));
}
echo 'Erfolg: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Verwendung von MariaDB mit PHP und PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Es wird nicht empfohlen, die 'root'-Datenbank zu verwenden. Dies ist nur für das Beispiel. Die beste Praxis ist es, eine dedizierte Datenbank und einen Benutzer in phpMyAdmin zu erstellen und diese hier zu verwenden.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Wenn Sie auf einen Fehler wie "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed" stoßen, überprüfen Sie, ob das Verzeichnis /etc/ssl/certs/ CA-Zertifikate enthält.
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 'Sie sind mit einer Datenbank verbunden, die Version ' . $version[0] . "\n" ausführt;
?>
Fehler "SSL operation failed with code 1" behandeln
Wenn Sie den Fehler erhalten:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
liegt das wahrscheinlich daran, dass das Verzeichnis /etc/ssl/certs/ die CA-Zertifikate nicht enthält. Wenn Sie Systemzugriff haben, können Sie diese Zertifikate wie folgt installieren:
-
Unter Ubuntu können Sie ausführen:
apt-get install ca-certificates -
Unter Alpine Linux führen Sie aus:
apk add ca-certificates
Wenn Sie keinen direkten Zugriff auf das System haben, das Ihren PHP-Code ausführt, können Sie das Zertifikat manuell installieren:
- Laden Sie das Zertifikat herunter: https://letsencrypt.org/certs/isrgrootx1.pem
- Fügen Sie die Datei
isrgrootx1.pemzu Ihren PHP-Projektdateien hinzu. - Kommentieren Sie die Zeile mit
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/'aus. - Kommentieren Sie die Zeile mit
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'ein.
"Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH" beheben
Wenn Sie einen Fehler wie den folgenden sehen:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
oder einen ähnlichen Fehler, der eine undefinierte Konstante für PDO MySQL-Attribute erwähnt, bedeutet dies, dass Ihre PDO-Installation keine MySQL-Unterstützung hat.
Lösung für Ubuntu/Debian
Installieren Sie die erforderliche PHP MySQL-Erweiterung mit:
sudo apt-get install php-mysql
Lösung für Docker
Wenn Sie Docker verwenden, stellen Sie sicher, dass die MySQL-Unterstützung während des Build-Prozesses enthalten ist. Erwägen Sie, Folgendes zu Ihrem Dockerfile hinzuzufügen:
RUN docker-php-ext-install pdo pdo_mysql
Verwendung von MariaDB mit Symfony und Doctrine
Bearbeiten Sie die .env-Datei und definieren Sie die DATABASE_URL-Variable wie folgt:
DATABASE_URL="mysql://<USER>:<PASSWORD>@XXXXXX.stackhero-network.com:<PORT>/<DATABASE>"
Aktualisieren Sie anschließend die Datei config/packages/doctrine.yaml, indem Sie den Treiber und die Optionen wie folgt festlegen:
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
Fehler "SSL operation failed with code 1" behandeln
Wenn Sie auf den Fehler stoßen:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
bedeutet das wahrscheinlich, dass das Verzeichnis /etc/ssl/certs/ die CA-Zertifikate nicht enthält. Sie können dies beheben, indem Sie sie installieren:
-
Unter Ubuntu/Debian führen Sie aus:
sudo apt-get install ca-certificates -
Unter Alpine Linux führen Sie aus:
apk add ca-certificates
Wenn Sie die Zertifikate nicht systemweit installieren können, können Sie sie manuell hinzufügen:
-
Laden Sie das Zertifikat herunter: https://letsencrypt.org/certs/isrgrootx1.pem
-
Platzieren Sie die Datei
isrgrootx1.pemin Ihrem Symfony-Projekt. -
Aktualisieren Sie dann die Datei
config/packages/doctrine.yaml, um das lokale Zertifikat zu verwenden: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
Verwendung von MariaDB mit Laravel
Um MariaDB mit Laravel einzurichten, bearbeiten Sie die Datei config/database.php und aktualisieren Sie die mysql-Konfiguration wie folgt:
'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([
// Wenn Sie auf SSL-Fehler wie "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed" stoßen, beachten Sie die obigen Anweisungen.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Verwendung von MariaDB mit PHP CodeIgniter
Fügen Sie in Ihrer database.php-Datei die folgende Konfiguration ein:
$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'); // Üblicherweise entspricht der Datenbankname dem Benutzernamen.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Wichtig: TLS-Verschlüsselung aktivieren
);
Verbindung zu MariaDB mit PHP unter Verwendung von Umgebungsvariablen
Es ist am besten, Ihre Anmeldeinformationen nicht fest zu codieren. Verwenden Sie stattdessen Umgebungsvariablen. Sie können die Anmeldeinformationen wie folgt abrufen:
$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'); // Üblicherweise entspricht der Datenbankname dem Benutzernamen.
Verwendung von MariaDB mit WordPress
Die Verbindung von WordPress zu Stackhero für MariaDB ist einfach. Bearbeiten Sie die Datei wp-config.php und konfigurieren Sie Ihre Datenbankeinstellungen wie folgt:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// TLS-Verschlüsselung aktivieren (auch bekannt als SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Der wichtige Teil hier ist die Aktivierung der TLS-Verschlüsselung (auch bekannt als SSL). Ohne sie wird die Verbindung nicht funktionieren.
Verwendung von MariaDB mit Node.js
In diesem Beispiel verwenden wir das mysql2-Paket mit Unterstützung für Promises. Installieren Sie es zuerst mit:
npm install mysql2
Verwenden Sie dann den folgenden Code:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Erstellen Sie die Datenbank 'stackherotest', falls sie noch nicht existiert
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Erstellen Sie die Tabelle 'users', falls sie noch nicht existiert
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;'
);
// Fügen Sie einen fiktiven Benutzer hinzu
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generieren Sie eine fiktive userId
'Benutzername', // 'name'-Spalte
'Benutzeradresse', // 'address'-Spalte
'user@email.com' // 'email'-Spalte
]
]
);
// Zählen Sie die Anzahl der Zeilen in der Tabelle 'users'
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Es gibt jetzt ${usersCount[0].cpt} Einträge in der Tabelle "users"`);
// Schließen Sie die Verbindung zu MariaDB
await db.end();
})().catch(error => {
console.error('');
console.error('🐞 Ein Fehler ist aufgetreten!');
console.error(error);
process.exit(1);
});
Verwendung von MariaDB mit Node.js/NestJS/TypeORM
Beim Verbinden von Node.js, NestJS oder TypeORM fügen Sie die ssl-Option wie gezeigt hinzu:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Verwendung von MariaDB mit Prisma
Um sich mit Prisma zu verbinden, fügen Sie die Option sslaccept=strict hinzu, um sicherzustellen, dass die SSL-Verschlüsselung aktiviert ist. Zum Beispiel, wenn Sie den Benutzer "root" verwenden, um sich mit der Datenbank "root" zu verbinden:
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Verwendung von MariaDB mit Django
Wenn Sie das mysqlclient-Modul (zum Verbinden mit MariaDB) noch nicht installiert haben, führen Sie aus:
pip install mysqlclient
Wenn Sie den Fehler
Exception: Can not find valid pkg-config namebeim Installieren vonmysqlclienterhalten, installieren Sie daslibmysqlclient-Paket. Unter Ubuntu/Debian können Sie ausführen:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Anfangs können Sie Ihre Anmeldeinformationen direkt in der Datei settings.py für Tests speichern, wie unten gezeigt. Beachten Sie, dass dieser Ansatz für die Produktion nicht sicher ist.
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>'
}
}
Achtung Seien Sie vorsichtig: Dieses Beispiel wird nicht für die Produktion empfohlen und dient nur zu Testzwecken!
Sobald die Verbindung funktioniert, ist es am besten, Umgebungsvariablen zu verwenden, um Ihre Anmeldeinformationen zu speichern. Zum Beispiel mit django-environ, installieren Sie es zuerst:
pip install django-environ
Aktualisieren Sie dann settings.py wie folgt:
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')
}
}
Erstellen oder aktualisieren Sie die .env-Datei (im selben Verzeichnis wie settings.py) mit folgendem Inhalt:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Fügen Sie schließlich .env zu Ihrer .gitignore hinzu, um zu verhindern, dass sensible Informationen committet werden:
echo ".env" >> .gitignore
Verbindung zu MariaDB mit Java/Spring
Um Ihre Spring-Anwendung zu verbinden, setzen Sie die Umgebungsvariable SPRING_DATASOURCE_URL mit Ihrer Datenbank-URL, die mit jdbc: beginnt. Zum Beispiel:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Verbindung zu MariaDB mit Groovy/Grails
Das folgende Beispiel zeigt, wie Sie Ihre Grails-Anwendung konfigurieren, um sich mit MariaDB zu verbinden:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// SSL-spezifische Eigenschaften
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" // Ersetzen Sie '/root' durch den gewünschten Datenbanknamen.
username = "root" // Es ist ratsam, einen dedizierten Benutzer zu erstellen, anstatt 'root' zu verwenden.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Erwägen Sie, einen dedizierten Benutzer zu erstellen.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Erstellen eines Benutzers auf MariaDB mit phpMyAdmin
Es ist ratsam, einen dedizierten Benutzer für Ihre Anwendung zu erstellen, anstatt den 'root'-Benutzer zu verwenden. Der einfachste Weg, dies zu tun, ist über phpMyAdmin:
- Klicken Sie in phpMyAdmin oben auf
Benutzerkonten.
- Klicken Sie auf
Benutzerkonto hinzufügen.
- Füllen Sie das Benutzererstellungsformular aus:
- Wählen Sie einen Kontonamen (normalerweise den Namen Ihrer Anwendung).
- Klicken Sie auf
Passwort generierenfür ein sicheres Passwort und kopieren Sie es dann. - Aktivieren Sie die Option
Datenbank mit demselben Namen erstellen und alle Berechtigungen gewähren.
Nach dem Absenden wird ein neuer Benutzer erstellt, zusammen mit einer Datenbank, die denselben Namen wie der Benutzername trägt.
Unterschiede zwischen MariaDB und MySQL
MariaDB ist ein unabhängiger Fork, der von der Open-Source-Community erstellt wurde, nachdem Oracle MySQL im Jahr 2010 übernommen hatte. Für die meisten Zwecke sind MariaDB und MySQL sehr ähnlich.