Monday, December 22, 2025

.::: create Tools Migration from MongoDB to MariaDB using bash shell script :::.

 
1. sample data edb & mariadb

MySQL MariaDB
https://teguhth.blogspot.com/2019/04/study-kasus-praktis-belajar-query-mysql.html

MongoDB
https://teguhth.blogspot.com/2020/12/study-kasus-praktis-belajar-query.html

2. data server A & B 
server A mongodb
ip : 10.10.10.9
db : teguhth
port 27017
user : admin
password : admin

server B Mariadb
ip : 10.10.10.90
db : teguhthedb
port 3306
user : admin
password : admin

buat script shell untuk migrasi dari server A postgres to server B


3. run script migrasi 

sh migrasi_barang_mongo_to_mariadb.sh
sh migrasi_customer_mongo_to_mariadb.sh
sh migrasi_suplier_mongo_to_mariadb.sh
sh migrasi_pasok_mongo_to_mariadb.sh
sh migrasi_pembelian_mongo_to_mariadb.sh

[root@teguhth-all mongo]# pwd
/data/migrasi/mongo
[root@teguhth-all mongo]# sh migrasi_barang_mongo_to_mariadb.sh
== Prepare directory ==
== Export MongoDB ? CSV ==
2025-12-22T15:19:12.978+0700    connected to: mongodb://10.10.10.9:27017/
2025-12-22T15:19:12.981+0700    exported 6 records
== Import CSV ? MariaDB ==
? Migrasi barang selesai
[root@teguhth-all mongo]# sh migrasi_customer_mongo_to_mariadb.sh
== Prepare directory ==
== Export MongoDB ? CSV ==
2025-12-22T15:19:17.843+0700    connected to: mongodb://10.10.10.9:27017/
2025-12-22T15:19:17.846+0700    exported 6 records
== Import CSV ? MariaDB ==
? Migrasi customer selesai
[root@teguhth-all mongo]# sh migrasi_suplier_mongo_to_mariadb.sh
== Prepare directory ==
== Export MongoDB ? CSV ==
2025-12-22T15:19:21.059+0700    connected to: mongodb://10.10.10.9:27017/
2025-12-22T15:19:21.062+0700    exported 6 records
== Import CSV ? MariaDB ==
? Migrasi suplier selesai
[root@teguhth-all mongo]# sh migrasi_pasok_mongo_to_mariadb.sh
== Prepare directory ==
== Export MongoDB ? CSV ==
2025-12-22T15:19:25.214+0700    connected to: mongodb://10.10.10.9:27017/
2025-12-22T15:19:25.217+0700    exported 12 records
== Import CSV ? MariaDB ==
? Migrasi pasok selesai
[root@teguhth-all mongo]# sh migrasi_pembelian_mongo_to_mariadb.sh
== Prepare directory ==
== Export MongoDB ? CSV ==
2025-12-22T15:19:27.692+0700    connected to: mongodb://10.10.10.9:27017/
2025-12-22T15:19:27.695+0700    exported 15 records
== Import CSV ? MariaDB ==
? Migrasi pembelian selesai
[root@teguhth-all mongo]#
 

4. result after migrasi 
 

5. script migrasi table barang 

[root@teguhth-all mongo]# pwd
/data/migrasi/mongo
[root@teguhth-all mongo]# cat migrasi_barang_mongo_to_mariadb.sh
#!/bin/bash

########################################
# CONFIG
########################################

# MongoDB (Server A)
MONGO_HOST="10.10.10.9"
MONGO_PORT="27017"
MONGO_DB="teguhth"
MONGO_USER="admin"
MONGO_PASS="admin"
MONGO_COLLECTION="barang"

# MariaDB (Server B)
MARIA_HOST="10.10.10.90"
MARIA_PORT="3306"
MARIA_DB="mariamongo"
MARIA_USER="admin"
MARIA_PASS="admin"
MARIA_TABLE="barang"

# Temp file
WORKDIR="/data/migrasi/mongo/datatmp"
CSV_FILE="$WORKDIR/barang.csv"

########################################
# PREPARE
########################################
echo "== Prepare directory =="
mkdir -p "$WORKDIR"
rm -f "$CSV_FILE"

########################################
# EXPORT FROM MONGODB
########################################
echo "== Export MongoDB ? CSV =="

mongoexport \
  --host "$MONGO_HOST" \
  --port "$MONGO_PORT" \
  -u "$MONGO_USER" \
  -p "$MONGO_PASS" \
  --authenticationDatabase admin \
  -d "$MONGO_DB" \
  -c "$MONGO_COLLECTION" \
  --type=csv \
  --fields KODE_BARANG,NAMA_BARANG,SATUAN_BARANG,STOK_BARANG \
  --out "$CSV_FILE"

if [ $? -ne 0 ]; then
  echo "? MongoDB export failed"
  exit 1
fi

########################################
# IMPORT TO MARIADB
########################################
echo "== Import CSV ? MariaDB =="

mariadb --local-infile=1 \
  -h "$MARIA_HOST" \
  -P "$MARIA_PORT" \
  -u "$MARIA_USER" \
  -p"$MARIA_PASS" \
  "$MARIA_DB" <<EOF

-- ? CREATE TABLE JIKA BELUM ADA
CREATE TABLE IF NOT EXISTS $MARIA_TABLE (
    KODE_BARANG CHAR(6) NOT NULL,
    NAMA_BARANG VARCHAR(25),
    SATUAN_BARANG VARCHAR(20),
    STOK_BARANG DECIMAL(4),
    PRIMARY KEY (KODE_BARANG)
);

-- ? IMPORT DATA
LOAD DATA LOCAL INFILE '$CSV_FILE'
REPLACE INTO TABLE $MARIA_TABLE
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(KODE_BARANG, NAMA_BARANG, SATUAN_BARANG, STOK_BARANG);

EOF

if [ $? -ne 0 ]; then
  echo "? MariaDB import failed"
  exit 1
fi

########################################
# DONE
########################################
echo "? Migrasi barang selesai"

[root@teguhth-all mongo]#


6. script migrasi table suplier 
[root@teguhth-all mongo]# pwd
/data/migrasi/mongo
[root@teguhth-all mongo]# cat migrasi_suplier_mongo_to_mariadb.sh
#!/bin/bash

########################################
# CONFIG
########################################

# MongoDB (Server A)
MONGO_HOST="10.10.10.9"
MONGO_PORT="27017"
MONGO_DB="teguhth"
MONGO_USER="admin"
MONGO_PASS="admin"
MONGO_COLLECTION="suplier"

# MariaDB (Server B)
MARIA_HOST="10.10.10.90"
MARIA_PORT="3306"
MARIA_DB="mariamongo"
MARIA_USER="admin"
MARIA_PASS="admin"
MARIA_TABLE="suplier"

# Temp file
WORKDIR="/data/migrasi/mongo/datatmp"
CSV_FILE="$WORKDIR/suplier.csv"

########################################
# PREPARE
########################################
echo "== Prepare directory =="
mkdir -p "$WORKDIR"
rm -f "$CSV_FILE"

########################################
# EXPORT FROM MONGODB
########################################
echo "== Export MongoDB ? CSV =="

mongoexport \
  --host "$MONGO_HOST" \
  --port "$MONGO_PORT" \
  -u "$MONGO_USER" \
  -p "$MONGO_PASS" \
  --authenticationDatabase admin \
  -d "$MONGO_DB" \
  -c "$MONGO_COLLECTION" \
  --type=csv \
  --fields KODE_SUPLIER,NAMA_SUPLIER,ALAMAT_SUPLIER,KOTA_SUPLIER,TELEPON_SUPLIER \
  --out "$CSV_FILE"

if [ $? -ne 0 ]; then
  echo "? MongoDB export failed"
  exit 1
fi

########################################
# IMPORT TO MARIADB
########################################
echo "== Import CSV ? MariaDB =="

mariadb --local-infile=1 \
  -h "$MARIA_HOST" \
  -P "$MARIA_PORT" \
  -u "$MARIA_USER" \
  -p"$MARIA_PASS" \
  "$MARIA_DB" <<EOF

-- ? CREATE TABLE JIKA BELUM ADA
CREATE TABLE IF NOT EXISTS $MARIA_TABLE (
    KODE_SUPLIER CHAR(5) NOT NULL,
    NAMA_SUPLIER VARCHAR(30),
    ALAMAT_SUPLIER VARCHAR(30),
    KOTA_SUPLIER VARCHAR(15),
    TELEPON_SUPLIER VARCHAR(15),
    PRIMARY KEY (KODE_SUPLIER)
);

-- ? IMPORT DATA
LOAD DATA LOCAL INFILE '$CSV_FILE'
REPLACE INTO TABLE $MARIA_TABLE
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
  KODE_SUPLIER,
  NAMA_SUPLIER,
  ALAMAT_SUPLIER,
  KOTA_SUPLIER,
  TELEPON_SUPLIER
);

EOF

if [ $? -ne 0 ]; then
  echo "? MariaDB import failed"
  exit 1
fi

########################################
# DONE
########################################
echo "? Migrasi suplier selesai"

[root@teguhth-all mongo]#


7. script migrasi table customer 

[root@teguhth-all mongo]# cat migrasi_customer_mongo_to_mariadb.sh
#!/bin/bash

########################################
# CONFIG
########################################

# MongoDB (Server A)
MONGO_HOST="10.10.10.9"
MONGO_PORT="27017"
MONGO_DB="teguhth"
MONGO_USER="admin"
MONGO_PASS="admin"
MONGO_COLLECTION="customer"

# MariaDB (Server B)
MARIA_HOST="10.10.10.90"
MARIA_PORT="3306"
MARIA_DB="mariamongo"
MARIA_USER="admin"
MARIA_PASS="admin"
MARIA_TABLE="customer"

# Temp file
WORKDIR="/data/migrasi/mongo/datatmp"
CSV_FILE="$WORKDIR/customer.csv"

########################################
# PREPARE
########################################
echo "== Prepare directory =="
mkdir -p "$WORKDIR"
rm -f "$CSV_FILE"

########################################
# EXPORT FROM MONGODB
########################################
echo "== Export MongoDB ? CSV =="

mongoexport \
  --host "$MONGO_HOST" \
  --port "$MONGO_PORT" \
  -u "$MONGO_USER" \
  -p "$MONGO_PASS" \
  --authenticationDatabase admin \
  -d "$MONGO_DB" \
  -c "$MONGO_COLLECTION" \
  --type=csv \
  --fields KODE_CUSTOMER,NAMA_CUSTOMER,ALAMAT_CUSTOMER,KOTA_CUSTOMER,TELEPON_CUSTOMER \
  --out "$CSV_FILE"

if [ $? -ne 0 ]; then
  echo "? MongoDB export failed"
  exit 1
fi

########################################
# IMPORT TO MARIADB
########################################
echo "== Import CSV ? MariaDB =="

mariadb --local-infile=1 \
  -h "$MARIA_HOST" \
  -P "$MARIA_PORT" \
  -u "$MARIA_USER" \
  -p"$MARIA_PASS" \
  "$MARIA_DB" <<EOF

-- ? CREATE TABLE JIKA BELUM ADA
CREATE TABLE IF NOT EXISTS $MARIA_TABLE (
    KODE_CUSTOMER CHAR(6) NOT NULL,
    NAMA_CUSTOMER VARCHAR(30),
    ALAMAT_CUSTOMER VARCHAR(30),
    KOTA_CUSTOMER VARCHAR(15),
    TELEPON_CUSTOMER VARCHAR(15),
    PRIMARY KEY (KODE_CUSTOMER)
);

-- ? IMPORT DATA
LOAD DATA LOCAL INFILE '$CSV_FILE'
REPLACE INTO TABLE $MARIA_TABLE
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
  KODE_CUSTOMER,
  NAMA_CUSTOMER,
  ALAMAT_CUSTOMER,
  KOTA_CUSTOMER,
  TELEPON_CUSTOMER
);

EOF

if [ $? -ne 0 ]; then
  echo "? MariaDB import failed"
  exit 1
fi

########################################
# DONE
########################################
echo "? Migrasi customer selesai"

[root@teguhth-all mongo]#


8. script migrasi table pasok
[root@teguhth-all mongo]# pwd
/data/migrasi/mongo
[root@teguhth-all mongo]# cat migrasi_pasok_mongo_to_mariadb.sh
#!/bin/bash

########################################
# CONFIG
########################################

# MongoDB (Server A)
MONGO_HOST="10.10.10.9"
MONGO_PORT="27017"
MONGO_DB="teguhth"
MONGO_USER="admin"
MONGO_PASS="admin"
MONGO_COLLECTION="pasok"

# MariaDB (Server B)
MARIA_HOST="10.10.10.90"
MARIA_PORT="3306"
MARIA_DB="mariamongo"
MARIA_USER="admin"
MARIA_PASS="admin"
MARIA_TABLE="pasok"

# Temp file
WORKDIR="/data/migrasi/mongo/datatmp"
CSV_FILE="$WORKDIR/pasok.csv"

########################################
# PREPARE
########################################
echo "== Prepare directory =="
mkdir -p "$WORKDIR"
rm -f "$CSV_FILE"

########################################
# EXPORT FROM MONGODB
########################################
echo "== Export MongoDB ? CSV =="

mongoexport \
  --host "$MONGO_HOST" \
  --port "$MONGO_PORT" \
  -u "$MONGO_USER" \
  -p "$MONGO_PASS" \
  --authenticationDatabase admin \
  -d "$MONGO_DB" \
  -c "$MONGO_COLLECTION" \
  --type=csv \
  --fields KODE_PASOK,KODE_BARANG,KODE_SUPLIER,TANGGAL_PASOK,JUMLAH_PASOK \
  --out "$CSV_FILE"

if [ $? -ne 0 ]; then
  echo "? MongoDB export failed"
  exit 1
fi

########################################
# IMPORT TO MARIADB
########################################
echo "== Import CSV ? MariaDB =="

mariadb --local-infile=1 \
  -h "$MARIA_HOST" \
  -P "$MARIA_PORT" \
  -u "$MARIA_USER" \
  -p"$MARIA_PASS" \
  "$MARIA_DB" <<EOF

-- ? CREATE TABLE JIKA BELUM ADA
CREATE TABLE IF NOT EXISTS pasok (
    KODE_PASOK CHAR(10) NOT NULL,
    KODE_BARANG CHAR(6) NOT NULL,
    KODE_SUPLIER CHAR(5) NOT NULL,
    TANGGAL_PASOK DATE,
    JUMLAH_PASOK DECIMAL(4),
    PRIMARY KEY (KODE_PASOK, KODE_BARANG, KODE_SUPLIER),
    CONSTRAINT fk_pasok_barang
        FOREIGN KEY (KODE_BARANG) REFERENCES barang(KODE_BARANG),
    CONSTRAINT fk_pasok_suplier
        FOREIGN KEY (KODE_SUPLIER) REFERENCES suplier(KODE_SUPLIER)
);

-- ?? Matikan FK check sementara
SET FOREIGN_KEY_CHECKS=0;

LOAD DATA LOCAL INFILE '$CSV_FILE'
REPLACE INTO TABLE pasok
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
  KODE_PASOK,
  KODE_BARANG,
  KODE_SUPLIER,
  @TANGGAL_PASOK,
  JUMLAH_PASOK
)
SET TANGGAL_PASOK = STR_TO_DATE(@TANGGAL_PASOK, '%e-%b-%y');

SET FOREIGN_KEY_CHECKS=1;

EOF

if [ $? -ne 0 ]; then
  echo "? MariaDB import failed"
  exit 1
fi

########################################
# DONE
########################################
echo "? Migrasi pasok selesai"

[root@teguhth-all mongo]#



9. script migrasi table pembelian
[root@teguhth-all mongo]# pwd
/data/migrasi/mongo
[root@teguhth-all mongo]# cat migrasi_pembelian_mongo_to_mariadb.sh
#!/bin/bash

########################################
# CONFIG
########################################

# MongoDB (Server A)
MONGO_HOST="10.10.10.9"
MONGO_PORT="27017"
MONGO_DB="teguhth"
MONGO_USER="admin"
MONGO_PASS="admin"
MONGO_COLLECTION="pembelian"

# MariaDB (Server B)
MARIA_HOST="10.10.10.90"
MARIA_PORT="3306"
MARIA_DB="mariamongo"
MARIA_USER="admin"
MARIA_PASS="admin"
MARIA_TABLE="pembelian"

# Temp file
WORKDIR="/data/migrasi/mongo/datatmp"
CSV_FILE="$WORKDIR/pembelian.csv"

########################################
# PREPARE
########################################
echo "== Prepare directory =="
mkdir -p "$WORKDIR"
rm -f "$CSV_FILE"

########################################
# EXPORT FROM MONGODB
########################################
echo "== Export MongoDB ? CSV =="

mongoexport \
  --host "$MONGO_HOST" \
  --port "$MONGO_PORT" \
  -u "$MONGO_USER" \
  -p "$MONGO_PASS" \
  --authenticationDatabase admin \
  -d "$MONGO_DB" \
  -c "$MONGO_COLLECTION" \
  --type=csv \
  --fields KODE_PEMBELIAN,KODE_BARANG,KODE_CUSTOMER,TANGGAL_PEMBELIAN,JUMLAH_PEMBELIAN \
  --out "$CSV_FILE"

if [ $? -ne 0 ]; then
  echo "? MongoDB export failed"
  exit 1
fi

########################################
# IMPORT TO MARIADB
########################################
echo "== Import CSV ? MariaDB =="

mariadb --local-infile=1 \
  -h "$MARIA_HOST" \
  -P "$MARIA_PORT" \
  -u "$MARIA_USER" \
  -p"$MARIA_PASS" \
  "$MARIA_DB" <<EOF

-- ?? Pastikan parent table sudah ada
-- barang(KODE_BARANG)
-- customer(KODE_CUSTOMER)

-- ? CREATE TABLE JIKA BELUM ADA
CREATE TABLE IF NOT EXISTS pembelian (
    KODE_PEMBELIAN CHAR(10) NOT NULL,
    KODE_BARANG CHAR(6) NOT NULL,
    KODE_CUSTOMER CHAR(6) NOT NULL,
    TANGGAL_PEMBELIAN DATE,
    JUMLAH_PEMBELIAN DECIMAL(4),
    PRIMARY KEY (KODE_PEMBELIAN, KODE_BARANG, KODE_CUSTOMER),
    CONSTRAINT fk_pembelian_barang
        FOREIGN KEY (KODE_BARANG) REFERENCES barang(KODE_BARANG),
    CONSTRAINT fk_pembelian_customer
        FOREIGN KEY (KODE_CUSTOMER) REFERENCES customer(KODE_CUSTOMER)
);

-- ?? Matikan FK sementara
SET FOREIGN_KEY_CHECKS=0;

-- ? LOAD DATA + konversi tanggal
LOAD DATA LOCAL INFILE '$CSV_FILE'
REPLACE INTO TABLE pembelian
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
  KODE_PEMBELIAN,
  KODE_BARANG,
  KODE_CUSTOMER,
  @TANGGAL_PEMBELIAN,
  JUMLAH_PEMBELIAN
)
SET TANGGAL_PEMBELIAN = STR_TO_DATE(@TANGGAL_PEMBELIAN, '%e-%b-%y');

SET FOREIGN_KEY_CHECKS=1;

EOF

if [ $? -ne 0 ]; then
  echo "? MariaDB import failed"
  exit 1
fi

########################################
# DONE
########################################
echo "? Migrasi pembelian selesai"

[root@teguhth-all mongo]#



No comments:

Post a Comment

Popular Posts