Apps ·
Een MySQL- of MariaDB-database aanmaken en verbinden
Bestel een beheerde MariaDB of MySQL, vind host, poort, gebruiker en wachtwoord, verbind met geverifieerd certificaat, maak op MySQL je eerste database en zie waar de twee verschillen.
MariaDB en MySQL zijn de databases achter de meeste PHP-applicaties en een flink deel van alles daarbuiten. Beide zijn beschikbaar als beheerde instantie: bestel er een in het paneel, kopieer de verbindingsgegevens, verbind met de gebruikelijke clients over TLS. Ze verschillen in één detail waar mensen over struikelen, dus deze gids behandelt beide, inclusief het punt waar ze uiteenlopen.
Wat je nodig hebt
- Een Headpat Space-account met een geverifieerd e-mailadres en ingevulde factuurgegevens.
- Een client: de
mariadb-opdrachtregel die bij MariaDB zit, ofmysqlvan MySQL. Beide praten met beide servers; gebruik de client die bij je database past voor precies de opties hieronder.
1. Bestel de database
- Log in op het paneel, open Apps in de zijbalk en klik op App aanmaken.
- Zoek onder Template naar MariaDB of MySQL en selecteer het.
- Kies onder Pakket een pakket. single draait één server en is voor de meeste sites prima. De ha-pakketten draaien drie servers die elkaar repliceren en zelf overschakelen bij een storing: MariaDB met Galera, MySQL met semi-synchrone replicatie. Je verbindingsgegevens blijven in beide gevallen gelijk.
- Vul onder Details een Weergavenaam in en kies de versie die je applicatie nodig heeft, of laat de standaard staan.
- Vink het vakje aan dat het opzetten meteen mag beginnen, klik op App deployen en rond de betaling af.
MariaDB is in ongeveer een minuut klaar; MySQL heeft er twee tot drie nodig omdat zijn cluster eerst initialiseert. Wacht tot de app-pagina running toont.
2. Vind je verbindingsgegevens
Open de database onder Apps. De kaart Database-verbinding heeft alles wat je nodig hebt: Host en Poort. De poort is een eigen poort, niet 3306. Klik op Tonen naast Inloggegevens om de login te zien:
| MariaDB | MySQL | |
|---|---|---|
| Gebruikersnaam | app | moco-writable |
| Database | app, voor je aangemaakt | nog geen; je maakt er zelf een (volgende stap) |
| Wachtwoord | gegenereerd voor je instantie | gegenereerd voor je instantie |
De Connection string zet alles op één regel. Elk veld heeft een kopieerknop; klik op Verbergen als je klaar bent. Behandel het wachtwoord als elk ander geheim.
3. Verbinden
De server toont een publiek vertrouwd certificaat voor zijn hostnaam, dus je client kan het verifiëren met de certificaatautoriteiten die je besturingssysteem al vertrouwt. Vraag die verificatie; het kost niets en sluit een gemanipuleerde verbinding uit.
MariaDB, met de mariadb-client:
mariadb -h JOUW_HOST -P JOUW_POORT -u app -p --ssl-verify-server-cert --ssl-ca=/etc/ssl/certs/ca-certificates.crt app
MySQL, met de mysql-client:
mysql -h JOUW_HOST -P JOUW_POORT -u moco-writable -p --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt
Het pad bij --ssl-ca is de CA-bundel op Debian en Ubuntu; op Fedora en RHEL is het /etc/pki/tls/certs/ca-bundle.crt, op macOS met Homebrew /etc/ssl/cert.pem. Beide clients weigeren de verbinding als het certificaat niet bij de hostnaam past, en dat is de bedoeling: verbinden op IP-adres mislukt met opzet.
Op MySQL is het eerste wat je doet een database aanmaken, want de server komt zonder:
CREATE DATABASE shop;
CREATE USER 'shop'@'%' IDENTIFIED BY 'een-lang-willekeurig-wachtwoord';
GRANT ALL ON shop.* TO 'shop'@'%';
moco-writable mag databases en gebruikers aanmaken maar heeft geen serverbeheerrechten, dus hij kan je niet buitensluiten van je eigen instantie. Op MariaDB bestaat de database app al en is app er eigenaar van; je kunt nog steeds databases en gebruikers toevoegen.
4. Verbinden vanuit je applicatie
De meeste frameworks nemen host, poort, gebruiker, wachtwoord en database apart, of één URL:
DATABASE_URL=mysql://app:JOUW_WACHTWOORD@JOUW_HOST:JOUW_POORT/app
Zet TLS-verificatie aan in de opties van je bibliotheek. Het servercertificaat leidt terug naar een publieke root, dus de bibliotheek naar de CA-bundel van het systeem wijzen is genoeg; zet verificatie niet uit om een verbinding werkend te krijgen. Twee voorbeelden:
Node met mysql2:
import mysql from "mysql2/promise";
const pool = mysql.createPool({
host: process.env.DB_HOST,
port: Number(process.env.DB_PORT),
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
ssl: { rejectUnauthorized: true },
});
Python met PyMySQL:
import os
import pymysql
conn = pymysql.connect(
host=os.environ["DB_HOST"],
port=int(os.environ["DB_PORT"]),
user=os.environ["DB_USER"],
password=os.environ["DB_PASSWORD"],
database=os.environ["DB_NAME"],
ssl={"ca": "/etc/ssl/certs/ca-certificates.crt"},
)
Bewaar het wachtwoord in een omgevingsvariabele of een secret store, niet in je code.
Beperk wie mag verbinden
Standaard accepteert de server verbindingen van elk adres dat een wachtwoord kent. De kaart IP-toegangslijst op de app-pagina beperkt dat tot de adressen die je opgeeft, bijvoorbeeld het IP van je applicatieserver. Voeg het adres toe, sla op, en de kaart toont dat de toegang beperkt is.
Back-ups
Van beide engines wordt op het schema van je pakket een dump gemaakt naar opslag buiten het cluster, met de bewaartermijn die bij je pakket hoort.
- MariaDB: de kaart Back-ups toont elke dump. Met Back-up maken maak je er een voor een riskante wijziging; Herstellen vervangt de huidige data door een dump en de database is intussen niet beschikbaar. Details in Een back-up van je app maken en herstellen.
- MySQL: de geplande dumps draaien en worden bewaard, maar het paneel toont ze nog niet. Maak tot die tijd je eigen kopieën met
mysqldumpen zet ze terug met demysql-client.
Voor een kopie op je eigen machine draai je in beide gevallen het dump-programma tegen dezelfde host en poort met de TLS-opties van hierboven: mariadb-dump voor MariaDB, mysqldump voor MySQL.
Kijk erin zonder client
De kaart Databaseconsole op de app-pagina toont de tabellen met aantallen rijen, bladert door hun rijen en voert SQL uit die je typt. Hij verbindt vanuit de server zelf met volledige rechten, dus het is de snelste manier om te controleren wat je applicatie heeft geschreven. Zie Je database bekijken en bevragen vanuit het paneel.
Als iets niet werkt
- De verbinding verloopt: controleer de poort; die is niet 3306. Heb je een IP-toegangslijst ingesteld, dan moet je huidige adres erop staan.
- Certificaatverificatie mislukt: je hebt op IP-adres verbonden, of de client heeft geen CA-bundel op het opgegeven pad. Verbind op hostnaam en wijs
--ssl-canaar de bundel van je systeem. - "No database selected" op MySQL: er is er nog geen. Maak er een zoals hierboven en noem hem in je verbinding.
- Access denied: het wachtwoord is gekopieerd met een spatie of regeleinde erachter, of de gebruiker heeft geen rechten op die database. Toon de inloggegevens opnieuw en kopieer met de knop.