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 077hufanya faili ya dump isomeke na root pekee (-rw-------), kwa sababu ina data yako yote.pipefailhufanya skripti nzima ishindwe ikiwamysqldumpimeshindwa. Bila hiyo,gzipingeandika kumbukumbu ndogo tupu na kuripoti mafanikio. Tuliivunja amri makusudi, na skripti ikatoka na msimbo 2 kama inavyopaswa.find … -mtime +14 -deletehuhifadhi nakala za wiki mbili.- Skripti huendesha kama root, kwa hiyo
mysqldumphuingia 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.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.