# SQL zaxira va tiklash (backup)

> Ma'lumotlar bazasini yo'qotib qo'ymaslik uchun zaxira nusxa olish. SQLite bazasini fayl sifatida nusxalash, .dump bilan SQL'ga eksport qilish va tiklash.

Manba: https://learncode.uz/sql/zaxira/
Sana: 2026-06-21

Baza — loyihaning eng qimmatli qismi: kod qayta yozilishi mumkin, yo'qolgan
ma'lumot esa qaytmaydi. Shuning uchun **zaxira** (backup) olish — har bir
dasturchi bilishi shart bo'lgan odat. Bu darsda SQLite bazasidan nusxa olish
va uni tiklashni ko'ramiz.

## Eng oddiy zaxira: faylni nusxalash

SQLite'da butun baza **bitta fayl** (`magazin.db`). Shuning uchun eng oddiy
zaxira — shu faylning nusxasini boshqa joyga saqlash:

```
magazin.db  →  magazin_2026-07-28.db
```

Sanani nomiga qo'shsangiz, turli kunlardagi nusxalarni ajratasiz. Bu usul
sodda va ishonchli.

## SQL sifatida eksport: .dump

Bazani **matn** (SQL buyruqlari) ko'rinishida saqlash ham mumkin. `sqlite3`
vositasi orqali:

```
sqlite3 magazin.db .dump > zaxira.sql
```

`zaxira.sql` ichida barcha [`CREATE TABLE`](https://learncode.uz/sql/create-table) va
[`INSERT`](https://learncode.uz/sql/insert) buyruqlari bo'ladi — ya'ni bazani noldan tiklash
uchun kerak bo'lgan hamma narsa. DB Browser'da esa: **File → Export →
Database to SQL file**.

## Tiklash (restore)

SQL fayldan tiklash — uni yangi bazada ishga tushirish:

```
sqlite3 yangi.db < zaxira.sql
```

Bu `zaxira.sql` dagi barcha buyruqni bajarib, bazani qayta tiklaydi.

> **Atama**
>
> **Zaxira (backup)** — ma'lumotning boshqa joyda saqlangan nusxasi. **Tiklash
> (restore)** — zaxiradan ma'lumotni qaytarish. Ikki tur bor: faylni to'g'ridan
> nusxalash (tez) va SQL matnga eksport (ko'chirishga qulay, o'qish mumkin).

> **Boshlovchilar tez-tez yanglishadigan joy**
>
> Zaxirani **boshqa joyda** saqlang — o'sha kompyuterning o'zida qolsa, disk
> buzilganda u ham yo'qoladi. Muhim loyihada zaxira **muntazam va avtomatik**
> bo'lishi kerak. "Keyin olaman" deb qo'yilgan zaxira — ko'pincha umuman
> olinmaydi.

## Jonli namuna

Quyida `DELETE` ni xavfsiz sinab ko'rishingiz mumkin — bu runner har ishga
tushirishda bazani toza holatga qaytaradi:

```sql
DELETE FROM mahsulotlar;
SELECT * FROM mahsulotlar;
```

Haqiqiy bazada esa bunday "bekor qilish" yo'q — shuning uchun zaxira kerak.

## Amaliy mashq

Zaxira mantiqini tushuning:

1. `SELECT * FROM mahsulotlar;` natijasini ko'ring;
2. `DELETE FROM mahsulotlar;` yozib bajaring;
3. yana `SELECT` qiling — ma'lumot qaytdimi?
4. haqiqiy bazada 2-qadamdan keyin nima bo'lardi?
5. qog'ozda yozing: zaxirasiz ishlashda eng katta xavf nima?
6. `magazin.sql` faylini yuklab olib, uni yangi bazada ishga tushiring —
   bu SQL matndan tiklashning aynan o'zi.

Bu sahifadagi runner har safar toza bazadan boshlaydi — haqiqiy bazada
esa bunday "bekor qilish" tugmasi yo'q.

## Qisqacha xulosa

- **Zaxira** — bazaning yo'qolishdan saqlaydigan nusxasi.
- SQLite'da eng oddiy zaxira — `.db` faylning nusxasini olish.
- `.dump` baza tuzilishi va ma'lumotini **SQL matnga** eksport qiladi.
- Tiklash — SQL faylni yangi bazada ishga tushirish.
- Zaxirani boshqa joyda va muntazam saqlang.

Keyingi darsda [xavfsizlik — SQL injection](https://learncode.uz/sql/sql-injection) — bazani
buzg'unchi kiritmadan himoya qilishni ko'ramiz.
