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
Paprasčiausias būdas prisijungti prie savo MySQL 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 naudotojams MySQL URL formatas yra šiek tiek kitoks:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Naudojant MySQL su PHP
Naudojant MySQL su PHP ir MySQLi (objektinis stilius)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nerekomenduojame naudoti "root" duomenų bazės. Šis pavyzdys pateikiamas tik demonstraciniais tikslais. Geriausia praktika yra sukurti atskirą duomenų bazę ir naudotoją 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 MySQL su PHP ir MySQLi (procedūrinis stilius)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nerekomenduojame naudoti "root" duomenų bazės. Šis pavyzdys pateikiamas tik demonstraciniais tikslais. Geriausia praktika yra sukurti atskirą duomenų bazę ir naudotoją 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 MySQL su PHP ir PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Nerekomenduojame naudoti "root" duomenų bazės. Tai yra tik demonstraciniais tikslais. Geriausia praktika yra sukurti atskirą duomenų bazę ir naudotoją phpMyAdmin ir naudoti juos čia.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Jei susiduriate su klaida kaip "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed",
// įsitikinkite, kad /etc/ssl/certs/ kataloge yra CA sertifikatai.
// Žr. žemiau daugiau informacijos.
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 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 dėl to, kad /etc/ssl/certs/ kataloge nėra CA sertifikatų.
Jei turite prieigą prie sistemos, kurioje veikia jūsų PHP kodas, galite įdiegti šiuos sertifikatus taip:
- Ubuntu/Debian naudokite
sudo apt-get install ca-certificates - Alpine Linux naudokite
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ą į savo kompiuterį: https://letsencrypt.org/certs/isrgrootx1.pem
- Pridėkite
isrgrootx1.pemfailą prie savo PHP projekto failų. - Pakomentuokite eilutę
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Iškomentuokite eilutę
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Klaidos "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH" sprendimas
Jei susiduriate su klaida:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
arba panašiu pranešimu kaip:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_*
tai rodo, kad PDO buvo įdiegtas be MySQL palaikymo.
Sprendimas Ubuntu/Debian
Norėdami tai išspręsti Ubuntu ar Debian pagrindu veikiančiose sistemose, įdiekite reikiamą PHP MySQL plėtinį vykdydami šią komandą:
sudo apt-get install php-mysql
Sprendimas Docker
Jei naudojate Docker, įsitikinkite, kad MySQL palaikymas yra įtrauktas į kūrimo procesą. Pridėkite šią eilutę prie savo Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
Naudojant MySQL 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 redaguokite config/packages/doctrine.yaml failą ir nustatykite 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 gaunate klaidą:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
tai greičiausiai dėl to, kad /etc/ssl/certs/ kataloge nėra CA sertifikatų.
Jei turite prieigą prie sistemos, kurioje veikia jūsų PHP kodas, galite įdiegti šiuos sertifikatus taip:
- Ubuntu/Debian naudokite
sudo apt-get install ca-certificates - Alpine Linux naudokite
apk add ca-certificates
Jei neturite tiesioginės prieigos prie sistemos, galite įdiegti sertifikatą rankiniu būdu:
- Atsisiųskite sertifikatą į savo kompiuterį: https://letsencrypt.org/certs/isrgrootx1.pem
- Pridėkite
isrgrootx1.pemfailą prie savo Symfony projekto. - Redaguokite
config/packages/doctrine.yamlfailą ir nustatykite tvarkyklę ir parinktis taip:
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 MySQL su Laravel
Redaguokite config/database.php failą ir pakeiskite mysql konfigūraciją šiais nustatymais:
'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([
// Jei susiduriate su klaida kaip "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed",
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Naudojant MySQL su PHP CodeIgniter
database.php faile pridėkite šią konfigūraciją:
$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 konvenciją, duomenų bazė turi tą patį pavadinimą kaip ir naudotojas.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => true,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Svarbu: aktyvuoti TLS šifravimą
);
Prisijungimas prie MySQL su PHP naudojant aplinkos kintamuosius
Geriausia praktika yra nesaugoti savo kredencialų šaltinio kode, o naudoti aplinkos kintamuosius.
Žemiau pateiktas pavyzdys, kaip gauti šiuos kredencialus:
$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 konvenciją, duomenų bazė turi tą patį pavadinimą kaip ir naudotojas.
Naudojant MySQL su WordPress
Prisijungti WordPress prie Stackhero MySQL yra paprasta. Tiesiog redaguokite wp-config.php failą ir sukonfigūruokite duomenų bazę taip:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Naudoti 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 MySQL su Node.js
Naudojant MySQL X protokolą (xdevapi paketas)
Šiame pavyzdyje naudojame oficialų xdevapi paketą, kad pasinaudotume MySQL X protokolu. Norėdami jį įdiegti, vykdykite:
npm install @mysql/xdevapi
Žemiau pateiktas pilnas pavyzdys, naudojant xdevapi:
const mysqlx = require('@mysql/xdevapi');
(async () => {
// Prisijunkite prie MySQL naudodami MySQL X protokolą
const session = await mysqlx.getSession({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Sukurkite schemą (duomenų bazę), jei ji neegzistuoja
const schemaExists = await session.getSchema('stackherotest').existsInDatabase();
if (!schemaExists) {
await session.createSchema('stackherotest');
}
// Sukurkite lentelę 'users', jei ji neegzistuoja
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();
}
// Įterpkite netikrą naudotoją
await session
.getSchema('stackherotest') // Duomenų bazės pavadinimas
.getTable('users') // Lentelės pavadinimas
.insert('userId', 'name', 'address', 'email') // Stulpelių pavadinimai
.values(
Math.round(Math.random() * 100000), // Generuoti netikrą userId
'Naudotojo vardas', // stulpelis 'name'
'Naudotojo adresas', // stulpelis 'address'
'user@email.com' // stulpelis 'email'
)
.execute();
// Suskaičiuokite eilučių skaičių lentelėje 'users'
const usersCount = await session
.getSchema('stackherotest') // Duomenų bazės pavadinimas
.getTable('users')
.count();
console.log(`Dabar lentelėje "users" yra ${usersCount} įrašų`);
// Uždarykite prisijungimą prie MySQL
await session.close();
})().catch(error => {
console.error('');
console.error('🐞 Įvyko klaida!');
console.error(error);
process.exit(1);
});
Naudojant MySQL protokolą (MySQL2 paketas)
Šiame pavyzdyje naudojame mysql2 paketą su pažadų palaikymu. Norėdami jį įdiegti, vykdykite:
npm install mysql2
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Sukurkite duomenų bazę 'stackherotest', jei ji dar neegzistuoja
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Sukurkite 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;');
// Įterpkite netikrą naudotoją
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Generuoti netikrą userId
'Naudotojo vardas', // stulpelis 'name'
'Naudotojo adresas', // stulpelis 'address'
'user@email.com' // stulpelis 'email'
]
]
);
// Suskaičiuokite 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ždarykite prisijungimą prie MySQL
await db.end();
})().catch(error => {
console.error('');
console.error('🐞 Įvyko klaida!');
console.error(error);
process.exit(1);
});
Naudojant MySQL su Node.js, NestJS ar TypeORM
Norėdami prisijungti iš Node.js, NestJS ar TypeORM, įtraukite ssl parinktį, kaip parodyta šiame pavyzdyje:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: <PORT>,
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Naudojant MySQL su Prisma
Norėdami prisijungti naudojant Prisma, pridėkite sslaccept=strict parinktį, kad užtikrintumėte SSL šifravimo įjungimą. Štai pavyzdys, naudojant naudotoją "root" ir prisijungiant prie duomenų bazės "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Naudojant MySQL su Django
Jei mysqlclient modulis dar neįdiegtas, įdiekite jį, nes jis bus naudojamas prisijungti prie MySQL:
pip install mysqlclient
Jei susiduriate su klaida
Exception: Can not find valid pkg-config namediegiantmysqlclient, įdiekitelibmysqlclientpaketą. Ubuntu/Debian galite vykdyti:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Šiame pradiniame žingsnyje slaptažodis saugomas tiesiogiai settings.py faile tik testavimo tikslais. Rekomenduojama naudoti saugesnį metodą, kaip aprašyta toliau šioje dokumentacijoje.
Atidarykite settings.py failą ir pridėkite šiuos duomenis:
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>'
}
}
Būkite atsargūs: šis pavyzdys nerekomenduojamas gamybai ir skirtas tik testavimo tikslams!
Kai prisijungimas bus sėkmingas, galite naudoti rekomenduojamą metodą, kad saugiai saugotumėte kredencialus. Šiame pavyzdyje naudojamas django-environ aplinkos kintamųjų valdymui.
Pirmiausia įdiekite django-environ naudodami komandą:
pip install django-environ
Tada atidarykite settings.py failą ir pridėkite šiuos duomenis:
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')
}
}
Tada atidarykite arba sukurkite .env failą tame pačiame kataloge kaip settings.py ir pridėkite šiuos duomenis:
STACKHERO_MYSQL_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MYSQL_PORT=<PORT>
STACKHERO_MYSQL_ROOT_PASSWORD=<ROOT_PASSWORD>
Galiausiai pridėkite .env prie savo .gitignore failo, kad užtikrintumėte, jog jūsų kredencialai nebus įtraukti į jūsų Git saugyklą:
echo ".env" >> .gitignore
Prisijungimas prie MySQL su Java/Spring
Norėdami prijungti savo Spring programą, nustatykite aplinkos kintamąjį SPRING_DATASOURCE_URL su savo duomenų bazės URL, pridedant jdbc: priešdėlį:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Prisijungimas prie MySQL su Groovy/Grails
Šis pavyzdys parodo, kaip prijungti savo Grails programą 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" // Pakeiskite "/root" į duomenų bazę, prie kurios norite prisijungti.
username = "root" // Patartina sukurti atskirą naudotoją, o ne naudoti "root" kredencialus.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Patartina sukurti atskirą naudotoją, o ne naudoti "root" kredencialus.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Naudotojo kūrimas MySQL naudojant phpMyAdmin
Geriausia praktika yra sukurti atskirą naudotoją savo programai, o ne naudoti "root" naudotoją.
Paprasčiausias būdas tai padaryti yra per phpMyAdmin.
-
phpMyAdmin spustelėkite
Naudotojų paskyrosviršuje.
-
Spustelėkite
Pridėti naudotojo paskyrą.
-
Užpildykite naudotojo kūrimo formą:
- Pasirinkite paskyros pavadinimą (paprastai jūsų programos pavadinimas)
- Spustelėkite
Generuoti slaptažodį, kad sukurtumėte saugų slaptažodį (nukopijuokite jį į savo iškarpinę) - Pažymėkite parinktį
Sukurti duomenų bazę su tuo pačiu pavadinimu ir suteikti visas privilegijas
Kai patvirtinsite formą, bus sukurtas naujas naudotojas kartu su atitinkama duomenų baze, turinčia tą patį pavadinimą kaip ir naudotojo vardas.