add docker for local and production
This commit is contained in:
169
DATABASE-IMPORT-GUIDE.md
Normal file
169
DATABASE-IMPORT-GUIDE.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# 📊 Database Import Guide untuk CKB Laravel Application
|
||||
|
||||
## 🚀 Quick Start (Paling Mudah)
|
||||
|
||||
Jika Anda baru pertama kali setup aplikasi:
|
||||
|
||||
```bash
|
||||
# Jalankan quick setup yang otomatis import database
|
||||
./docker-quick-setup.sh dev
|
||||
```
|
||||
|
||||
## 📥 Manual Import Database
|
||||
|
||||
### 1. Import ke Development Environment
|
||||
|
||||
```bash
|
||||
# Pastikan containers berjalan terlebih dahulu
|
||||
./docker-start.sh dev up
|
||||
|
||||
# Import database ckb.sql
|
||||
./docker-import-db.sh dev
|
||||
|
||||
# Atau import file SQL lain
|
||||
./docker-import-db.sh dev nama-file-backup.sql
|
||||
```
|
||||
|
||||
### 2. Import ke Production Environment
|
||||
|
||||
```bash
|
||||
# Start production environment
|
||||
./docker-start.sh prod up
|
||||
|
||||
# Import database
|
||||
./docker-import-db.sh prod
|
||||
|
||||
# Atau dengan file khusus
|
||||
./docker-import-db.sh prod production-backup.sql
|
||||
```
|
||||
|
||||
## 🔄 Auto Import (Recommended untuk First Time Setup)
|
||||
|
||||
Ketika Anda menjalankan Docker containers untuk pertama kali, file `ckb.sql` akan otomatis diimport ke database. Ini terjadi karena:
|
||||
|
||||
1. File `ckb.sql` di-mount ke `/docker-entrypoint-initdb.d/01-init.sql` di MySQL container
|
||||
2. MySQL otomatis menjalankan semua file `.sql` di direktori tersebut saat inisialisasi
|
||||
3. Auto import hanya terjadi jika database kosong/belum ada
|
||||
|
||||
## 🛠️ Troubleshooting Import
|
||||
|
||||
### Problem: Database tidak terimport otomatis
|
||||
|
||||
**Solusi:**
|
||||
```bash
|
||||
# 1. Stop containers
|
||||
docker-compose down
|
||||
|
||||
# 2. Hapus volume database (HATI-HATI: akan hapus data!)
|
||||
docker-compose down -v
|
||||
|
||||
# 3. Start ulang (akan trigger auto import)
|
||||
docker-compose up -d
|
||||
|
||||
# 4. Atau import manual
|
||||
./docker-import-db.sh dev
|
||||
```
|
||||
|
||||
### Problem: Permission denied saat import
|
||||
|
||||
**Solusi:**
|
||||
```bash
|
||||
# Pastikan script executable
|
||||
chmod +x docker-import-db.sh
|
||||
chmod +x docker-quick-setup.sh
|
||||
|
||||
# Pastikan file SQL readable
|
||||
chmod 644 ckb.sql
|
||||
```
|
||||
|
||||
### Problem: Database terlalu besar, import timeout
|
||||
|
||||
**Solusi:**
|
||||
```bash
|
||||
# Import langsung ke container dengan timeout yang lebih besar
|
||||
docker-compose exec -T db mysql -u root -proot ckb_db < ckb.sql
|
||||
|
||||
# Atau split file SQL jika sangat besar
|
||||
split -l 10000 ckb.sql ckb_split_
|
||||
# Kemudian import satu per satu
|
||||
```
|
||||
|
||||
## 📋 Verifikasi Import Berhasil
|
||||
|
||||
### 1. Cek via phpMyAdmin
|
||||
- Buka http://localhost:8080
|
||||
- Login dengan: server=db, username=root, password=root
|
||||
- Pilih database `ckb_db`
|
||||
- Lihat tabel yang sudah terimport
|
||||
|
||||
### 2. Cek via Command Line
|
||||
```bash
|
||||
# Lihat daftar tabel
|
||||
docker-compose exec db mysql -u root -proot -e "USE ckb_db; SHOW TABLES;"
|
||||
|
||||
# Hitung jumlah tabel
|
||||
docker-compose exec db mysql -u root -proot -e "USE ckb_db; SELECT COUNT(*) as total_tables FROM information_schema.tables WHERE table_schema='ckb_db';"
|
||||
|
||||
# Lihat contoh data dari salah satu tabel
|
||||
docker-compose exec db mysql -u root -proot -e "USE ckb_db; SELECT * FROM users LIMIT 5;"
|
||||
```
|
||||
|
||||
### 3. Test Aplikasi Laravel
|
||||
```bash
|
||||
# Cek koneksi database dari Laravel
|
||||
docker-compose exec app php artisan tinker
|
||||
# Di dalam tinker:
|
||||
# DB::connection()->getPdo();
|
||||
# \App\Models\User::count();
|
||||
```
|
||||
|
||||
## 💾 Backup Database
|
||||
|
||||
### Backup Development
|
||||
```bash
|
||||
# Backup dengan timestamp
|
||||
docker-compose exec db mysqldump -u root -proot ckb_db > backup_dev_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
# Backup sederhana
|
||||
docker-compose exec db mysqldump -u root -proot ckb_db > backup_current.sql
|
||||
```
|
||||
|
||||
### Backup Production
|
||||
```bash
|
||||
# Backup production database
|
||||
docker-compose -f docker-compose.prod.yml exec db mysqldump -u root -p ckb_production > backup_prod_$(date +%Y%m%d_%H%M%S).sql
|
||||
```
|
||||
|
||||
## 🔄 Replace Database dengan Backup Baru
|
||||
|
||||
```bash
|
||||
# 1. Backup database saat ini (safety)
|
||||
docker-compose exec db mysqldump -u root -proot ckb_db > backup_before_replace.sql
|
||||
|
||||
# 2. Import database baru
|
||||
./docker-import-db.sh dev new-backup.sql
|
||||
|
||||
# 3. Clear Laravel cache
|
||||
docker-compose exec app php artisan cache:clear
|
||||
docker-compose exec app php artisan config:clear
|
||||
```
|
||||
|
||||
## 📝 Notes Penting
|
||||
|
||||
1. **File ckb.sql**: Pastikan file ini selalu ada di root project untuk auto-import
|
||||
2. **Backup Safety**: Script import otomatis membuat backup sebelum replace database
|
||||
3. **Environment**: Selalu pastikan Anda menggunakan environment yang benar (dev/prod)
|
||||
4. **Permissions**: Database user harus punya permission CREATE, DROP, INSERT untuk import
|
||||
5. **Size Limit**: File SQL besar (>100MB) mungkin perlu setting timeout MySQL yang lebih besar
|
||||
|
||||
## 🎯 Best Practices
|
||||
|
||||
1. **Selalu backup** sebelum import database baru
|
||||
2. **Test di development** dulu sebelum import ke production
|
||||
3. **Gunakan quick setup** untuk setup pertama kali
|
||||
4. **Monitor logs** saat import: `docker-compose logs -f db`
|
||||
5. **Verify data** setelah import berhasil
|
||||
|
||||
---
|
||||
|
||||
**Untuk bantuan lebih lanjut, lihat file `DOCKER-README.md` atau `docker-import-db.sh --help`**
|
||||
Reference in New Issue
Block a user