EQVPS
DashibodiAnza

Jinsi ya kusakinisha MySQL kwenye VPS: watumiaji, ufikiaji salama wa mbali, RAM kidogo na nakala rudufu

Sakinisha MySQL 8.0 kwenye VPS ya Ubuntu 24.04, unda hifadhidata na mtumiaji wa programu, ifikie kutoka kompyuta yako bila kufungua mlango 3306, punguza kumbukumbu ikiwa haifanyi kazi kutoka MB 383 hadi MB 165, na uhifadhi nakala kila usiku kwa skripti inayoshindwa waziwazi inapokosea.

Kusakinisha MySQL ni amri moja. Kazi kubwa inakuja baadaye: mtumiaji wa programu, njia ya kufikia hifadhidata kutoka kompyuta yako bila kuweka mlango 3306 kwenye intaneti, mipangilio ya kumbukumbu kwa seva ndogo, na nakala rudufu zinazojiendesha bila wewe. Mwongozo huu unashughulikia yote manne kwenye Ubuntu 24.04. Kila hatua iliendeshwa kwenye picha yetu ya Ubuntu 24.04, na takwimu zilizo hapa chini zinatoka kwenye seva hiyo.

Endesha amri kama mtumiaji mwenye sudo. Mwongozo wa kuandaa Ubuntu huunda mmoja.

1. Sakinisha

sudo apt update
sudo apt install -y mysql-server
mysql --version

Kwenye seva yetu usakinishaji ulichukua sekunde 51 na ukatupa MySQL 8.0.46. Inaanza mara moja, inaanza tena kila seva inapowashwa, na inasikiliza kwenye seva yenyewe pekee: 127.0.0.1:3306 kwa miunganisho ya kawaida na 127.0.0.1:33060 kwa itifaki mpya zaidi ya X ya MySQL. Bado hakuna kinachofikika kutoka nje.

2. Unda hifadhidata na mtumiaji

Kwenye Ubuntu akaunti ya root ya MySQL hutumia uthibitishaji kupitia soketi, kwa hiyo sudo mysql hukuingiza bila nenosiri. Unda hifadhidata na mtumiaji kwa programu yako:

sudo mysql
CREATE DATABASE app CHARACTER SET utf8mb4;
CREATE USER 'app'@'localhost' IDENTIFIED BY 'a-long-random-password';
GRANT ALL PRIVILEGES ON app.* TO 'app'@'localhost';
EXIT;

Ijaribu kwa namna ambayo programu itaunganisha:

mysql -u app -p app -e "SELECT CURRENT_USER();"

Inapaswa kuonyesha app@localhost. Nenosiri lisilo sahihi hupata ERROR 1045 (28000): Access denied for user 'app'@'localhost'. Mtumiaji anaweza kufanya chochote ndani ya app na hakuna kitu nje yake.

3. Unganisha kutoka kompyuta yako: handaki la SSH

Ili kutumia programu ya mezani kama DBeaver, MySQL Workbench au mstari wa amri wa mysql kwenye mashine yako, usifungue mlango wowote. Elekeza mmoja kupitia SSH:

ssh -L 3307:127.0.0.1:3306 deploy@YOUR.SERVER.IP

Kwenye mpango wa NAT ongeza -p na mlango wako binafsi wa SSH kutoka kwenye dashibodi. Dirisha hilo likiwa wazi, elekeza programu kwenye mwenyeji 127.0.0.1, mlango 3307, mtumiaji app. Upande wa ndani tulitumia 3307 ili usigongane na MySQL ambayo huenda inaendesha kwenye kompyuta yako. Katika jaribio letu seva ilijibu mara moja kupitia handaki, huku muunganisho wa moja kwa moja kwenye anwani yake kwa mlango 3306 ukikataliwa.

4. Ufikiaji wa moja kwa moja kwa seva nyingine moja

Wakati mwingine programu huendesha kwenye seva ya pili na lazima iunganishe moja kwa moja. Kwa hilo hifadhidata inahitaji mpango wenye IPv4 yake, kwa sababu mpango wa NAT huelekeza mlango wako wa SSH pekee. Mabadiliko matatu, yote yakiwa yamewekewa kikomo kwa anwani ya seva ya programu (hapa 203.0.113.20):

sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql
sudo ufw allow from 203.0.113.20 to any port 3306 proto tcp
CREATE USER 'app'@'203.0.113.20' IDENTIFIED BY 'a-long-random-password';
GRANT ALL PRIVILEGES ON app.* TO 'app'@'203.0.113.20';

Ikiwa ufw bado haijawashwa, ruhusu SSH kwanza (sudo ufw allow OpenSSH) kisha uendeshe sudo ufw enable. Maelezo yako kwenye mwongozo wa ufw.

Tulikagua kufuli zote mbili kila moja peke yake. Kanuni ya ngome ikiwepo lakini bila mtumiaji wa MySQL anayelingana, seva ilikataa kwa error 1130: Host '…' is not allowed to connect to this MySQL server. Mtumiaji alipoongezwa, muunganisho ulipita. Kanuni ya ngome ilipoondolewa, muunganisho uliishiwa muda tu. Anwani nyingine yoyote kwenye intaneti hupata kuishiwa muda huko huko.

5. Tumia RAM kidogo

Ikiwa haifanyi kazi na bila data yake, MySQL 8.0 ilitumia MB 383 kwenye seva yetu. Sehemu kubwa ni Performance Schema, kipengele cha uchunguzi kinachohifadhi kumbukumbu mapema. Kwenye VPS ndogo, kizime na uweke mwenyewe ukubwa wa akiba kuu:

sudo tee /etc/mysql/mysql.conf.d/zz-small-vps.cnf >/dev/null <<'EOF'
[mysqld]
performance_schema = OFF
innodb_buffer_pool_size = 256M
max_connections = 50
EOF
sudo systemctl restart mysql
ps -o rss= -C mysqld

Baada ya kuanzisha upya ilitumia MB 165. Buffer pool huhifadhi data na faharasa zako kwenye akiba, na MB 256 zinafaa seva ya GB 2 inayoendesha pia programu. Iongeze ikiwa hifadhidata ndiyo kazi kuu ya seva na imekua kuliko akiba. max_connections = 50 inatosha zaidi ya kutosha kwa programu moja yenye kundi la miunganisho. Unapoteza takwimu za performance_schema. Iwashe tena ukihitaji siku moja kuchunguza kwa kina hoja zinazokwenda polepole.

6. Nakala rudufu za kila usiku

mysqldump --single-transaction huchukua nakala thabiti ya majedwali ya InnoDB bila kuifungia programu nje. Iweke kwenye skripti ndogo:

sudo tee /usr/local/bin/mysql-backup >/dev/null <<'EOF'
#!/bin/bash
set -euo pipefail
umask 077
mkdir -p /var/backups/mysql
mysqldump --single-transaction --routines --triggers app | gzip > /var/backups/mysql/app-$(date +%F).sql.gz
find /var/backups/mysql -name 'app-*.sql.gz' -mtime +14 -delete
EOF
sudo chmod 755 /usr/local/bin/mysql-backup
echo '0 3 * * * root /usr/local/bin/mysql-backup' | sudo tee /etc/cron.d/mysql-backup
sudo /usr/local/bin/mysql-backup && sudo ls -l /var/backups/mysql

Kila mstari una sababu yake:

  • umask 077 hufanya faili ya dump isomeke na root pekee (-rw-------), kwa sababu ina data yako yote.
  • pipefail hufanya skripti nzima ishindwe ikiwa mysqldump imeshindwa. Bila hiyo, gzip ingeandika kumbukumbu ndogo tupu na kuripoti mafanikio. Tuliivunja amri makusudi, na skripti ikatoka na msimbo 2 kama inavyopaswa.
  • find … -mtime +14 -delete huhifadhi nakala za wiki mbili.
  • Skripti huendesha kama root, kwa hiyo mysqldump huingia kupitia soketi na hakuna nenosiri lililo kwenye faili.

Nakala rudufu ambayo hujawahi kuirejesha bado haihesabiki. Irejeshe kwenye hifadhidata ya muda na uangalie data:

sudo mysql -e "CREATE DATABASE app_restore"
gunzip -c /var/backups/mysql/app-2026-10-25.sql.gz | sudo mysql app_restore
sudo mysql -e "SHOW TABLES FROM app_restore"
sudo mysql -e "DROP DATABASE app_restore"

Katika jaribio letu jedwali lililorejeshwa lilikuwa na safu zilezile kama la asili. Nakala kwenye diski ileile hazikulindi ukipoteza seva, kwa hiyo zihamishe mara kwa mara kwenye mashine nyingine kwa scp au restic. Managed Backups huongeza juu yake sehemu za kurejesha za kila siku za seva nzima.

Mpango gani

Micro (vCPU 2, GB 2, GB 25, $5 kwa mwezi) hubeba MySQL iliyorekebishwa kama hapo juu pamoja na programu ya wavuti. Ikiwa hifadhidata yenyewe itazidi gigabaiti chache, Small yenye GB 4 na GB 35 kwa $8 kwa mwezi inakuruhusu kuipa buffer pool GB 1 au zaidi. Yote mawili ni mipango ya NAT, na handaki la SSH la hatua ya 3 linafanya kazi juu yake. Hatua ya 4 inahitaji IPv4 yako: Micro-IP ni $10 kwa mwezi.

Unapendelea PostgreSQL? Mwongozo wa PostgreSQL unafuata mpango uleule. Mipango yote iko kwenye VPS, na malipo ni kwa USDT, USDC au ETH kwenye mitandao ya Base, Ethereum au Polygon.

Maswali

MySQL au MariaDB?

Zote mbili ziko kwenye hazina za Ubuntu 24.04 zenyewe: mysql-server husakinisha MySQL 8.0 na mariadb-server husakinisha MariaDB 10.11. Programu nyingi zinazohitaji "MySQL" hufanya kazi na yoyote. Tumia ile ambayo nyaraka za programu yako zinataja, na MySQL 8.0 kama haijalishi. Mwongozo huu unatumia MySQL.

Nenosiri la root la MySQL ni lipi?

Hakuna. Kwenye Ubuntu, akaunti ya root ya MySQL hutumia uthibitishaji kupitia soketi: sudo mysql hukuingiza kama root, na hakuna anayeweza kuingia kama root kupitia mtandao. Iache hivyo na uunde watumiaji tofauti kwa programu zako.

Je, nifungue mlango 3306 kwa intaneti?

Hapana. Milango ya hifadhidata iliyo wazi huchanganuliwa na kujaribiwa manenosiri kila wakati. Kutoka kompyuta yako, unganisha kupitia handaki la SSH. Ikiwa seva nyingine lazima iunganishe moja kwa moja, ruhusu IP ya seva hiyo tu, ndani ya MySQL na kwenye ngome pia.

MySQL inahitaji RAM kiasi gani?

Mara tu baada ya kusakinishwa, MySQL 8.0 ilitumia MB 383 kwenye seva yetu ya majaribio bila hifadhidata zake. Baada ya kuzima Performance Schema na kuweka buffer pool ya wastani, ilishuka hadi MB 165. Mpango wa Micro wa GB 2 huendesha MySQL na programu kwa urahisi; baada ya urekebishaji huo, GB 1 inatosha kwa tovuti ndogo.

Je, ninahitaji kuendesha mysql_secure_installation?

Kwenye Ubuntu 24.04 kazi yake nyingi tayari imefanywa. Usakinishaji wetu mpya haukuwa na watumiaji wasiojulikana wala hifadhidata ya majaribio, na root inaweza kuingia kupitia soketi ya ndani pekee. Iendeshe ukitaka kipengele chake cha kukagua uimara wa nenosiri; vinginevyo unaweza kuiruka.

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.