د 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 کېږي.
تبصرې
لا تبصرې نشته. لومړی اوسئ.