MariaDB: Pierwsze kroki
Jak rozpocząć pracę z MariaDB
👋 Witamy w dokumentacji Stackhero!
Stackhero oferuje gotowe do użycia rozwiązanie MariaDB cloud, które zapewnia wiele korzyści, w tym:
- Nieograniczone połączenia i transfery.
- Włączony interfejs webowy phpMyAdmin.
- Bezproblemowe aktualizacje jednym kliknięciem.
- Optymalna wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.
Oszczędzaj czas i upraszczaj swoje życie: wypróbowanie rozwiązania MariaDB cloud hosting Stackhero zajmuje tylko 5 minut!
Adresy URL MariaDB
Najprostszym sposobem połączenia się z usługą MariaDB jest użycie formatu URL MySQL, o ile Twój sterownik go obsługuje:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Jeśli korzystasz z Ruby, adres URL MySQL jest nieco inny:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Używanie MariaDB z PHP
Poniżej znajdziesz kilka przykładów pokazujących, jak połączyć się z MariaDB z poziomu PHP przy użyciu różnych rozszerzeń. Chociaż w przykładach używana jest baza "root", zalecamy utworzenie dedykowanej bazy danych i użytkownika dla Twojej aplikacji, szczególnie w środowisku produkcyjnym.
Używanie MariaDB z PHP i MySQLi (styl obiektowy)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Tylko do demonstracji. Zalecana praktyka to utworzenie własnej bazy i użytkownika w phpMyAdmin i używanie tych danych.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Błąd połączenia: ' . $mysqli->connect_error);
}
echo 'Połączenie udane... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Używanie MariaDB z PHP i MySQLi (styl proceduralny)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Tylko do demonstracji. Zalecana praktyka to utworzenie własnej bazy i użytkownika w phpMyAdmin i używanie tych danych.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Błąd połączenia: ' . mysqli_connect_error($mysqli));
}
echo 'Sukces: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Używanie MariaDB z PHP i PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Tylko do demonstracji. Zalecana praktyka to utworzenie własnej bazy i użytkownika w phpMyAdmin i używanie tych danych.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Jeśli pojawi się błąd typu "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", upewnij się, że katalog /etc/ssl/certs/ zawiera certyfikaty CA.
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 'Połączono z bazą danych w wersji ' . $version[0] . "\n";
?>
Jak rozwiązać błąd "SSL operation failed with code 1"
Jeśli pojawi się taki błąd:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
prawdopodobnie katalog /etc/ssl/certs/ nie zawiera wymaganych certyfikatów CA. Jeśli masz dostęp do systemu, możesz je zainstalować na przykład tak:
-
Na Ubuntu uruchom:
apt-get install ca-certificates -
Na Alpine Linux spróbuj:
apk add ca-certificates
Jeśli nie masz dostępu do systemu, możesz dodać certyfikat ręcznie:
- Pobierz certyfikat: https://letsencrypt.org/certs/isrgrootx1.pem
- Umieść plik
isrgrootx1.pemw swoim projekcie PHP. - Zakomentuj linię
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Odkomentuj linię
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Jak rozwiązać "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH"
Jeśli pojawi się błąd taki jak:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
lub podobny komunikat dotyczący niezdefiniowanej stałej PDO MySQL, prawdopodobnie Twoja instalacja PDO nie obsługuje MySQL.
Na Ubuntu/Debian
Wymaganą bibliotekę PHP MySQL możesz zainstalować poleceniem:
sudo apt-get install php-mysql
Jeśli korzystasz z Dockera
Aby mieć pewność, że wsparcie MySQL jest dostępne, dodaj do swojego Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
### Używanie MariaDB z Symfony i Doctrine
Aby rozpocząć, edytuj plik `.env` i ustaw zmienną `DATABASE_URL` w następujący sposób:
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
Następnie zaktualizuj plik `config/packages/doctrine.yaml`, aby ustawić sterownik i opcje:
```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
Jak naprawić błąd "SSL operation failed with code 1"
Jeśli pojawi się taki błąd:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
prawdopodobnie na Twoim systemie nie są zainstalowane certyfikaty CA. Możesz je zainstalować na przykład tak:
-
Na Ubuntu/Debian uruchom:
sudo apt-get install ca-certificates -
Na Alpine Linux spróbuj:
apk add ca-certificates
Jeśli nie możesz zainstalować certyfikatów CA systemowo, możesz dodać je ręcznie:
-
Pobierz certyfikat: https://letsencrypt.org/certs/isrgrootx1.pem
-
Umieść plik
isrgrootx1.pemw swoim projekcie Symfony. -
Zaktualizuj plik
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
Używanie MariaDB z Laravel
Aby skonfigurować MariaDB z Laravel, otwórz plik config/database.php i zaktualizuj konfigurację mysql w następujący sposób:
'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([
// Jeśli pojawią się błędy SSL typu "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", zobacz powyższe kroki rozwiązywania problemów.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Używanie MariaDB z PHP CodeIgniter
W pliku database.php możesz ustawić następującą konfigurację:
$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'), // Zgodnie z konwencją nazwa bazy odpowiada nazwie użytkownika.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Ważne: aktywuj szyfrowanie TLS
);
Połączenie z MariaDB w PHP przy użyciu zmiennych środowiskowych
Dobrą praktyką jest przechowywanie danych dostępowych poza kodem, korzystając ze zmiennych środowiskowych. Możesz je pobrać w następujący sposób:
$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'); // Zgodnie z konwencją nazwa bazy odpowiada nazwie użytkownika.
Używanie MariaDB z WordPress
Połączenie WordPressa ze Stackhero dla MariaDB jest bardzo proste. W pliku wp-config.php ustaw następujące parametry bazy danych:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Włącz szyfrowanie TLS (nazywane też SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Kluczowym krokiem jest tutaj włączenie szyfrowania TLS (czasem nazywanego SSL). Połączenie nie zadziała bez tego ustawienia.
Używanie MariaDB z Node.js
Jeśli korzystasz z Node.js, możesz użyć pakietu mysql2, który obsługuje promisy. Aby go zainstalować:
npm install mysql2
Oto przykład, który możesz dostosować:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Utwórz bazę danych, jeśli jeszcze nie istnieje
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Utwórz tabelę users, jeśli jeszcze nie istnieje
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;'
);
// Wstaw przykładowego użytkownika
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generuj userId
'User name', // name
'User address', // address
'[email protected]' // email
]
]
);
// Policz użytkowników w tabeli
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Aktualnie w tabeli "users" jest ${usersCount[0].cpt} wpisów`);
// Zamknij połączenie
await db.end();
})().catch(error => {
console.error('');
console.error('Wystąpił błąd!');
console.error(error);
process.exit(1);
});
Używanie MariaDB z Node.js/NestJS/TypeORM
Dla Node.js, NestJS lub TypeORM możesz włączyć SSL, dodając opcję ssl:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Używanie MariaDB z Prisma
Aby połączyć się z MariaDB przez Prisma, wystarczy dodać sslaccept=strict do adresu URL połączenia. Przykładowo, jeśli łączysz się jako "root" do bazy "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Używanie MariaDB z Django
Jeśli jeszcze tego nie zrobiłeś, możesz zainstalować moduł mysqlclient, aby połączyć Django z MariaDB:
pip install mysqlclient
Jeśli podczas instalacji pojawi się błąd
Exception: Can not find valid pkg-config name, może być konieczne wcześniejsze zainstalowanie pakietulibmysqlclient. Na Ubuntu/Debian:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Aby przetestować połączenie, możesz na początek wpisać dane dostępowe bezpośrednio w pliku settings.py. To rozwiązanie nadaje się do testów, ale nie jest bezpieczne w środowisku produkcyjnym.
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>'
}
}
Uwaga: ten przykład służy wyłącznie do testów. Nie należy używać danych dostępowych wpisanych na stałe w środowisku produkcyjnym.
Po potwierdzeniu działania połączenia, bezpieczniej jest przechowywać dane dostępowe w zmiennych środowiskowych. Jeśli korzystasz z django-environ, możesz go zainstalować tak:
pip install django-environ
Następnie zaktualizuj 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')
}
}
Następnie utwórz lub zaktualizuj plik .env (w tym samym katalogu co settings.py) z zawartością:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Aby zabezpieczyć dane dostępowe, dodaj .env do pliku .gitignore:
echo ".env" >> .gitignore
Połączenie MariaDB z Java/Spring
Aby połączyć aplikację Spring z MariaDB, ustaw zmienną środowiskową SPRING_DATASOURCE_URL z adresem URL bazy danych, używając prefiksu jdbc:. Przykład:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Połączenie MariaDB z Groovy/Grails
Oto przykład konfiguracji aplikacji Grails do połączenia z MariaDB:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// Właściwości związane z SSL
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" // Zamień '/root' na faktyczną nazwę swojej bazy.
username = "root" // Zalecane jest utworzenie dedykowanego użytkownika dla aplikacji.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Rozważ utworzenie dedykowanego użytkownika.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Tworzenie użytkownika MariaDB przez phpMyAdmin
Ze względów bezpieczeństwa zaleca się utworzenie dedykowanego użytkownika dla aplikacji zamiast korzystania z "root". Możesz to zrobić łatwo w phpMyAdmin:
- W phpMyAdmin kliknij na
User accountsu góry.
- Kliknij na
Add user account.
- Wypełnij formularz:
- Wybierz nazwę użytkownika (często jest to nazwa aplikacji).
- Kliknij
Generate password, aby wygenerować silne hasło i skopiuj je. - Zaznacz
Create database with same name and grant all privileges.
Po zatwierdzeniu zostanie utworzony nowy użytkownik oraz odpowiadająca mu baza danych.
Różnice między MariaDB a MySQL
MariaDB to niezależny fork MySQL, stworzony przez społeczność open source po przejęciu MySQL przez Oracle w 2010 roku. W większości przypadków MariaDB i MySQL oferują bardzo podobne funkcje i kompatybilność.