Backup ба restore
Өгөгдлийн сангийн backup нь аливаа системийн амин чухал хэсэг. Сервер эвдрэх, буруу DELETE хийх, хакерт өртөх зэрэг аюулаас хамгаалдаг.
mysqldump — backup хийх хэрэгсэл
mysqldump нь MySQL-тэй цуг ирдэг тушаалын мөрийн хэрэгсэл. Өгөгдлийн сангийн бүтэц ба өгөгдлийг SQL файл болгон хадгална.
# Үндсэн хэлбэр
mysqldump -u хэрэглэгч -p database_нэр > backup.sql
# Жишээ
mysqldump -u root -p myshop > myshop_backup.sql
# Нууц үг асуух бөгөөд оруулна
backup.sql файл нь хүснэгт үүсгэх болон бүх мэдээллийг нэмэх SQL мэдэгдлүүдийг агуулна — ямар ч MySQL сервер дээр ажиллуулж болно.
Нийтлэг сонголтууд
# Нэг database backup
mysqldump -u root -p myshop > myshop_2025-01-15.sql
# Бүх database backup
mysqldump -u root -p --all-databases > all_databases.sql
# Олон database
mysqldump -u root -p --databases myshop mystore > two_dbs.sql
# Зөвхөн бүтэц (өгөгдөлгүй)
mysqldump -u root -p --no-data myshop > myshop_structure.sql
# Зөвхөн өгөгдөл (бүтэцгүй)
mysqldump -u root -p --no-create-info myshop > myshop_data.sql
# Нэг хүснэгт
mysqldump -u root -p myshop users > users_backup.sql
--single-transaction: өгөгдлийн уялдаа хамаарал
# InnoDB хүснэгтэд зориулсан найдвартай backup
mysqldump -u root -p --single-transaction myshop > myshop_backup.sql
--single-transaction нь backup хийх явцад хүснэгтийг lock хийхгүйгээр тухайн мөчийн өгөгдлийг нэг transaction дотор авна. Аппликейшн backup хийж байхад ч ажлаа үргэлжлүүлж болно — production орчинд заавал хэрэглэх.
# Бүрэн найдвартай production backup
mysqldump -u root -p \
--single-transaction \
--routines \
--triggers \
--events \
myshop > myshop_full_backup.sql
| Сонголт | Утга |
| ---------------------- | ---------------------------------- |
| --routines | Stored procedure, function оруулах |
| --triggers | Trigger оруулах |
| --events | Scheduled event оруулах |
| --single-transaction | InnoDB-г lock хийхгүйгээр авах |
Шахаж хадгалах
# gzip-ээр шахах (файл 5-10 дахин жижигрэнэ)
mysqldump -u root -p --single-transaction myshop | gzip > myshop_2025-01-15.sql.gz
# Задлах
gunzip myshop_2025-01-15.sql.gz
Restore — сэргээх
# Байгаа database-д restore хийх
mysql -u root -p myshop < myshop_backup.sql
# Database үүсгээд restore
mysql -u root -p -e "CREATE DATABASE myshop_restored;"
mysql -u root -p myshop_restored < myshop_backup.sql
# Шахсан файлаас шууд restore
gunzip < myshop_2025-01-15.sql.gz | mysql -u root -p myshop
Restore хийхийн өмнө одоогийн өгөгдөл дарагдана — анхаарах хэрэгтэй.
Хуваарьт backup — cron
Linux сервер дээр cron ашиглан автомат backup тохируулах:
# Cron засварлах
crontab -e
# Өдөр бүр 02:00 цагт backup хийх
0 2 * * * mysqldump -u backup_user -pNuucUg myshop --single-transaction | gzip > /backups/myshop_$(date +\%Y-\%m-\%d).sql.gz
# 7 хоногоос хуучин backup устгах
0 3 * * * find /backups -name "myshop_*.sql.gz" -mtime +7 -delete
$(date +%Y-%m-%d) нь тухайн өдрийн огноог нэрэнд нэмдэг: myshop_2025-01-15.sql.gz
Backup шалгах
Backup хийснийг шалгахгүй бол итгэмжлэл болохгүй — сэргэж болохгүй backup нь backup биш:
# Тест database-д restore хийж шалгах
mysql -u root -p -e "CREATE DATABASE myshop_test;"
mysql -u root -p myshop_test < myshop_backup.sql
# Мөрийн тоо таарч байгаа эсэх
mysql -u root -p myshop -e "SELECT COUNT(*) FROM orders;"
mysql -u root -p myshop_test -e "SELECT COUNT(*) FROM orders;"
# Тест database устгах
mysql -u root -p -e "DROP DATABASE myshop_test;"
Backup стратеги
Өдөр бүр → бүрэн backup (full backup)
7 хоног → өмнөх долоо хоногийн backup хадгална
Сар бүр → сарын backup тусдаа хадгална
Жил бүр → жилийн backup архивлана
Байршил:
├── Тухайн сервер
├── Өөр серверт (off-site)
└── Cloud storage (S3, Google Cloud Storage)
Дараагийн хичээлд:
JSON өгөгдөл MySQL-д — JSON column үүсгэх, JSON функцүүд ашиглан өгөгдөл уншиж, өөрчлөх аргыг үзнэ.