MySQL: Pradžia
Kaip pradėti naudotis MySQL
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti MySQL 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žtikrinama privačia ir dedikuota VM.
Taupykite laiką ir supaprastinkite savo gyvenimą: užtrunka tik 5 minutes išbandyti Stackhero MySQL cloud hosting sprendimą!
MySQL URL adresai
Jei norite greitai prisijungti prie savo MySQL paslaugos, galite 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 dirbate su Ruby, URL formatas šiek tiek skiriasi:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
MySQL naudojimas su PHP
MySQLi (objektinis stilius)
Štai pavyzdys, kaip prisijungti prie MySQL naudojant PHP MySQLi plėtinį objektiniu stiliumi:
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nors šiame pavyzdyje naudojama "root" duomenų bazė, rekomenduojama sukurti atskirą duomenų bazę ir naudotoją savo aplikacijai per phpMyAdmin.
$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();
?>
MySQLi (procedūrinis stilius)
Jei jums labiau patinka procedūrinis kodas, štai kaip galite prisijungti naudojant MySQLi procedūriniu stiliumi:
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Dėl saugumo rekomenduojama sukurti atskirą duomenų bazę ir naudotoją per phpMyAdmin, o ne naudoti "root".
$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ėkmingai: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
PDO
Jei duomenų bazės prieigai norite naudoti PDO, štai pavyzdinė prisijungimo konfigūracija:
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Geriausia sukurti atskirą duomenų bazę ir naudotoją savo aplikacijai.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Jei jungiantis matote SSL klaidas, įsitikinkite, kad jūsų sistemoje įdiegti tinkami CA sertifikatai (žr. žemiau).
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 prisijungėte prie duomenų bazės, kurios versija " . $version[0] . "\n";
?>
Trikčių šalinimas: SSL operation failed with code 1
Jei matote tokią klaidą:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
Tai greičiausiai reiškia, kad jūsų sistemoje trūksta CA sertifikatų kataloge /etc/ssl/certs/.
Jei turite prieigą prie serverio, kuriame veikia jūsų PHP kodas, sertifikatus galite įdiegti taip:
- Ubuntu/Debian:
sudo apt-get install ca-certificates - Alpine Linux:
apk add ca-certificates
Jei neturite tiesioginės prieigos, galite pridėti sertifikatą rankiniu būdu:
- Atsisiųskite sertifikatą: https://letsencrypt.org/certs/isrgrootx1.pem
- Įkelkite
isrgrootx1.pemį savo PHP projektą. - Pakomentuokite eilutę
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Atkomentuokite eilutę
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Sprendimas: nedefinuotų konstantų klaidos su PDO
Jei matote klaidas kaip:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
ar panašias žinutes, tai reiškia, kad PDO įdiegtas be MySQL palaikymo.
- Ubuntu/Debian
Reikiamą plėtinį galite įdiegti vykdydami:
sudo apt-get install php-mysql
- Docker aplinkoje
Jei naudojate Docker, įsitikinkite, kad MySQL palaikymas įtrauktas į build procesą. Pridėkite tai į savo Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
### MySQL naudojimas su Symfony ir Doctrine
Jei dirbate su Symfony ir Doctrine, galite konfigūruoti prisijungimą taip:
1. Redaguokite `.env` failą ir nustatykite `DATABASE_URL` kintamąjį:
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
1. Tuomet faile `config/packages/doctrine.yaml` nustatykite 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
Trikčių šalinimas: SSL operation failed with code 1
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 greičiausiai reiškia, kad kataloge /etc/ssl/certs/ nėra CA sertifikatų.
Jei turite prieigą prie sistemos, galite juos įdiegti taip:
- Ubuntu/Debian:
sudo apt-get install ca-certificates - Alpine Linux:
apk add ca-certificates
Jei neturite tiesioginės prieigos, galite pridėti sertifikatą rankiniu būdu:
- Atsisiųskite: https://letsencrypt.org/certs/isrgrootx1.pem
- Įkelkite
isrgrootx1.pemį savo Symfony projektą. - Atnaujinkite
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
MySQL naudojimas su Laravel
Norėdami konfigūruoti MySQL Laravel aplinkoje, atverkite config/database.php ir atnaujinkite MySQL sekciją:
'mysql' => [
'driver' => 'mysql',
'host' => env('STACKHERO_MYSQL_HOST'),
'port' => env('STACKHERO_MYSQL_PORT'),
'username' => env('STACKHERO_MYSQL_USER'),
'password' => env('STACKHERO_MYSQL_PASSWORD'),
'database' => env('STACKHERO_MYSQL_USER'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'sslmode' => 'require',
'options' => extension_loaded('pdo_mysql')
? array_filter([
// Dėl SSL klaidų žr. trikčių šalinimą aukščiau.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
MySQL naudojimas su PHP CodeIgniter
Konfigūracijos faile database.php galite pridėti:
$db['default'] = array(
'hostname' => getenv('STACKHERO_MYSQL_HOST'),
'port' => getenv('STACKHERO_MYSQL_PORT'),
'username' => getenv('STACKHERO_MYSQL_USER'),
'password' => getenv('STACKHERO_MYSQL_PASSWORD'),
'database' => getenv('STACKHERO_MYSQL_USER'), // Pagal susitarimą, duomenų bazės pavadinimas sutampa su naudotoju.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => true,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Svarbu: įjunkite TLS šifravimą
);
Prisijungimas naudojant aplinkos kintamuosius PHP
Paprastai saugiau nerašyti duomenų bazės prisijungimo duomenų tiesiai į kodą. Vietoj to naudokite aplinkos kintamuosius. Štai kaip juos gauti:
$hostname = getenv('STACKHERO_MYSQL_HOST');
$port = getenv('STACKHERO_MYSQL_PORT');
$user = getenv('STACKHERO_MYSQL_USER');
$password = getenv('STACKHERO_MYSQL_PASSWORD');
$database = getenv('STACKHERO_MYSQL_USER'); // Pagal susitarimą, duomenų bazės pavadinimas sutampa su naudotoju.
MySQL naudojimas su WordPress
WordPress prijungimas prie Stackhero MySQL yra paprastas. Tiesiog redaguokite savo wp-config.php failą taip:
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 (SSL) šifravimą. Be to, jūsų prisijungimas neveiks tinkamai.
MySQL naudojimas su Node.js
MySQL X protokolas (xdevapi paketas)
Norėdami naudoti MySQL X protokolą, įdiekite oficialų xdevapi paketą:
npm install @mysql/xdevapi
Štai pavyzdinis scenarijus:
const mysqlx = require('@mysql/xdevapi');
(async () => {
// Prisijungimas prie MySQL naudojant MySQL X protokolą
const session = await mysqlx.getSession({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Sukuria schemą (duomenų bazę), jei jos nėra
const schemaExists = await session.getSchema('stackherotest').existsInDatabase();
if (!schemaExists) {
await session.createSchema('stackherotest');
}
// Sukuria lentelę 'users', jei jos nėra
const tableExists = await session
.getSchema('stackherotest')
.getTable('users')
.existsInDatabase();
if (!tableExists) {
await session
.sql('CREATE TABLE `stackherotest`.`users` '
+ '('
+ '`userId` INT UNSIGNED NOT NULL,'
+ '`name` VARCHAR(128) NOT NULL,'
+ '`address` TEXT NOT NULL,'
+ '`email` VARCHAR(265) NOT NULL'
+ ') '
+ 'ENGINE = InnoDB;')
.execute();
}
// Įterpia pavyzdinį naudotoją
await session
.getSchema('stackherotest')
.getTable('users')
.insert('userId', 'name', 'address', 'email')
.values(
Math.round(Math.random() * 100000),
'User name',
'User address',
'[email protected]'
)
.execute();
// Suskaičiuoja naudotojų skaičių
const usersCount = await session
.getSchema('stackherotest')
.getTable('users')
.count();
console.log(`Dabar lentelėje "users" yra ${usersCount} įrašų`);
// Uždaro prisijungimą
await session.close();
})().catch(error => {
console.error('');
console.error('Įvyko klaida!');
console.error(error);
process.exit(1);
});
MySQL protokolas (mysql2 paketas)
Jei norite naudoti klasikinį protokolą, galite naudoti mysql2 paketą su promise palaikymu. Įdiekite jį taip:
npm install mysql2
Naudojimo pavyzdys:
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 reikia
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Sukuria lentelę, jei reikia
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),
'User name',
'User address',
'[email protected]'
]
]
);
// Suskaičiuoja naudotojus
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);
});
MySQL naudojimas su Node.js, NestJS ar TypeORM
Norėdami prisijungti iš Node.js, NestJS ar TypeORM, galite pridėti ssl parinktį, kaip parodyta žemiau:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: <PORT>,
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
MySQL naudojimas su Prisma
Jei naudojate Prisma, pridėjus sslaccept=strict užtikrinsite užšifruotą prisijungimą. Štai pavyzdinė konfigūracija:
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
MySQL naudojimas su Django
Jei dar neįdiegėte mysqlclient modulio, galite tai padaryti taip:
pip install mysqlclient
Jei diegimo metu gaunate klaidą
Exception: Can not find valid pkg-config name, gali reikėti įdiegtilibmysqlclientpaketą. Ubuntu/Debian sistemose naudokite:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Iš pradžių galite testuoti prisijungimą, slaptažodį įrašydami tiesiai į settings.py failą. Ilgalaikiam saugumui geriau naudoti aplinkos kintamuosius (žr. žemiau).
Redaguokite savo settings.py taip:
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 ir nerekomenduojamas gamybinėje aplinkoje!
Patikrinę, kad prisijungimas veikia, galite pereiti prie saugesnio metodo, naudodami django-environ aplinkos kintamųjų valdymui.
Pirmiausia įdiekite paketą:
pip install django-environ
Tada atnaujinkite savo settings.py:
import environ
env = environ.Env()
environ.Env.read_env()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': env('STACKHERO_MYSQL_HOST'),
'PORT': env('STACKHERO_MYSQL_PORT'),
'OPTIONS': {
'ssl_mode': 'REQUIRED',
},
'NAME': 'root',
'USER': 'root',
'PASSWORD': env('STACKHERO_MYSQL_ROOT_PASSWORD')
}
}
Sukurkite arba redaguokite .env failą tame pačiame kataloge kaip ir settings.py ir pridėkite:
STACKHERO_MYSQL_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MYSQL_PORT=<PORT>
STACKHERO_MYSQL_ROOT_PASSWORD=<ROOT_PASSWORD>
Galiausiai, kad apsaugotumėte savo prisijungimo duomenis, pridėkite .env į .gitignore failą:
echo ".env" >> .gitignore
MySQL prijungimas su Java/Spring
Norėdami prijungti savo Spring aplikaciją, galite nustatyti SPRING_DATASOURCE_URL aplinkos kintamąjį su savo duomenų bazės URL, būtinai pridėkite jdbc: prieš adresą:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
MySQL prijungimas su Groovy/Grails
Štai pavyzdys, kaip konfigūruoti savo Grails aplikaciją prisijungti prie MySQL:
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" // Galite pakeisti "/root" į norimą duomenų bazę.
username = "root" // Rekomenduojama sukurti atskirą naudotoją savo aplikacijai.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Naudotojo kūrimas MySQL per phpMyAdmin
Dėl didesnio saugumo rekomenduojama sukurti atskirą naudotoją savo aplikacijai, o ne naudoti "root" naudotoją. Tai galite lengvai padaryti per phpMyAdmin:
-
phpMyAdmin viršuje pasirinkite
User accounts.
-
Spauskite
Add user account.
-
Užpildykite naudotojo kūrimo formą:
- Įveskite paskyros pavadinimą (dažniausiai jūsų aplikacijos pavadinimą)
- Spauskite
Generate password, kad sugeneruotumėte saugų slaptažodį, ir nukopijuokite jį - Pasirinkite
Create database with same name and grant all privileges
Pateikus formą, turėsite naują naudotoją ir dedikuotą duomenų bazę, kurios pavadinimas sutampa su naudotojo vardu.