MariaDB: Pradžia
Kaip pradėti naudotis MariaDB
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti MariaDB cloud sprendimą, kuris suteikia daugybę privalumų, įskaitant:
- Neriboti prisijungimai ir perdavimai.
- Įtraukta phpMyAdmin žiniatinklio sąsaja.
- Lengvi atnaujinimai vienu paspaudimu.
- Optimali veikla ir tvirta sauga, užtikrinta privačia ir dedikuota VM.
Taupykite laiką ir supaprastinkite savo gyvenimą: išbandyti Stackhero MariaDB cloud hosting sprendimą užtrunka tik 5 minutes!
MariaDB URL
Paprasčiausias būdas prisijungti prie jūsų MariaDB paslaugos yra naudoti MySQL URL formatą, jei jūsų tvarkyklė jį palaiko:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Ruby vartotojams MySQL URL šiek tiek skiriasi:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Naudojant MariaDB su PHP
Žemiau pateikiami keli PHP naudojimo pavyzdžiai, padedantys prisijungti prie MariaDB naudojant skirtingus plėtinius. Atminkite, kad 'root' duomenų bazės naudojimas gamyboje nerekomenduojamas. Vietoj to, apsvarstykite galimybę sukurti atskirą duomenų bazę ir vartotoją.
Naudojant MariaDB su PHP ir MySQLi (objektinis stilius)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nerekomenduojama naudoti 'root' duomenų bazės. Tai tik pavyzdys. Geriausia praktika yra sukurti atskirą duomenų bazę ir vartotoją phpMyAdmin ir naudoti juos čia.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Prisijungimo klaida: ' . $mysqli->connect_error);
}
echo 'Prisijungimas sėkmingas... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Naudojant MariaDB su PHP ir MySQLi (procedūrinis stilius)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nerekomenduojama naudoti 'root' duomenų bazės. Tai tik pavyzdys. Geriausia praktika yra sukurti atskirą duomenų bazę ir vartotoją phpMyAdmin ir naudoti juos čia.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Prisijungimo klaida: ' . mysqli_connect_error($mysqli));
}
echo 'Sėkmė: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Naudojant MariaDB su PHP ir PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nerekomenduojama naudoti 'root' duomenų bazės. Tai tik pavyzdys. Geriausia praktika yra sukurti atskirą duomenų bazę ir vartotoją phpMyAdmin ir naudoti juos čia.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Jei susiduriate su klaida, tokia kaip "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", patikrinkite, ar /etc/ssl/certs/ kataloge yra CA sertifikatai.
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 'Jūs esate prisijungę prie duomenų bazės, kurioje veikia versija ' . $version[0] . "\n";
?>
Klaidos "SSL operation failed with code 1" tvarkymas
Jei gaunate klaidą:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
tai tikriausiai dėl to, kad /etc/ssl/certs/ kataloge nėra CA sertifikatų. Jei turite prieigą prie sistemos, galite įdiegti šiuos sertifikatus taip:
-
Ubuntu galite paleisti:
apt-get install ca-certificates -
Alpine Linux paleiskite:
apk add ca-certificates
Jei neturite tiesioginės prieigos prie sistemos, kurioje veikia jūsų PHP kodas, galite įdiegti sertifikatą rankiniu būdu:
- Atsisiųskite sertifikatą: https://letsencrypt.org/certs/isrgrootx1.pem
- Pridėkite
isrgrootx1.pemfailą prie savo PHP projekto failų. - Pakomentuokite eilutę su
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Iškomentuokite eilutę su
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Sprendimas "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH"
Jei matote klaidą, tokią kaip:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
arba panašią klaidą, nurodančią neapibrėžtą konstantą PDO MySQL atributams, tai reiškia, kad jūsų PDO diegimas neturi MySQL palaikymo.
Sprendimas Ubuntu/Debian
Įdiekite reikiamą PHP MySQL plėtinį su:
sudo apt-get install php-mysql
Sprendimas Docker
Jei naudojate Docker, įsitikinkite, kad MySQL palaikymas įtrauktas į kūrimo procesą. Apsvarstykite galimybę pridėti šį kodą prie savo Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
Naudojant MariaDB su Symfony ir Doctrine
Redaguokite .env failą ir apibrėžkite DATABASE_URL kintamąjį taip:
DATABASE_URL="mysql://<USER>:<PASSWORD>@XXXXXX.stackhero-network.com:<PORT>/<DATABASE>"
Tada atnaujinkite config/packages/doctrine.yaml failą, nustatydami tvarkyklę ir parinktis taip:
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
Klaidos "SSL operation failed with code 1" tvarkymas
Jei susiduriate su klaida:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
tai tikriausiai reiškia, kad /etc/ssl/certs/ kataloge nėra CA sertifikatų. Galite tai išspręsti juos įdiegdami:
-
Ubuntu/Debian paleiskite:
sudo apt-get install ca-certificates -
Alpine Linux paleiskite:
apk add ca-certificates
Jei negalite įdiegti sertifikatų visoje sistemoje, galite juos pridėti rankiniu būdu:
-
Atsisiųskite sertifikatą: https://letsencrypt.org/certs/isrgrootx1.pem
-
Įdėkite
isrgrootx1.pemfailą į savo Symfony projektą. -
Tada atnaujinkite
config/packages/doctrine.yamlfailą, kad naudotumėte vietinį sertifikatą: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
Naudojant MariaDB su Laravel
Norėdami nustatyti MariaDB su Laravel, redaguokite config/database.php failą ir atnaujinkite mysql konfigūraciją taip:
'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([
// Jei susiduriate su SSL klaidomis, tokiomis kaip "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", žiūrėkite aukščiau pateiktas instrukcijas.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Naudojant MariaDB su PHP CodeIgniter
Jūsų database.php faile įterpkite šią konfigūraciją:
$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'); // Pagal konvenciją, duomenų bazės pavadinimas atitinka vartotojo vardą.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Svarbu: aktyvuoti TLS šifravimą
);
Prisijungimas prie MariaDB su PHP naudojant aplinkos kintamuosius
Geriausia praktika yra vengti kietai koduoti savo kredencialus. Vietoj to, apsvarstykite galimybę naudoti aplinkos kintamuosius. Galite gauti kredencialus taip:
$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'); // Pagal konvenciją, duomenų bazės pavadinimas atitinka vartotojo vardą.
Naudojant MariaDB su WordPress
Prisijungimas prie Stackhero MariaDB su WordPress yra paprastas. Redaguokite wp-config.php failą ir sukonfigūruokite savo duomenų bazės nustatymus taip:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Aktyvuoti TLS šifravimą (taip pat žinomą kaip SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Svarbi dalis čia yra TLS šifravimo (taip pat žinomo kaip SSL) aktyvavimas. Be jo, prisijungimas neveiks.
Naudojant MariaDB su Node.js
Šiame pavyzdyje naudojame mysql2 paketą su pažadų palaikymu. Pirmiausia įdiekite jį su:
npm install mysql2
Tada naudokite šį kodą:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Sukurti duomenų bazę 'stackherotest', jei ji dar neegzistuoja
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Sukurti lentelę 'users', jei ji dar neegzistuoja
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;'
);
// Įterpti netikrą vartotoją
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generuoti netikrą userId
'Vartotojo vardas', // 'name' stulpelis
'Vartotojo adresas', // 'address' stulpelis
'user@email.com' // 'email' stulpelis
]
]
);
// Suskaičiuoti eilučių skaičių lentelėje 'users'
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Dabar lentelėje "users" yra ${usersCount[0].cpt} įrašų`);
// Uždaryti prisijungimą prie MariaDB
await db.end();
})().catch(error => {
console.error('');
console.error('🐞 Įvyko klaida!');
console.error(error);
process.exit(1);
});
Naudojant MariaDB su Node.js/NestJS/TypeORM
Prisijungiant iš Node.js, NestJS ar TypeORM, įtraukite ssl parinktį kaip parodyta:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Naudojant MariaDB su Prisma
Norėdami prisijungti su Prisma, pridėkite sslaccept=strict parinktį, kad užtikrintumėte SSL šifravimo aktyvavimą. Pavyzdžiui, naudojant vartotoją "root" prisijungiant prie duomenų bazės "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Naudojant MariaDB su Django
Jei dar neįdiegėte mysqlclient modulio (naudojamo prisijungti prie MariaDB), paleiskite:
pip install mysqlclient
Jei susiduriate su klaida
Exception: Can not find valid pkg-config namediegiantmysqlclient, įdiekitelibmysqlclientpaketą. Ubuntu/Debian galite paleisti:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Iš pradžių galite saugoti savo kredencialus tiesiogiai settings.py faile testavimui, kaip parodyta žemiau. Atkreipkite dėmesį, kad šis metodas nėra saugus gamybai.
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>'
}
}
įspėjimas Būkite atsargūs: šis pavyzdys nerekomenduojamas gamybai ir skirtas tik testavimui!
Kai prisijungimas veikia, geriausia naudoti aplinkos kintamuosius savo kredencialams saugoti. Pavyzdžiui, naudojant django-environ, pirmiausia įdiekite jį:
pip install django-environ
Tada atnaujinkite settings.py taip:
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')
}
}
Sukurkite arba atnaujinkite .env failą (toje pačioje direktorijoje kaip settings.py) su šiuo turiniu:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Galiausiai, pridėkite .env prie savo .gitignore, kad išvengtumėte jautrios informacijos įtraukimo:
echo ".env" >> .gitignore
Prisijungimas prie MariaDB su Java/Spring
Norėdami prijungti savo Spring programą, nustatykite aplinkos kintamąjį SPRING_DATASOURCE_URL su jūsų duomenų bazės URL, pridedant jdbc:. Pavyzdžiui:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Prisijungimas prie MariaDB su Groovy/Grails
Šis pavyzdys rodo, kaip sukonfigūruoti savo Grails programą prisijungti prie MariaDB:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// SSL specifinės savybės
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" // Pakeiskite '/root' į norimą duomenų bazės pavadinimą.
username = "root" // Patartina sukurti atskirą vartotoją vietoj 'root'.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Apsvarstykite galimybę sukurti atskirą vartotoją.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
MariaDB vartotojo kūrimas naudojant phpMyAdmin
Gera praktika yra sukurti atskirą vartotoją jūsų programai, o ne naudoti 'root' vartotoją. Paprasčiausias būdas tai padaryti yra per phpMyAdmin:
- phpMyAdmin spustelėkite
Vartotojų paskyrosviršuje.
- Spustelėkite
Pridėti vartotojo paskyrą.
- Užpildykite vartotojo kūrimo formą:
- Pasirinkite paskyros pavadinimą (paprastai jūsų programos pavadinimą).
- Spustelėkite
Generuoti slaptažodįsaugiam slaptažodžiui, tada nukopijuokite jį. - Pažymėkite parinktį
Sukurti duomenų bazę su tuo pačiu pavadinimu ir suteikti visas privilegijas.
Pateikus, bus sukurtas naujas vartotojas kartu su duomenų baze, kurios pavadinimas sutampa su vartotojo vardu.
Skirtumai tarp MariaDB ir MySQL
MariaDB yra nepriklausomas forkas, sukurtas atvirojo kodo bendruomenės po to, kai Oracle įsigijo MySQL 2010 metais. Daugeliu atvejų MariaDB ir MySQL yra labai panašūs.