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 adresai
Lengviausias būdas prisijungti prie savo 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
Jei naudojate Ruby, MySQL URL yra šiek tiek kitoks:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
MariaDB naudojimas su PHP
Žemiau pateikiami keli pavyzdžiai, kaip galite prisijungti prie MariaDB iš PHP naudojant skirtingus plėtinius. Nors šiuose pavyzdžiuose naudojama „root“ duomenų bazė, rekomenduojama sukurti atskirą duomenų bazę ir naudotoją savo aplikacijai, ypač gamybinėje aplinkoje.
MariaDB naudojimas su PHP ir MySQLi (objektinis stilius)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Tik demonstracijai. Geriausia praktika – sukurkite savo duomenų bazę ir naudotoją per phpMyAdmin ir naudokite tuos prisijungimus.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Connection Error: ' . $mysqli->connect_error);
}
echo 'Connection successful... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
MariaDB naudojimas su PHP ir MySQLi (procedūrinis stilius)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Tik demonstracijai. Geriausia praktika – sukurkite savo duomenų bazę ir naudotoją per phpMyAdmin ir naudokite tuos prisijungimus.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Connection error: ' . mysqli_connect_error($mysqli));
}
echo 'Success: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
MariaDB naudojimas su PHP ir PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Tik demonstracijai. Geriausia praktika – sukurkite savo duomenų bazę ir naudotoją per phpMyAdmin ir naudokite tuos prisijungimus.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Jei gaunate klaidą, pvz., "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", įsitikinkite, kad jūsų /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 'You are connected to a database running version ' . $version[0] . "\n";
?>
Kaip išspręsti „SSL operation failed with code 1“ klaidą
Jei matote šią klaidą:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
greičiausiai kataloge /etc/ssl/certs/ trūksta reikiamų CA sertifikatų. Jei turite prieigą prie sistemos, galite juos įdiegti taip:
-
Ubuntu sistemoje vykdykite:
apt-get install ca-certificates -
Alpine Linux sistemoje bandykite:
apk add ca-certificates
Jei neturite sistemos lygio prieigos, galite pridėti sertifikatą rankiniu būdu:
- Atsisiųskite sertifikatą: https://letsencrypt.org/certs/isrgrootx1.pem
- Įdėkite
isrgrootx1.pemfailą į savo PHP projektą. - Pakomentuokite eilutę su
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Atkomentuokite eilutę su
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Kaip išspręsti „Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH“
Jei matote tokią klaidą:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
arba panašią žinutę apie nedefinuotą PDO MySQL konstantą, tikėtina, kad jūsų PDO diegimas neturi MySQL palaikymo.
Ubuntu/Debian sistemoje
Reikiamą PHP MySQL plėtinį galite įdiegti taip:
sudo apt-get install php-mysql
Jei naudojate Docker
Kad užtikrintumėte MySQL palaikymą, pridėkite šią eilutę į savo Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
### MariaDB naudojimas su Symfony ir Doctrine
Norėdami pradėti, redaguokite savo `.env` failą ir nustatykite `DATABASE_URL` kintamąjį taip:
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
Tada atnaujinkite `config/packages/doctrine.yaml` failą, kad nustatytumėte tvarkyklę ir parinktis:
```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
Kaip išspręsti „SSL operation failed with code 1“ klaidą
Jei susiduriate su šia klaida:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
greičiausiai jūsų sistemoje nėra įdiegtų CA sertifikatų. Štai keli būdai juos įdiegti:
-
Ubuntu/Debian sistemoje vykdykite:
sudo apt-get install ca-certificates -
Alpine Linux sistemoje bandykite:
apk add ca-certificates
Jei negalite įdiegti CA sertifikatų sistemos lygiu, galite juos pridėti rankiniu būdu:
-
Atsisiųskite sertifikatą: https://letsencrypt.org/certs/isrgrootx1.pem
-
Įdėkite
isrgrootx1.pemfailą į savo Symfony projektą. -
Atnaujinkite
config/packages/doctrine.yamlfailą: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 naudojimas su Laravel
Norėdami sukonfigūruoti MariaDB su Laravel, atidarykite config/database.php 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, pvz., "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", žr. aukščiau pateiktus trikčių šalinimo veiksmus.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
MariaDB naudojimas su PHP CodeIgniter
Savo database.php faile galite nustatyti š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 susitarimą, duomenų bazės pavadinimas atitinka naudotojo vardą.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Svarbu: aktyvuokite TLS šifravimą
);
MariaDB prijungimas prie PHP naudojant aplinkos kintamuosius
Gera praktika yra nelaikyti prisijungimo duomenų kodo viduje, o naudoti aplinkos kintamuosius. Juos galite gauti 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 susitarimą, duomenų bazės pavadinimas atitinka naudotojo vardą.
MariaDB naudojimas su WordPress
WordPress prijungimas prie Stackhero MariaDB yra paprastas. Savo wp-config.php faile nustatykite šiuos duomenų bazės parametrus:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Įjunkite TLS šifravimą (dar vadinamą SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Svarbiausias žingsnis čia – įjungti TLS šifravimą (kartais vadinamą SSL). Be jo prisijungimas neveiks.
MariaDB naudojimas su Node.js
Jei naudojate Node.js, galite naudoti mysql2 paketą, kuris palaiko promise. Norėdami įdiegti:
npm install mysql2
Štai pavyzdys, kurį galite pritaikyti:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Sukuria duomenų bazę, jei jos dar nėra
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Sukuria users lentelę, jei jos dar nėra
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;'
);
// Įterpia pavyzdinį naudotoją
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Sugeneruoja userId
'User name', // name
'User address', // address
'[email protected]' // email
]
]
);
// Suskaičiuoja naudotojus lentelėje
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Dabar lentelėje "users" yra ${usersCount[0].cpt} įrašų`);
// Uždaro prisijungimą
await db.end();
})().catch(error => {
console.error('');
console.error('Įvyko klaida!');
console.error(error);
process.exit(1);
});
MariaDB naudojimas su Node.js/NestJS/TypeORM
Node.js, NestJS ar TypeORM atveju galite įjungti SSL, pridėdami ssl parinktį:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
MariaDB naudojimas su Prisma
Norėdami prisijungti prie MariaDB su Prisma, tiesiog pridėkite sslaccept=strict prie savo prisijungimo URL. Pavyzdžiui, jei jungiatės kaip „root“ prie „root“ duomenų bazės:
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
MariaDB naudojimas su Django
Jei dar nepadarėte, galite įdiegti mysqlclient modulį, kad prijungtumėte Django prie MariaDB:
pip install mysqlclient
Jei diegiant gaunate klaidą
Exception: Can not find valid pkg-config name, gali reikėti iš pradžių įdiegtilibmysqlclientpaketą. Ubuntu/Debian sistemose:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Norėdami patikrinti prisijungimą, galite pradėti įrašydami prisijungimo duomenis tiesiai į settings.py. Tai tinka testavimui, bet nėra saugu gamyboje.
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>'
}
}
Atkreipkite dėmesį: šis pavyzdys skirtas tik testavimui. Nenaudokite kietai įrašytų prisijungimų gamyboje.
Kai įsitikinsite, kad prisijungimas veikia, saugiau laikyti prisijungimus aplinkos kintamuosiuose. Jei naudojate django-environ, galite jį įdiegti taip:
pip install django-environ
Tada atnaujinkite 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')
}
}
Tada sukurkite arba atnaujinkite .env failą (toje pačioje direktorijoje kaip settings.py) su:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Galiausiai, kad apsaugotumėte prisijungimus, pridėkite .env į savo .gitignore:
echo ".env" >> .gitignore
MariaDB prijungimas prie Java/Spring
Norėdami prijungti Spring aplikaciją prie MariaDB, nustatykite aplinkos kintamąjį SPRING_DATASOURCE_URL su savo duomenų bazės URL, naudojant jdbc: priešdėlį. Pavyzdžiui:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
MariaDB prijungimas prie Groovy/Grails
Štai pavyzdys, kaip galite sukonfigūruoti savo Grails aplikaciją 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' į tikrą savo duomenų bazės pavadinimą.
username = "root" // Rekomenduojama sukurti atskirą naudotoją jūsų aplikacijai.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Rekomenduojama sukurti atskirą naudotoją.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Naudotojo kūrimas MariaDB per phpMyAdmin
Didesniam saugumui rekomenduojama sukurti atskirą naudotoją savo aplikacijai, o ne naudoti „root“. Tai galite lengvai padaryti per phpMyAdmin:
- phpMyAdmin viršuje spauskite
User accounts.
- Spauskite
Add user account.
- Užpildykite formą:
- Pasirinkite naudotojo vardą (dažnai tai jūsų aplikacijos pavadinimas).
- Spauskite
Generate password, kad sugeneruotumėte stiprų slaptažodį, ir jį nukopijuokite. - Pažymėkite
Create database with same name and grant all privileges.
Patvirtinus, bus sukurtas naujas naudotojas ir atitinkama duomenų bazė.
Skirtumai tarp MariaDB ir MySQL
MariaDB yra nepriklausomas MySQL fork'as, sukurtas atvirojo kodo bendruomenės po to, kai Oracle 2010 metais įsigijo MySQL. Daugeliu atvejų MariaDB ir MySQL siūlo labai panašias funkcijas ir suderinamumą.