MariaDB: Erste Schritte
Wie Sie mit MariaDB starten
👋 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
Die einfachste Möglichkeit, sich mit Ihrem MariaDB-Service zu verbinden, ist die Verwendung des MySQL-URL-Formats, sofern Ihr Treiber dies unterstützt:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Wenn Sie Ruby verwenden, ist die MySQL-URL leicht abgewandelt:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
MariaDB mit PHP verwenden
Im Folgenden finden Sie einige Beispiele, wie Sie sich mit verschiedenen PHP-Erweiterungen mit MariaDB verbinden können. Auch wenn in diesen Beispielen die Datenbank "root" verwendet wird, empfiehlt es sich, für Ihre Anwendung – insbesondere in Produktionsumgebungen – eine eigene Datenbank und einen eigenen Benutzer anzulegen.
MariaDB mit PHP und MySQLi (objektorientierter Stil)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nur zu Demonstrationszwecken. Best Practice: Legen Sie Ihre eigene Datenbank und einen Benutzer in phpMyAdmin an und verwenden Sie diese Zugangsdaten.
$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();
?>
MariaDB mit PHP und MySQLi (prozeduraler Stil)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nur zu Demonstrationszwecken. Best Practice: Legen Sie Ihre eigene Datenbank und einen Benutzer in phpMyAdmin an und verwenden Sie diese Zugangsdaten.
$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);
?>
MariaDB mit PHP und PDO verwenden
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nur zu Demonstrationszwecken. Best Practice: Legen Sie Ihre eigene Datenbank und einen Benutzer in phpMyAdmin an und verwenden Sie diese Zugangsdaten.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Falls Sie einen Fehler wie "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed" erhalten, stellen Sie sicher, dass Ihr Verzeichnis /etc/ssl/certs/ die 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 verbunden mit einer Datenbank in Version ' . $version[0] . "\n";
?>
Wie Sie den Fehler "SSL operation failed with code 1" beheben
Wenn Sie diesen Fehler sehen:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
liegt das vermutlich daran, dass im Verzeichnis /etc/ssl/certs/ die benötigten CA-Zertifikate fehlen. Wenn Sie Systemzugriff haben, können Sie diese wie folgt installieren:
-
Unter Ubuntu können Sie ausführen:
apt-get install ca-certificates -
Unter Alpine Linux versuchen Sie:
apk add ca-certificates
Wenn Sie keinen Systemzugriff haben, können Sie das Zertifikat manuell hinzufügen:
- Laden Sie das Zertifikat herunter: https://letsencrypt.org/certs/isrgrootx1.pem
- Legen Sie die Datei
isrgrootx1.pemin Ihr PHP-Projekt. - 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.
Wie Sie "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH" beheben
Wenn Sie einen Fehler wie diesen sehen:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
oder eine ähnliche Meldung bezüglich einer undefinierten PDO-MySQL-Konstanten, unterstützt Ihre PDO-Installation vermutlich kein MySQL.
Unter Ubuntu/Debian
Sie können die benötigte PHP-MySQL-Erweiterung installieren mit:
sudo apt-get install php-mysql
Wenn Sie Docker verwenden
Um sicherzustellen, dass MySQL-Support verfügbar ist, fügen Sie Folgendes zu Ihrem Dockerfile hinzu:
RUN docker-php-ext-install pdo pdo_mysql
### MariaDB mit Symfony und Doctrine verwenden
Um zu starten, bearbeiten Sie Ihre `.env`-Datei und setzen Sie die Variable `DATABASE_URL` wie folgt:
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
Anschließend aktualisieren Sie Ihre Datei `config/packages/doctrine.yaml`, um den Treiber und die Optionen zu setzen:
```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
Wie Sie den Fehler "SSL operation failed with code 1" beheben
Wenn Sie auf diesen Fehler stoßen:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
liegt das vermutlich daran, dass auf Ihrem System keine CA-Zertifikate installiert sind. Sie können diese wie folgt installieren:
-
Unter Ubuntu/Debian führen Sie aus:
sudo apt-get install ca-certificates -
Unter Alpine Linux versuchen Sie:
apk add ca-certificates
Wenn Sie keine systemweiten CA-Zertifikate installieren können, können Sie diese manuell hinzufügen:
-
Laden Sie das Zertifikat herunter: https://letsencrypt.org/certs/isrgrootx1.pem
-
Legen Sie die Datei
isrgrootx1.pemin Ihr Symfony-Projekt. -
Aktualisieren Sie Ihre Datei
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
MariaDB mit Laravel verwenden
Um MariaDB mit Laravel zu konfigurieren, öffnen Sie config/database.php und passen Sie die mysql-Konfiguration wie folgt an:
'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([
// Falls Sie SSL-Fehler wie "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed" erhalten, siehe die oben genannten Lösungsschritte.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
MariaDB mit PHP CodeIgniter verwenden
In Ihrer Datei database.php können Sie die folgende Konfiguration verwenden:
$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
);
MariaDB mit PHP über Umgebungsvariablen verbinden
Es ist eine gute Praxis, Ihre Zugangsdaten nicht im Code zu hinterlegen, sondern Umgebungsvariablen zu verwenden. Sie können diese 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.
MariaDB mit WordPress verwenden
Die Anbindung von WordPress an Stackhero für MariaDB ist unkompliziert. Legen Sie in Ihrer Datei wp-config.php die folgenden Datenbankparameter fest:
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 als SSL bezeichnet)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Der entscheidende Schritt ist hier die Aktivierung der TLS-Verschlüsselung (auch als SSL bezeichnet). Ohne diese Einstellung funktioniert die Verbindung nicht.
MariaDB mit Node.js verwenden
Wenn Sie Node.js verwenden, empfiehlt sich das Paket mysql2, das Promise-Support bietet. Installation:
npm install mysql2
Hier ein Beispiel, das Sie anpassen können:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Erstellt die Datenbank, falls sie noch nicht existiert
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Erstellt 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ügt einen Beispielbenutzer ein
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generiert eine userId
'User name', // name
'User address', // address
'[email protected]' // email
]
]
);
// Zählt die Benutzer in der Tabelle
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ßt die Verbindung
await db.end();
})().catch(error => {
console.error('');
console.error('Es ist ein Fehler aufgetreten!');
console.error(error);
process.exit(1);
});
MariaDB mit Node.js/NestJS/TypeORM verwenden
Für Node.js, NestJS oder TypeORM können Sie SSL aktivieren, indem Sie die Option ssl hinzufügen:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
MariaDB mit Prisma verwenden
Um sich mit Prisma mit MariaDB zu verbinden, fügen Sie einfach sslaccept=strict zu Ihrer Verbindungs-URL hinzu. Zum Beispiel, wenn Sie sich als "root" mit der Datenbank "root" verbinden:
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
MariaDB mit Django verwenden
Falls noch nicht geschehen, können Sie das Modul mysqlclient installieren, um Django mit MariaDB zu verbinden:
pip install mysqlclient
Falls Sie beim Installieren den Fehler
Exception: Can not find valid pkg-config nameerhalten, müssen Sie eventuell zuerst das Paketlibmysqlclientinstallieren. Für Ubuntu/Debian:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Um Ihre Verbindung zu testen, können Sie Ihre Zugangsdaten zunächst direkt in settings.py eintragen. Das ist für Tests in Ordnung, aber nicht sicher für den Produktivbetrieb.
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>'
}
}
Hinweis: Dieses Beispiel dient nur zu Testzwecken. Verwenden Sie keine fest codierten Zugangsdaten in der Produktion.
Sobald die Verbindung funktioniert, ist es sicherer, die Zugangsdaten in Umgebungsvariablen zu speichern. Wenn Sie django-environ verwenden, können Sie es so installieren:
pip install django-environ
Anschließend aktualisieren Sie 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')
}
}
Erstellen oder aktualisieren Sie dann die .env-Datei (im selben Verzeichnis wie settings.py) mit:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Um Ihre Zugangsdaten zu schützen, fügen Sie .env zu Ihrer .gitignore hinzu:
echo ".env" >> .gitignore
MariaDB mit Java/Spring verbinden
Um eine Spring-Anwendung mit MariaDB zu verbinden, können Sie die Umgebungsvariable SPRING_DATASOURCE_URL mit Ihrer Datenbank-URL und dem Präfix jdbc: setzen. Zum Beispiel:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
MariaDB mit Groovy/Grails verbinden
Hier ein Beispiel, wie Sie Ihre Grails-Anwendung für die Verbindung zu MariaDB konfigurieren können:
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 Ihren tatsächlichen Datenbanknamen.
username = "root" // Es empfiehlt sich, einen eigenen Benutzer für Ihre Anwendung zu erstellen.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Legen Sie idealerweise einen dedizierten Benutzer an.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Einen Benutzer in MariaDB über phpMyAdmin anlegen
Aus Sicherheitsgründen empfiehlt es sich, für Ihre Anwendung einen eigenen Benutzer anzulegen, anstatt "root" zu verwenden. Das geht ganz einfach in phpMyAdmin:
- Klicken Sie in phpMyAdmin oben auf
Benutzerkonten.
- Klicken Sie auf
Benutzerkonto hinzufügen.
- Füllen Sie das Formular aus:
- Wählen Sie einen Benutzernamen (oft den Namen Ihrer Anwendung).
- Klicken Sie auf
Passwort generierenfür ein sicheres Passwort und kopieren Sie es. - Aktivieren Sie
Datenbank mit gleichem Namen anlegen und alle Rechte gewähren.
Nach dem Absenden werden Ihr neuer Benutzer und eine passende Datenbank erstellt.
Unterschiede zwischen MariaDB und MySQL
MariaDB ist ein unabhängiger Fork von MySQL, der von der Open-Source-Community nach der Übernahme von MySQL durch Oracle im Jahr 2010 entwickelt wurde. Für die meisten Anwendungsfälle bieten MariaDB und MySQL sehr ähnliche Funktionen und eine hohe Kompatibilität.