Import & Export Database MySql Using CLI
Tags: database, mysql, linux, cli
Published: 2023-12-28 14:09:40

Postingan ini akan membahas Import dan Export database via CLI. Sebenarnya banyak cara mudah untuk melakukan hal tersebut, bisa menggunakan phpmyadmin, dbeaver, mysql workbench, mysqlyogs dll.
Tapi pada postingan ini kita bahas menggunakan CLI mode.

#### Export Database
Berikut syntax untuk export database

```
mysqldump -u nama_user -p nama_database > output_file.sql
```

Untuk basic syntaknya seperti contoh di atas. Tapi pada contoh diatas adalah `mysql-server` berada di server yang sama dengan `mysql-client`. Tambahkan opsi `-h` untuk host jika `mysql-server` berada di server yang berbeda dengan `mysql-client` kita.
```
mysqldump -u nama_user -h ip_address -p nama_database > output_file.sql
```

Tapi kadang kala kita butuh untuk automation sehingga akan sulit ketika harus memasukan password secara manual, nah pada kasus tersebeut kita bisa menggunakan parameter `--defaults-extra-file`. Dengan metode ini kita buat file `.cnf` yang berisi kredensial dari mysqlnya, contohnya seperti berikut

```js
[client]
user=root
password=qwerty
host=127.0.0.1
port=3306
```
kita asumsikan filenya bernama `file.cnf` dan berikut cara menggunakanaya.

```
mysqldump --defaults-extra-file=file.cnf nama_database > output_file.sql
```
Perhatikan juga lock table saat mengexport database, untuk mengatasi hal tersebut tambahkan beberapa osi berikut

```
mysqldump --defaults-extra-file=file.cnf nama_database --single-transaction --no-tablespaces --column-statistics=0 > output_file.sql
```
Berikut penjelasanya:
**--single-transaction**: Opsi ini digunakan untuk memastikan bahwa mysqldump menggunakan transaksi tunggal saat mengambil salinan dari database. Ini berguna terutama ketika kita ingin mengamankan database tanpa memblokir tabel dan memungkinkan operasi baca dan tulis normal terus berlanjut selama proses pencadangan.

**--no-tablespaces**: Opsi ini menginstruksikan mysqldump untuk tidak menyertakan informasi tabel ruang tabel (tablespace) dalam perintah pencadangan. Tablespace adalah tempat penyimpanan fisik untuk tabel dalam MySQL. Dengan menggunakan opsi ini, pencadangan akan lebih independen dari lokasi fisik tabel.

**--column-statistics=0**: Opsi ini digunakan untuk mengatur jumlah kolom statistik yang disertakan dalam perintah pencadangan. Dengan nilai 0, mysqldump akan mengabaikan statistik kolom. Statistik kolom menyimpan informasi tentang distribusi data dalam kolom, dan ini dapat membantu optimizer dalam perencanaan eksekusi query. Namun, dalam beberapa kasus, terutama untuk database besar, menyertakan statistik kolom dapat meningkatkan ukuran pencadangan secara signifikan.

Nah, atau bisa juga lock table dengan menambahkan parameter `--lock-table=false`, seperti berikut

```
mysqldump --defaults-extra-file=file.cnf nama_database --lock-table=false > output_file.sql
```
Kita juga bisa mengexport data pertabel dengan syntax berikut

```
mysqldump -u nama_user -p nama_database nama_tabel > output_file.sql
```
#### Import Database

Berikut syntax untuk mengimport file `.sql`

```
mysql -u nama_user -p nama_database < file.sql
```
Basic syntaxnya seperti contoh diatas, selebihnya saya tidak akan menjelaskan panjang lebar, silakan teman-teman coba.
Selamat mencoba.