EQVPS
ډشبورډپیل وکړئ

په VPS کې MySQL څنګه ولګوو: کاروونکي، خوندي لرې لاسرسی، لږ RAM او بیک‌اپ

په Ubuntu 24.04 VPS کې MySQL 8.0 ولګوئ، د اپ لپاره ډیټابیس او کاروونکی جوړ کړئ، پرته له دې چې 3306 پورټ پرانیزئ له خپل کمپیوټر څخه ورته ورسېږئ، د بېکاره حالت حافظه له 383 MB څخه 165 MB ته راکمه کړئ، او هره شپه داسې سکرېپټ سره بیک‌اپ واخلئ چې د ستونزې پر مهال په ښکاره ناکامېږي.

د MySQL لګول یوه کمانډ ده. اصلي کار وروسته راځي: د اپ لپاره یو کاروونکی، له خپل کمپیوټر څخه ډیټابیس ته د رسېدو داسې لاره چې 3306 پورټ په انټرنیټ کې نه وي، د کوچني سرور لپاره د حافظې ترتیبات، او داسې بیک‌اپونه چې بې له تاسو روان وي. دا لارښود په Ubuntu 24.04 کې څلور واړه پوښي. هر ګام زموږ د Ubuntu 24.04 امېج پر سر چلول شوی، او لاندې شمېرې له همدې سرور څخه دي.

کمانډونه د sudo لرونکي کاروونکي له لارې وچلوئ. د Ubuntu د چمتو کولو لارښود یو جوړوي.

1. ولګوئ

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

زموږ په سرور لګولو 51 ثانیې ونیولې او MySQL 8.0.46 یې راکړ. سمدستي پیلېږي، د هر بوټ پر مهال بیا پیلېږي، او یوازې پر خپله سرور اوري: د عادي اړیکو لپاره 127.0.0.1:3306 او د MySQL د نوي X پروتوکول لپاره 127.0.0.1:33060. تر اوسه له بهر څخه هېڅ شي ته لاسرسی نشته.

2. ډیټابیس او کاروونکی جوړ کړئ

په Ubuntu کې د MySQL root حساب د ساکټ تصدیق کاروي، نو sudo mysql تاسو بې له پاسورډه ننباسي. د خپل اپ لپاره ډیټابیس او کاروونکی جوړ کړئ:

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;

هماغسې یې وازمویئ لکه څنګه چې اپ به وصلېږي:

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

باید app@localhost وښيي. غلط پاسورډ دا ترلاسه کوي: ERROR 1045 (28000): Access denied for user 'app'@'localhost'. کاروونکی د app دننه هر څه کولی شي او بهر یې هېڅ.

3. له خپل کمپیوټر څخه وصل شئ: د SSH تونل

په خپل ماشین د DBeaver، MySQL Workbench یا د mysql د کمانډ کرښې په څېر د ډیسکټاپ پېرودونکي کارولو لپاره هېڅ پورټ مه پرانیزئ. یو د SSH له لارې ولېږدوئ:

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

په NAT پلان کې -p او د ډشبورډ شخصي SSH پورټ ورزیات کړئ. تر هغه چې دا کړکۍ پرانیستې وي، پېرودونکی کوربه 127.0.0.1، پورټ 3307 او کاروونکي app ته برابر کړئ. په ځایي اړخ کې مو 3307 ونیو څو د هغه MySQL سره ټکر ونه کړي چې ښايي ستاسو په کمپیوټر روان وي. زموږ په ازموینه کې سرور د تونل له لارې سمدستي ځواب ورکړ، خو د هغه پتې ته په 3306 مستقیمه اړیکه رد شوه.

4. د یو بل سرور لپاره مستقیم لاسرسی

کله ناکله اپ په دوهم سرور چلېږي او باید مستقیم وصل شي. د دې لپاره ډیټابیس داسې پلان ته اړتیا لري چې خپل IPv4 ولري، ځکه NAT پلان یوازې ستاسو د SSH پورټ لېږدوي. درې بدلونونه، ټول د اپ د سرور پتې (دلته 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';

که ufw لا فعال نه وي، لومړی SSH ته اجازه ورکړئ (sudo ufw allow OpenSSH)، بیا sudo ufw enable وچلوئ. توضیحات په ufw لارښود کې دي.

موږ دواړه قلفونه جلا جلا وکتل. د فایروال قاعده وه خو اړوند MySQL کاروونکی نه و، سرور د error 1130: Host '…' is not allowed to connect to this MySQL server سره رد کړه. کاروونکی چې ور اضافه شو، اړیکه تېره شوه. کله چې د فایروال قاعده لرې شوه، اړیکه یوازې وخت ته ورسېده. په انټرنیټ کې هره بله پته همدا د وخت پای ترلاسه کوي.

5. لږ RAM وکاروئ

په بېکاره حالت کې او له خپلو معلوماتو پرته، MySQL 8.0 زموږ په سرور 383 MB کارول. ډېره برخه یې د Performance Schema ده، د تشخیص یوه ځانګړنه چې حافظه له مخکې ساتي. په کوچني VPS کې یې بنده کړئ او د اصلي کیش اندازه پخپله وټاکئ:

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

له بیا پیل وروسته یې 165 MB کارول. buffer pool ستاسو معلومات او انډکسونه کیش کوي، او 256 MB د هغه 2 GB سرور لپاره مناسب دی چې اپ هم چلوي. که ډیټابیس د سرور اصلي کار وي او له کیش څخه لوی شوی وي، زیات یې کړئ. max_connections = 50 د اړیکو د حوض لرونکي یو اپ لپاره تر اړتیا زیات دی. تاسو د performance_schema شمېرنې له لاسه ورکوئ. که کله مو د ورو پوښتنو په تفصیل سره کتلو ته اړتیا شوه، بیا یې فعال کړئ.

6. د شپې بیک‌اپونه

mysqldump --single-transaction د اپ له بندولو پرته د InnoDB جدولونو یوه همغږې کاپي اخلي. په یوه کوچني سکرېپټ کې یې کېږدئ:

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

هره کرښه یو دلیل لري:

  • umask 077 ډمپ یوازې د root د لوستلو وړ کوي (-rw-------)، ځکه ستاسو ټول معلومات پکې دي.
  • pipefail کوي چې که mysqldump ناکام شي، ټول سکرېپټ ناکام شي. له دې پرته gzip به یو کوچنی تش آرشیف لیکلی وای او بریالیتوب به یې راپور کړی وای. موږ کمانډ په قصد مات کړ، او سکرېپټ لکه څنګه چې باید وای د 2 کوډ سره ووت.
  • find … -mtime +14 -delete د دوو اونیو کاپۍ ساتي.
  • سکرېپټ د root په توګه چلېږي، نو mysqldump د ساکټ له لارې ننوځي او په هېڅ فایل کې پاسورډ نه پاتې کېږي.

هغه بیک‌اپ چې تاسو هېڅکله بېرته نه وي راګرځولی، لا نه شمېرل کېږي. په یو لنډمهاله ډیټابیس کې یې بېرته راوګرځوئ او معلومات وګورئ:

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"

زموږ په ازموینه کې بېرته راګرځول شوي جدول هماغه کرښې درلودې چې اصلي یې لرلې. په همدې ډیسک پرتې کاپۍ که سرور له لاسه ورکړئ تاسو نه ساتي، نو کله ناکله یې د scp یا restic په مرسته بل ماشین ته یوسئ. Managed Backups پر دې سربېره د ټول سرور ورځني د بېرته راګرځولو ټکي زیاتوي.

کوم پلان

Micro (2 vCPU، 2 GB، 25 GB، په میاشت $5) پورته تنظیم شوی MySQL او یو ویب اپ ځایوي. که پخپله ډیټابیس له څو ګیګابایټو واوړي، Small چې 4 GB او 35 GB لري، په میاشت $8 کې تاسو ته اجازه درکوي چې buffer pool ته 1 GB یا ډېر ورکړئ. دواړه NAT پلانونه دي، او د درېیم ګام SSH تونل پرې کار کوي. څلورم ګام خپل IPv4 ته اړتیا لري: Micro-IP په میاشت $10 دی.

PostgreSQL مو خوښ دی؟ د PostgreSQL لارښود هماغه پلان تعقیبوي. ټول پلانونه په VPS کې دي، او تادیه د Base، Ethereum یا Polygon په شبکو کې په USDT، USDC یا ETH کېږي.

پوښتنې

MySQL که MariaDB؟

دواړه د Ubuntu 24.04 په خپلو زېرمو کې شته: mysql-server MySQL 8.0 لګوي او mariadb-server MariaDB 10.11 لګوي. ډېری هغه اپونه چې "MySQL" غواړي له دواړو سره کار کوي. هغه وکاروئ چې ستاسو د اپ اسناد یې وايي، او که توپیر نه کوي MySQL 8.0. دا لارښود MySQL کاروي.

د MySQL د root پاسورډ څه دی؟

نشته. په Ubuntu کې د MySQL root حساب د ساکټ تصدیق کاروي: sudo mysql تاسو د root په توګه ننباسي، او هېڅوک د شبکې له لارې د root په توګه نه شي ننوتلی. همداسې یې پرېږدئ او د اپونو لپاره جلا کاروونکي جوړ کړئ.

ایا 3306 پورټ انټرنیټ ته پرانیزم؟

نه. پرانیستي ډیټابیس پورټونه هر وخت سکین کېږي او پر هغو د پاسورډونو اټکل کېږي. له خپل کمپیوټر څخه د SSH تونل له لارې وصل شئ. که بل سرور باید مستقیم وصل شي، یوازې د هماغه سرور IP ته، هم په MySQL کې او هم په فایروال کې، اجازه ورکړئ.

MySQL څومره RAM ته اړتیا لري؟

سمدستي له لګولو وروسته MySQL 8.0 زموږ د ازموینې په سرور پرته له خپل ډیټابیس 383 MB کارول. د Performance Schema په بندولو او د منځنۍ اندازې buffer pool سره 165 MB ته راښکته شو. د 2 GB Micro پلان MySQL او یو اپ په اسانۍ چلوي؛ له دې تنظیم وروسته د یوې کوچنۍ ویب پاڼې لپاره 1 GB هم بس دی.

ایا mysql_secure_installation چلول اړین دي؟

په Ubuntu 24.04 کې د هغه ډېری کار مخکې شوی وي. زموږ په نوې لګونه کې نه بې‌نومه کاروونکي وو او نه د ازموینې ډیټابیس، او root یوازې د سیمه‌ییز ساکټ له لارې ننوتلی شي. که د پاسورډ د ځواک د ازموینې برخه یې غواړئ، ویې چلوئ؛ که نه، پرېښودلی یې شئ.

تبصرې

لا تبصرې نشته. لومړی اوسئ.

یوه تبصره پریږدئ

تبصرې د ښکاره کیدو مخکې اعتدال کیږي.