Panduan Praktis Cara Hosting MariaDB

Pendahuluan

Setelah melakukan sedikit eksperimen, saya telah menjalankan instance dari rilis stabil terbaru MariaDB di ContainerStation dan ingin membagikan beberapa pelajaran yang saya dapatkan. Untuk memverifikasi keberhasilan deployment, proses ini juga melibatkan hal-hal berikut:-

  • Membuat pengguna layanan khusus, backup, dengan izin terbatas untuk peran tersebut

  • Membuat koneksi jarak jauh melalui PHPMyAdmin

  • Membuat database uji coba dan melakukan backup uji coba

  • Menghapus sebuah record dari database uji coba dan melakukan restore uji coba

  • Menulis dan menguji skrip yang akan digunakan untuk mengotomatisasi backup database

  • Mendaftarkan skrip ke scheduler bawaan QTS (crontab) untuk otomatisasi penuh

Setelah posting awal ini, Anda akan menemukan serangkaian ‘balasan’ yang akan memandu Anda melalui proses ini, langkah demi langkah.

Sebelum Anda membaca lebih lanjut, ada disclaimer penting: Saya bukan karyawan QNAP atau MariaDB, saya bukan DBA profesional. Saya adalah seorang teknolog yang cukup kompeten dan nyaman bekerja di command line (Linux), menggunakan SSH, dan bereksperimen. Saya bukan ahli dalam elemen-elemen yang akan saya bahas, tetapi saya telah cukup bereksperimen untuk membuat semuanya berjalan. Harap ingat hal ini saat membaca panduan ini – dan tolong balas jika Anda menemukan kesalahan atau peluang perbaikan. Harap juga diingat bahwa meskipun tidak ada yang secara faktual salah di bawah ini \[berdasarkan bahwa saya telah membuat semuanya berjalan seperti yang dijelaskan\] itu tidak berarti bahwa panduan ini mendefinisikan pendekatan terbaik. Anggaplah ini sebagai permulaan, atau titik awal, untuk memberi Anda gambaran dasar dan membiarkan Anda menentukan bagaimana dan di mana ingin menjelajah lebih lanjut. Ketika menerima saran dari seseorang yang menulis posting di internet, Anda harus selalu mempertimbangkan sumbernya.

Namun sebelum kita masuk ke bagian yang menyenangkan, kita perlu bertanya dan menjawab tiga pertanyaan penting. Pertama adalah: Karena QNAP sudah menyediakan MariaDB sebagai aplikasi native yang berjalan di QTS, mengapa kita perlu atau ingin menginstalnya di ContainerStation? Bukankah itu hanya menambah lapisan overhead yang tidak kita perlukan?

Ini adalah pertanyaan penting dan penting untuk kita pertimbangkan dan hanya melanjutkan jika kita memiliki alasan yang sah untuk melakukannya. Singkatnya, tiga jawaban afirmatif yang paling mungkin untuk pertanyaan ini adalah:-

  • Jika Anda tahu pada saat instalasi bahwa Anda akan perlu memindahkan instance MariaDB Anda ke platform hardware lain dalam waktu dekat – karena mengekspor sebuah container, membawanya ke tempat lain lalu mengimpornya jauh lebih mudah daripada melakukan banyak instalasi dan mungkin mengarsipkan serta memulihkan banyak database…

  • Jika Anda menemukan bahwa aplikasi yang ingin Anda deploy ke MariaDB memiliki kebutuhan fitur yang tidak tersedia di versi native QNAP/QTS dari aplikasi tersebut. (Ini terjadi pada saya – saya mulai bekerja dengan BookStack, yang ingin menggunakan karakter set utf8mb4, yang tidak tersedia di versi MariaDB yang saat ini didukung oleh QNAP \[10.5.8 pada saat penulisan\]).

  • Jika NAS Anda tidak menjalankan fungsi produksi atau misi kritis dan aman untuk bereksperimen – dan jika Anda sudah mendapat izin dari manajer terkait, atau Anda memiliki wewenang untuk melakukan pekerjaan tersebut. \[Tidak ada yang akan kita lakukan yang secara inheren berbahaya, tapi lebih baik aman daripada menyesal\].

Pertanyaan kedua yang harus kita ajukan adalah: Apa opsi lain – selain menggunakan ContainerStation – yang ada?

Saat saya mencari, saya menemukan dua alternatif utama: menjalankan MariaDB di host lain; atau, alih-alih menggunakan ContainerStation, menggunakan VirtualizationStation dari QNAP. Saya tidak ingin mengalihkan fokus dari tugas utama, tapi saya rasa penting untuk menanggapi dua alternatif ini:-

  • Saya memutuskan untuk tetap menghosting MariaDB di QNAP NAS saya karena perlindungan integritas data yang diberikan (volume RAID-6; milik saya didukung oleh UPS yang sangat mumpuni) dan karena setiap host “kedua”, apapun itu, akan membawa lebih banyak hardware untuk dirawat, OS dan stack lain untuk dirawat, serta tentu saja konsumsi listrik yang lebih besar.

  • Saya memang melihat VirtualizationStation dan saya sangat tertarik serta akan bereksperimen lebih lanjut. Di sisi positif, VS memungkinkan saya beroperasi seolah-olah saya memiliki hardware terpisah tanpa overhead – dan khususnya akan menyederhanakan backup/administrasi MariaDB, memungkinkan manajemen kerentanan dan update yang lebih efektif… Di sisi negatif, saya bisa mengatasi masalah kerentanan dengan cara lain… dan VS mengonsumsi lebih banyak sumber daya NAS daripada ContainerStation.

Kasus penggunaan Anda hampir pasti akan berbeda – dan mungkin unik – jadi sebelum berinvestasi dalam solusi yang dijelaskan di sini, pastikan itu yang tepat untuk Anda. Khususnya, pikirkan tentang kompleksitas patching update pada kode yang berjalan di ContainerStation. Apakah implementasi Anda berisiko tinggi? Jika ya, pikirkan itu baik-baik.

Oke, jika saya belum membuat Anda mundur… mari kita mulai!

Kami sangat menghargai berbagi detail dari Anda! Komunitas kami jelas membutuhkan lebih banyak kontribusi bermanfaat seperti ini.

Saya juga akan meminta tim internal kami untuk mencoba konfigurasi berdasarkan pengaturan Anda.

Sekali lagi, terima kasih sebesar-besarnya atas usaha dan kontribusi Anda!

00a. Sebelum Kita Mulai – Persiapan dan Peringatan

Mari kita mulai dengan peringatannya terlebih dahulu:

Di sini ada naga.

Implementasi penuh dari panduan ini akan mengharuskan Anda mengakses QNAP NAS Anda melalui SSH \[serta antarmuka web admin\], mengedit infrastruktur lokal \[khususnya crontab, mungkin juga share lokal\] serta melakukan instalasi dan konfigurasi perangkat lunak ke NAS Anda.

Jika Anda tidak benar-benar nyaman dengan semua praktik ini, silakan berhenti di sini*.*

Saya telah menguji semua langkah yang dijelaskan dalam panduan ini… dan semuanya bekerja untuk pengaturan pribadi saya. Untuk memperjelas, komponen yang saya gunakan untuk menyusun catatan ini meliputi:-

  • QNAP NAS – dalam kasus saya, saya menggunakan salah satu TVS-672XT saya, menjalankan QTS 5.2.7.3256

  • Desktop workstation – dalam kasus saya, PC rakitan sendiri yang menjalankan Mint Linux 21.3

  • Salinan PHPMyAdmin 5.2.1 – dalam kasus saya berjalan di Raspberry Pi (4B)
    \[Tidak ada alasan mengapa Anda tidak bisa mengganti misalnya MySQL Workbench sebagai pengganti PHPMyAdmin – pada dasarnya Anda hanya membutuhkan klien untuk membuat DB uji dan mengisinya dengan sebuah tabel dan beberapa data dummy\].

  • Akun non-“Admin” di QNAP NAS Anda. Anda punya akun yang Anda gunakan untuk semua pekerjaan dasar QNAP, bukan? Anda tidak menggunakan akun “Admin” bawaan untuk segalanya… dan mengambil risiko terkunci dari NAS Anda jika sesuatu yang tidak terduga terjadi…? Hanya memastikan saja…

  • Alamat IP statis. Kita akan menetapkan Alamat IP khusus (statis) untuk container MariaDB kita. Ini karena kita tidak ingin harus mengonfigurasi ulang mesin klien jika Lease DHCP berakhir dan alamat IP yang berbeda diberikan – dan tentu saja karena kita ingin mengakses MariaDB dari host lain di jaringan kita, bukan hanya QNAP NAS itu sendiri.

00b. Sebelum Kita Mulai – Kebutuhan Pengumpulan Data

Mari kita ajukan pertanyaan penting: mengingat seluruh tujuan dari teknologi berbasis container adalah bahwa sebuah image container bersifat mandiri, dengan semua yang dibutuhkan untuk menjalankan sebuah program; dan mengingat bahwa sebagai hasilnya batasan container memang dirancang untuk tidak dilintasi, bagaimana tepatnya kita akan mencadangkan data MariaDB kita? Sejauh ini saya menemukan tiga kemungkinan jawaban atas pertanyaan ini:-

  • Anda bisa menghentikan seluruh container dan mengekspornya ke file tar – lalu mendaftarkan image tar tersebut ke solusi backup konvensional (misal, HBS3), atau menyalinnya ke lokasi lain di NAS yang berbeda atau drive eksternal. Ini sangat andal, namun berarti semua database yang Anda jalankan tidak akan dapat diakses selama proses backup berlangsung – dan semakin banyak serta semakin besar data yang Anda miliki, semakin lama waktu downtime-nya.

  • Anda dapat menjalankan perintah mariadb-dump pada database yang sedang berjalan [database Anda] (yang memakan waktu lebih singkat dan menghasilkan file yang lebih kecil), lalu menggunakan perintah “docker cp” untuk menyalin file hasil ekstrak melintasi batas container ke sistem file QTS asli Anda. Ini sama andalnya dan mungkin sedikit lebih cepat, tetapi sebagian ruang disk yang dihemat pada file dump “.sql” per-Database bisa hilang karena Anda akan memiliki dua file backup (hasil ekstrak di dalam container MariaDB – dan hasil ekstrak di luar container MariaDB) kecuali Anda melakukan housekeeping tambahan.

  • Terakhir, Anda dapat – pada saat membuat container Anda, dan hanya saat itu – membuat jembatan logis yang terbuka secara permanen antara sistem file container dan sistem file QTS [NAS] asli. Ini memungkinkan Anda menjalankan perintah mariadb-dump serupa seperti pada opsi kedua, namun file output dapat langsung ditulis ke sistem file QTS asli, tanpa perlu membuat salinan lokal di dalam container lalu “docker cp” file tersebut melintasi batas container. Singkatnya, ini adalah solusi yang secara teknis paling sederhana, namun memang menciptakan “jembatan” terbuka secara permanen antara kedua sistem file.

Jelas, saya tidak bisa mengambil keputusan ini untuk Anda. Namun jika kita ingin mengambil opsi ketiga – pilihan pribadi saya – maka kita perlu mendapatkan informasi tentang sistem file yang sebenarnya di dalam container MariaDB yang sudah terpasang – agar kita tahu titik penghubung untuk ‘jembatan’ sistem file kita dan kita membutuhkannya sebelum kita membuat container MariaDB kita! Namun untuk melakukan itu, kita perlu melihat “ke dalam” container MariaDB resmi – dan saya menemukan dua cara mungkin untuk mencapainya, namun hanya satu yang berhasil.

Metode yang tidak berhasil [silakan Anda coba sendiri] adalah menggunakan skrip yang mengimplementasikan Docker API dan menggunakannya untuk mengekstrak image. Ini tautannya ke salah satu yang saya coba dan gagal, yang menggunakan Docker API untuk mengunduh image Docker ke sistem file lokal Anda, tanpa perlu menginstal docker. Mungkin Anda akan lebih berhasil dari saya…

Solusi saya melibatkan beberapa langkah lagi, namun sederhana dan andal: lakukan instalasi percobaan MariaDB dari docker; jelajahi image yang terpasang untuk mendapatkan informasi yang kita butuhkan; lalu hapus image dan lakukan instalasi bersih, kali ini dengan parameter yang ingin kita sertakan saat pembuatan container.

Jujur saja, setelah Anda melewati berbagai masalah awal dari solusi skrip pihak ke-3, Anda mungkin sama saja melakukan deployment “pilot” langsung dari Docker Hub. Silakan pilih sesuai kebutuhan Anda.

Perlu dicatat bahwa setelah Anda menggunakan ContainerStation untuk membuat container, satu-satunya cara untuk beralih ke atau dari opsi ketiga adalah dengan menghapus dan membuat ulang container tersebut. Jadi, mohon luangkan waktu untuk mengambil keputusan yang tepat…

Sisa panduan ini akan membahas ketiga opsi tersebut, jadi mohon perhatikan secara khusus saat masing-masing dibahas.

01. Memilih Kontainer MariaDB yang Tepat

Mungkin tidak mengejutkan jika Tim MariaDB memiliki satu file image kontainer untuk setiap versi produk mereka yang didukung. Ini memberi kita tiga pertanyaan penting yang harus dijawab sebelum kita bisa mulai:

  • Bagaimana kita tahu bahwa image Docker MariaDB yang ingin kita instal adalah file resmi dan bukan salinan yang telah dimodifikasi secara jahat?

  • Apakah ada versi spesifik MariaDB yang memang perlu kita instal?

  • Setelah kita menentukan versi MariaDB yang kita inginkan, bagaimana cara memberi tahu ContainerStation versi mana yang kita inginkan, sehingga yang terpasang benar-benar sesuai?

Pertanyaan pertama adalah yang paling mudah dijawab: ContainerStation sudah diatur untuk mengambil semua file image Docker langsung dari “hub.docker.com”, Repositori Docker resmi. Jika Anda tidak siap untuk mempercayai ContainerStation dalam melakukan itu dengan andal, maka dengan sangat hormat saya sarankan Anda berhenti membaca di sini, karena membahas kekhawatiran tersebut di luar cakupan panduan ini.

Pertanyaan kedua sebenarnya bukan sesuatu yang bisa saya jawab untuk Anda, karena jawabannya sepenuhnya tergantung pada kebutuhan penggunaan Anda. Namun, saya bisa membagikan beberapa tips. Seperti yang akan kita lihat, pihak yang bertanggung jawab atas file image MariaDB telah membuat dua image dengan nama khusus, yaitu “mariadb-latest” dan “mariadb-lts”, di mana “lts” berarti “Long Term Support” (Dukungan Jangka Panjang). Jika Anda membutuhkan rilis stabil terbaru, atau yang memiliki dukungan jangka panjang, Anda sebaiknya memilih salah satu dari dua image tersebut.

Untuk memeriksa ketersediaan image MariaDB tertentu (dan resmi!), pertama, buka tab di browser Anda dan kunjungi “https://hub.docker.com/”. Jika URL sebelum kalimat ini merupakan hyperlink aktif, mohon pastikan Anda memeriksa bar lokasi browser dan sertifikat situs untuk memastikan Anda berada di situs Docker resmi. Setelah itu, Anda akan menemukan dua cara untuk mendapatkan data yang kita butuhkan.

Cara pertama adalah melihat ke margin kiri halaman utama. Pada bagian berjudul “Trusted content”, Anda akan melihat tautan dengan judul “Docker Official Images”. Saat saya mengikuti tautan itu pada November 2025, saya diarahkan ke halaman “search results” yang dimulai dengan “1 – 30 of 178 available results” – dan image MariaDB ada di baris ke-6th. Sebagai alternatif, kita bisa menggunakan kolom pencarian situs web (di menu/ navigasi horizontal atas) dan masukkan “MariaDB” sebagai kata kunci pencarian.

Anda akan menemukan bahwa sebenarnya ada beberapa paket MariaDB yang berbeda (misalnya saya melihat “mariadb”, “mariadb/maxscale”, dll.) yang ditawarkan di Docker Hub. Kita perlu memilih yang pertama, yaitu “mariadb”. Seharusnya mudah dikenali karena logo anjing lautnya berwarna coklat, bukan garis hitam, dan di sebelah kanan nama “mariadb” terdapat roset biru-hijau kecil, serta label “Docker Official Images”. Pada saat penulisan, meta-data pertama untuk item ini (“Pulls”) menunjukkan telah diunduh lebih dari 1 miliar kali. Inilah paket yang kita inginkan.

Klik pada namanya – tautan tersebut akan membawa Anda ke halaman dengan informasi detail tentang semua versi rilis berbeda dari image MariaDB “utama” ini. Tepat di bawah judul halaman, kita akan menemukan dua tab: “Overview” dan “Tags”.

Jika belum terpilih secara default, klik “Overview” dan perhatikan blok yang berisi lebih dari 60 hyperlink ke “Supported tags and respective Dockerfile links”. Jika Anda perhatikan dengan seksama, salah satu entri di tabel tersebut selalu ada “latest” dan satu lagi selalu ada “lts” (untuk Long Term Support). Perlu dicatat bahwa jika Anda mencari varian “LTS”, kemungkinan akan ada 3 atau 4 versi di halaman ini yang memiliki “lts” sebagai bagian dari namanya. Hanya satu file yang bernama “lts” tanpa tambahan teks lain, jadi jika Anda menggunakan “Ctrl-F” untuk mencarinya, terus tekan “Next” hingga menemukan versi yang benar. Sesuai kebutuhan Anda, pilih dan klik salah satu tautan di halaman ini – tidak harus “latest” atau “lts” jika Anda membutuhkan versi perangkat lunak tertentu. Daftar ini diurutkan sehingga versi terbaru/terdepan muncul pertama, dengan edisi yang lebih lama secara kronologis muncul dalam urutan tanggal terbalik. (Sebagai catatan, versi “current” yang didukung oleh QNAP – 10.5.8 – sudah tidak ada lagi di daftar ini… Untungnya kita punya Docker sebagai opsi!)

Pada saat penulisan, ketika saya klik “latest”, browser saya diarahkan ke halaman GitHub, dengan file konfigurasi/manifest Docker mentah untuk image tersebut. Anda kemudian dapat melakukan pencarian teks di halaman itu (Ctrl-F di browser) menggunakan kata kunci “version”. Jika semuanya berjalan lancar, Anda akan menemukan kursor Anda menyorot teks di blok yang diawali dengan “# OCI annotations to image” – dan di blok ini Anda akan menemukan parameter dengan nilai yang mirip seperti berikut ini:

org.opencontainers.image.version=“12.0.2” \

Dari sini, kita bisa menentukan bahwa “mariadb:latest” akan menginstal (saat ini) versi 12.0.2 dari database. Catatlah itu – kita bisa memeriksa nanti untuk memastikan semuanya berjalan sesuai harapan. Tentu saja, jika Anda membutuhkan versi yang berbeda, Anda bisa memilih dari salah satu alternatif “version stamped” yang eksplisit di halaman “Overview” sebelumnya di DockerHub dan gunakan langkah validasi di atas untuk memastikan manifest pada paket yang Anda pilih sesuai dengan versi yang Anda butuhkan. Saya juga perlu menekankan bahwa meskipun ada repositori Docker lain di internet dan ContainerStation memang memungkinkan Anda mengimpor salinan kontainer yang telah Anda unduh dan cache secara lokal, sejak awal salah satu pertanyaan yang kita bahas adalah bagaimana memastikan kita mengunduh kode yang sah dan bukan malware.

Inilah jawaban untuk pertanyaan tersebut: kita menggunakan mekanisme impor ContainerStation [yang “hard-coded” ke DockerHub] dan kita telah memeriksa serta memastikan bahwa kita akan mengambil image MariaDB Resmi dari repositori tersebut.

Poin penting yang harus dicatat adalah bahwa teks persis dari “tags” yang tercantum di halaman sebelumnya adalah elemen yang perlu kita berikan ke ContainerStation untuk memberi tahu versi MariaDB mana yang ingin kita instal. Kita akan melihat cara kerjanya sebentar lagi.

02. Instal ContainerStation dari QNAP App Store

Akses QNAP NAS Anda melalui antarmuka Web Admin. Setelah Anda melakukan autentikasi, cari aplikasi “App Center” – kemungkinan besar aplikasi ini sudah dipasang di desktop Anda, atau dapat diakses dari “Main Menu”, yang pada QTS 5.2.7 muncul sebagai ikon di kiri atas antarmuka Web Admin – ikon tersebut berbentuk 3 garis horizontal.

Setelah Anda membuka “AppCenter”, klik “Utilities” di margin kiri dan kemudian cari “Container Station” [secara default, semua aplikasi di setiap kategori akan diurutkan secara alfabetis].

Klik tombol biru-putih untuk ‘Install’.

Mudah.

Proses ini akan memakan waktu beberapa menit untuk mengunduh dan menginstal kode [tergantung pada kecepatan jaringan Anda]. Setelah instalasi selesai, tombol aktivasi akan berubah dari biru-putih “Install” menjadi putih-biru “Open”.

03. Peluncuran Pertama ContainerStation dan Pemilihan Data Volume

Disclaimer – Saya tidak dapat memberikan instruksi eksplisit di sini, karena langkah-langkah spesifik yang Anda ambil akan ditentukan oleh konfigurasi dasar QNAP NAS tempat Anda menginstal ContainerStation dan cara NAS tersebut dikonfigurasi terkait Volume, LUN (Logical UNits), dll.

PENTING: Jika Anda tidak yakin dengan konfigurasi NAS Anda, sebelum melanjutkan, buka “Control Panel” dan cari aplikasi di kelompok “System” yang bernama “Storage & Snapshots”. Di sini, Anda seharusnya menemukan gambaran umum tentang konfigurasi tingkat rendah NAS Anda yang ditentukan saat drive pertama kali ditambahkan dan saat pengaturan awal dilakukan. Dalam kasus saya, saya memiliki satu Volume, yang diberi nama “DataVol1”, yaitu array RAID6 dengan 6 x WD Red 12Tb. Jika Anda memeriksa “Storage & Snapshots” dan menemukan lebih dari satu volume yang terdaftar, saya sangat menyarankan Anda bertanya kepada orang yang mengonfigurasi NAS Anda di mana mereka lebih suka Anda menyimpan folder “/Container”. Anda perlu mempertimbangkan kebutuhan ruang data yang mungkin diperlukan, terutama karena kita akan menginstal database engine yang bisa sangat menuntut kapasitas penyimpanan. Pastikan, sebelum melanjutkan, Anda sudah tahu di mana Anda harus menginstal “/Container”.

Luncurkan ContainerStation dengan mengklik ikonnya. Anda akan melihat banner “Welcome”, di bawahnya terdapat teks:

Welcome to Container Station

Container Station akan membuat folder bersama bernama “Container” di File Station untuk menyimpan semua
images dan containers secara default.

Di bawah teks tersebut, Anda akan diberikan kotak combo [drop-down], yang sudah dipilih ke nilai “/Container” dan di bawahnya terdapat tombol “Start”. NAS saya diatur dengan satu Volume dan inilah yang saya lihat [karena tidak ada alternatif]. Seperti yang telah disebutkan di atas, jika Anda memiliki beberapa volume yang diatur di NAS Anda, Anda pasti akan melihat sesuatu yang berbeda di sini. Mohon maaf jika itu Anda – Anda harus menyelesaikan bagian ini sendiri. Setelah Anda mengidentifikasi dan mengatur lokasi yang benar untuk Shared Folder, klik “Start” dan biarkan skrip berjalan hingga selesai.

Saya ingin mencatat bahwa dalam kasus saya, dengan volume utama NAS yang dipilih, ContainerStation diberi kesempatan untuk tumbuh sebesar yang dibutuhkan. Itu bisa menjadi hal baik, atau bisa menjadi risiko, tergantung pada keandalan kode yang Anda jalankan di container yang di-host dan kemungkinan bahwa kode tersebut dapat menghabiskan ruang disk yang sangat besar – misalnya dengan menulis file log yang sangat panjang tanpa proses pembersihan otomatis. Mohon luangkan waktu untuk mempertimbangkan penggunaan yang Anda inginkan sebelum memutuskan di mana akan menempatkan share “/Container”.

Dalam kasus saya, saat saya mengatur ContainerStation, saya ditanya apakah saya setuju untuk mengizinkan data penggunaan dikumpulkan dan dikirim ke QNAP. Ini bukan pertanyaan teknis yang bisa saya jawab untuk Anda. Namun, harap dicatat bahwa jika QNAP Anda dimiliki oleh perusahaan Anda, keputusan tersebut mungkin bukan milik Anda.

Oke, pada titik ini, kita sudah menginstal ContainerStation, dikonfigurasi, kosong, tetapi tersedia. Saat diluncurkan, secara default kita akan melihat “home page” berjudul “Overview”, dengan rincian Containers, Applications, dan sumber daya NAS – CPU, Memory, dan “Top 5 by CPU Utilization” containers. Pada titik ini, semuanya seharusnya masih tenang.

04. Membuat Kontainer MariaDB Kita

Pada titik ini saya akan berasumsi bahwa Anda ingin langsung melanjutkan dengan membuat kontainer MariaDB… namun Anda mungkin punya beberapa pertanyaan terlebih dahulu.

  • Tunggu – mengapa kita perlu membuat sebuah Kontainer? Bukankah intinya di sini adalah kita akan menjalankan instance MariaDB yang sudah jadi?

    Pertanyaan yang bagus. Saya bukan ahli dalam seluk-beluk Docker, tapi pemahaman dasar saya adalah kita membuat kontainer lokal (kosong) lalu mengisinya dengan image MariaDB Resmi yang kita unduh dari Docker hub Resmi.

  • Tunggu – saya membaca laporan di {masukkan nama situs berita teknologi pilihan Anda} yang menyebutkan bahwa hingga 20% pustaka Docker publik berisi image yang penuh dengan malware – seperti penambang Bitcoin. Bagaimana saya tahu Anda tidak akan membimbing saya menginstal malware yang baru saja Anda unggah?

    Pertanyaan yang lebih baik. Ini menunjukkan bahwa Anda memiliki pola pikir berbasis keamanan. Jawabannya cukup sederhana – kita akan memberi tahu ContainerStation nama file image yang ingin kita ambil, tapi ContainerStation akan langsung mengambilnya dari repositori Docker default, bukan meminta kita menentukan URL image-nya. Dengan mekanisme ini, Anda seharusnya cukup yakin bahwa kita akan mengunduh image yang sah.

Di pojok kanan atas jendela ContainerStation, Anda akan melihat widget seperti combo-box dengan teks putih di latar biru dan label default “Explore”. Klik panah bawah untuk membuka drop-down lalu dari menu, opsi pertama adalah “Create Container”. Pilih itu.

Sebuah jendela pop-up akan muncul, berjudul “Create Container”, dengan tab 1 dari 3 bertanda “Select Image”. Di panel utama tab pertama terdapat 3 kontrol – sepasang radio button untuk memilih antara Basic dan Advanced Modes, sebuah combo-box berlabel “Registry” dan kotak teks bernama “Image”.

Pertama, ubah Mode ke Advanced. Kita akan membutuhkan pengaturan Advanced untuk mengirim parameter run-time ke MariaDB saat dijalankan. Saat Anda mengubahnya, Anda akan melihat combo box “Registry” digantikan oleh dua radio button lagi, “Docker image” dan “LXD image”. Biarkan tetap di “Docker image” (karena kita akan menerapkan file berformat Docker). Perhatikan bahwa teks abu-abu di dalam kotak “Image” berbunyi, ‘registry/image:version’ – dan bagian “:version” ini sangat penting, seperti yang akan kita lihat.

Radio button “Docker image” pada dasarnya menginstruksikan skrip untuk menggunakan Docker Hub sebagai sumber file image-nya dan kotak teks “Image” adalah parameter yang perlu kita isi untuk memberi tahu skrip installer paket dan versi mana yang ingin kita instal.

Di sinilah kita memasukkan nama file image yang relevan yang kita identifikasi saat mencari di Docker Hub. Misalnya, pada kasus saya, nilai yang dimasukkan untuk field “Image” adalah mariadb:latest”.

Namun, jika Anda menjalankan aplikasi yang membutuhkan versi rilis tertentu, di sinilah Anda menentukan edisi yang diinginkan. Misalnya, pada saat penulisan, aplikasi web NextCloud mendukung rilis 31.0.10 dan pemeriksaan validasi infrastruktur internalnya menyarankan performa terbaik pada “MariaDB >=10.6 dan <= 11.4”. Jadi jika saya ingin menjalankan NextCloud, saya akan menggunakan nilai, “mariadb:11.4” atau mungkin “mariaDB:11.4.9”.

Setelah Anda menentukan versi yang diperlukan, klik “Next” \[di kanan bawah jendela\]. Ini akan membuat installer menampilkan banner pop-up “retrieving information” secara singkat – sedang memvalidasi detail yang baru saja kita masukkan, dengan mencari image tersebut di DockerHub.

Sekarang Anda akan melihat jendela Anda berpindah dari “1. Select Image” ke “2. Configure Container” dan kita punya beberapa kotak baru yang perlu diisi.

Yang pertama adalah “Name”. Ini adalah nama yang mudah dibaca manusia yang akan kita berikan ke kontainer ini, yang berjalan di lingkungan “ContainerStation” lokal baru yang baru saja kita instal. Kita perlu memikirkan nama ini dengan baik – menamainya “Xb17-123f” mungkin tidak akan banyak membantu. Jika ini kontainer pertama Anda tapi kemungkinan akan ada banyak, saya sarankan Anda mempertimbangkan membuat konvensi penamaan. Berikut beberapa elemen yang bisa Anda masukkan dalam format penamaan terstruktur:

  • Konten Kontainer – jika Anda akan menjalankan beberapa stack perangkat lunak berbeda – MariaDB, OpenLDAP, Jupyter, Plex, RStudio dan seterusnya, maka Anda perlu memasukkan “MariaDB” atau sejenisnya dalam nama.

  • Tujuan Kontainer – apakah ini kontainer \[D\]evelopment untuk programmer, kontainer \[T\]est untuk validasi pra-produksi dan uji pengguna, lingkungan \[P\]roduction, atau bahkan instance \[C\]ontingency atau \[B\]ackup untuk keadaan darurat? Label satu karakter memudahkan untuk mengetahui sekilas.

  • Versi Konten – jika, seperti saya, Anda mengikuti panduan ini untuk mendapatkan akses ke versi MariaDB yang lebih baru daripada yang dibundel dengan QTS, maka Anda mungkin ingin menyesuaikan nama menjadi MariaDB_P12-0-2 atau sejenisnya.

  • Anda mungkin menerapkan kontainer khusus untuk aplikasi tertentu – jadi Anda mungkin memiliki kontainer MariaDB khusus untuk mendukung satu aplikasi, dalam hal ini nama App akan muncul, seperti MariaDB_NextCloud atau MDB_NC.

  • Terakhir, harap diingat bahwa nama apa pun yang Anda pilih, Anda harus mengetikkan string ini persis pada perintah “docker” di shell prompt, untuk memberi tahu Docker kontainer mana yang ingin Anda instruksikan. Jadi jangan buat terlalu rumit, karena Anda akan mengetik ini cukup sering.

Seperti kata pepatah, “You do You”, tapi, tolong, luangkan waktu untuk memikirkannya.

Selanjutnya adalah “Restart Policy” – yang mencakup opsi ‘None’, ‘Always’, ‘On Failure’ dan ‘Unless Stopped’. Default-nya adalah ‘Unless Stopped’ dan makna opsinya harusnya cukup jelas. Saya memilih untuk membiarkannya pada default. Berikut tautan ke dokumentasi resmi Docker jika Anda ingin mempelajari lebih lanjut.

Selanjutnya kita sampai pada “Network Configuration” – dan ini adalah pengaturan penting yang bisa saja membingungkan, jadi saya rasa layak untuk dibahas sedikit di sini. Di layar, kemungkinan besar field “Exposed” ports sudah di-set ke “3306/tcp” dan berwarna abu-abu, meskipun, di bagian bawah halaman, ada opsi untuk menentukan “Container Port” yang juga sudah di-set ke nilai 3306 \[port TCP default untuk MariaDB/MySQL\].

Inilah masalahnya… Jika Anda mengubah nilai ini ke port non-standar untuk MariaDB, Anda tetap bisa menjalankan dan memulai kontainer Anda, namun hampir pasti Anda tidak akan bisa terhubung ke database Anda melalui jaringan. Ini karena binary MariaDB sebenarnya menggunakan file konfigurasi lain – yang tertanam dalam image kontainer – dan mungkin tidak mengikuti apa yang Anda set di sini. \[Disclaimer – ini terjadi pada saya!\] Berhati-hatilah mengubah nilai ini – dan lihat bagian di bawah untuk cara memeriksa dan menentukan port mana yang benar-benar digunakan MariaDB Anda saat berjalan. Selama Anda memberikan alamat IP khusus untuk kontainer Anda, menjalankan pada port default MariaDB 3306 seharusnya tidak menjadi masalah.

Jangan klik “Next” dulu – masih ada yang harus dilakukan…

05. Advanced Container Settings

Before we leave this page, we need to dig a bit deeper. Click on “Advanced Settings”, which you will find below the “Network Configuration”.

In this lowest level of detail, you should find a page broken down in to 7 vertically stacked tabs, named: Commands, Networks, Environments, Labels, Storage, Runtime and Resources.

Let’s now work through each of these in turn:-

Commands
Leave the “Command” and “Entrypoint” text boxes in their “default” settings, and make sure that the “Allocate interactive processes (-i) for the container” and “Allocate TTY prcoesses (-t) for the container” are both set to active. We are going to rely on these two parameters being set ‘on’ when we come to set up and manage the container once it’s running.

Networks - IMPORTANT
In my case I wanted to access this container via the default [10Gb] network port on my NAS… but if you have a model with multiple network ports and connections, this is where you can specify which of the network ports on your NAS that your Docker container should be visible to your network.

The “Preparation and Warning” notes at the beginning of this guide included a requirement for a static IP address, valid on the local network – and this is where that value will be used.

Change the ‘Network Mode’ radio button selector from “Default (NAT)” to “Custom”. Allow the drop-down Combo Box to remain in “bridge”, then scroll the window down to reveal a couple of additional parameters tucked away at the bottom.

One of these is a check-box with the label, ‘Use a static IP address’. Activate that check-box and the installation window will change to give a 3-row data box with ‘IP address’, ‘Subnet mask’ and ‘Gateway’ as labels for the 3 rows. You will hopefully find that the Subnet mask and Gateway are pre-populated and greyed out – this data is sourced from the main network configuration parameters of your NAS. You should also find out that some of the 4 digits of your IP address – specifically the network address portion are also pre-defined and greyed out. In my case I am using a Class B network with network address 172.16.0.0, so I have just 2 parameters to fill in. Update the values in the “IP address:” parameter to match the address you previously obtained.

{{ Edit to Notes - Added April 3rd, 2026 }}

There’s a non-obvious but critical consequence of the decision you make here regarding whether to explicitly identify IP Addresses for DNS Servers or whether you are happy to allow the container to simply adopt the default DNS values set at your NAS/host level.

Suppose there is a future time where you need to make changes to your local DNS infrastructure and further suppose that those changes require you to amend the IP addresses for your DNS Servers on your network. If you create a new container with the DNS Server IP addresses set to “NAS Values”, then when you need to come to change to a new DNS host IP address, the only way you can do this is at the Host NAS Level. Under the hood, Docker provides a DNS proxy service to running containers. It uses a hidden IP address (127.0.0.11) and the DNS resolver details in containers will be set to this value.

The consequence here is that if you use “host based DNS” in this way, then when you come to change your DNS host value, you have given yourself no option except to migrate ALL your containers at the same time.

Conversely, if you explicitly set your DNS Server IP Addresses manually at this step in the process, then you grant yourself the ability to migrate “one container at a time” to a different IP address, and/or set different containers to use different DNS Servers [should you have that requirement].

The catch here - something that is not obvious at container creation time, is that once you create your container, your DNS decisions are “hard-coded” and cannot be changed.

Does this matter? Well, only you can answer that question. But if, say, you have a mix of “Production” and “Test” containers running in a single Docker instance [which, if you’re limited with respect to hardware, is a perfectly reasonable approach], then you’re going to be forced to migrate both test and production environments at the same time. That seems a bit counter-intuitive.

Take a moment to ensure that you have this configured in a way that is appropriate for your environment and make sure to document what you have done and why.

{{ End of Edit }}

Environments – CRITICAL
You can think of this element as for the specification of environment [run time] variables that the container is going to pass to MariaDB as/when MariaDB starts up. The values of these variables are essentially secure – as they are only visible here and inside the container itself, but they are critical.

That’s because you must provide a root password to the docker image of MariaDB as part of the initial configuration. To do this, click the “Add New Variable” button at the top right corner of the page in this tab. The name of the environment variable we have to create is “MARIADB_ROOT_PASSWORD” and the value we select should be something that conforms to conventional password rules. If you miss this step, your Container will not start. [OK, disclaimer. I just exaggerated when I said that you must provide a root password here. That’s not strictly true. One of the other support options is “allow no password”. I chose to write the instructions as I did above because I don’t want to encourage anyone to do anything that is insecure. The right action to take here is to use a generator to produce a secure password and use that. Please take a moment to reflect on the sensitivity of the data your DB will host and the environment in which your NAS operates. As I’ve noted before: “You do you”.

Labels
We’re going to leave the settings of this tab to their default values

Storage – IMPORTANT
In the section of this document with the title, “00b. Before We Get Started – A Data Gathering Requirement”, we considered the question of whether or not we want to create a permanent connection between the container’s internal file system and that of the NAS itself. This is where you get to decide which approach you will take.

If you’re currently performing a “pre-install” for “Option 3”…
– that is to say, deploying the MariaDB container so that you can jump in and have a look around, so that you know where to make a connection to your NAS file system, or if you’ve decided that you want to keep your MariaDB container completely isolated, you can skip Storage and leave it blank – simply jump down these notes to “Runtime” and continue.

If you’re currently performing the “second/full/final install” for “Option 3”…
– and/or you have otherwise determined the location of a folder within the MariaDB container that you wish to permanently “bridge” to the QTS file system, this is where you make that configuration. Please note: you can only make this decision at installation time – once “built” you cannot go back and edit this part of your container’s configuration. Whatever you decide here will be “final” for this particular container.

After selecting the “Storage” tab, click the “down arrow” to the right of the button labelled “Add Volume”. A pop-up window should appear below the button with three options in it – “Add Volume”, “Add Volume from Container” and “Bind Mount Host Path”. Select “Bind Mount Host Path” and note that a second “bind pair” appear in the main section of the window. This one will be differentiated with a small yellow “folder” icon – which signifies that it related to a folder native to QTS on the NAS. Click on the yellow folder icon and use the window which shows a path to actual, existing folders on the host NAS file system. Navigate through the file system until you select the remote endpoint that you want to be able to connect to from within your container. Ideally, you should make sure that the folder you select is part of an existing backup regimen – for example is enrolled within one of your existing HBS3 backups. Of course, you don’t need to have the QTS folder enrolled in an HBS3 backup before you add a MariaDB container, it’s just that if you want your exported .sql files to be archived, including the destination QTS folder in an HBS3 backup is the simplest way to do it.

Click in to the final data field, “Container:” and provide the path name to the location within the container on which we wish to mount the remote file system. (For users familiar with the soft-link operation of Linux, using the command “ln -s”, this is effectively the same thing). In our case, because our future selves were so helpful, we know that the internal folder we want to use is /var/backups. [Warning: if you’re reading this and preparing any version of MariaDB that is not 12.0.2, you really should be ignoring this hint and performing your own pre-install to check. Just saying].

Runtime
This tab controls the way that ContainerStation will spawn threads that execute the code in containers. Because ContainerStation is designed to operate three different types of container, this tab allows an administrator to help ContainerStation better understand how to interact with the executable code within. As we’re using a Docker image, we can let this remain with default values.

Resources
This tab allows you to decide whether you want to apply “upper limits” to the amount of hardware resource you are willing to allow this specific container to consume. It is likely to be very useful on larger NAS units and those with many users, because you probably don’t want one container to draw down all the available performance of the NAS. However, since this is going to be specific to your operating environment, there is no easy or obvious suggestion to make here. MariaDB recommend a minimum of 1Gb of RAM for basic operations. Stipulating CPU limits is going to be much harder, because different NAS models will have different CPUs installed.

If in doubt… either seek advice from an administrator, or try this as a rule-of-thumb… If you switch to “Limited” for any of the 3 options, the range of values will be pre-set based on your local hardware. Have a think about the range of users, workload and other applications running on the NAS in question and think about how much of the available performance you would be comfortable allocating to this one solitary container if it was “working hard”. In my case – a TVS-672XT used as a “home office” hub, I set limits at 25% of available resources across the board – and that has proven to be more than enough. Doing so gives me the confidence that even if my MariaDB container were to “go sideways” with a looping process, it will not kill my entire NAS – and, crucially, it will leave me with enough capacity/bandwidth to get in and figure out what is going wrong.

When you’re ready, click Finish.

In the background, ContainerStation will now download the “Mariadb:Latest” image from Docker Hub and then apply the various configuration parameters that we specified during the “create” process.

If we switch from the “Overview” tab of ContainerStation’s main display to “Containers” [via the left-side gutter margin], we should now see a single row in the main panel of the page, with a “Type” value of “Docker”, a “Name” value that matches the one provided earlier, and additional parameters – “Status”, “Application”, “Image”, “IP Address”, “Created On” and “Actions”.

At the bottom of the display we should also see a pair of tabs, “Logs” and “Status”.

If everything went [reasonably] well, then in the “Status” column of the table of containers, we should see a circular green icon and “Running”. Earlier in these notes, I mentioned that there was a way of checking to find out which TCP port our Docker instance of MariaDB was listening on – and this is it. Click on the “Logs” tabs and you should see a window with a black background and fairly small white text. Directly above the top right corner of this text window, you’ll see a small icon that looks like a square with an arrow pointing out of it towards the top, right corner. Click that arrow and the log window will expand to fill your browser. Unfortunately the content of this window isn’t rendered as HTML, so you can’t use “Ctrl-F” in your browser to search for the active port, but it should not be hard to find. In my case, the log contains the following:-

2025-11-06 7:59:15 0 [Note] Server socket created on IP: ‘0.0.0.0’, port: ‘3306’.
2025-11-06 7:59:15 0 [Note] Server socket created on IP: ‘::’, port: ‘3306’.

As I noted previously, when I tried to change the port via the Container setup options, I found that the value here remained stubbornly at port 3306. Eventually, I decided it wasn’t an issue since I was of course using a dedicated, static IP address and this was the only service the address would be likely to host. But I did say I would show you how to confirm the port that your MariaDB daemon is listening on and, well, this is it.

But: congratulations! You’ve just configured and installed MariaDB in Container station!

And it is currently absolutely useless!

Right now, all we’ve done is get the package downloaded and installed and got the main binary to successfully start executing. However, by default MariaDB won’t allow network connections and is supplied with just a single root/admin user. Now we need to perform a couple of very simple validation tests. The first is a simple network visibility test – just open a command prompt or shell prompt (from your workstation) and then issue the command,

ping {IP address}

where the {IP address} is the one that we applied to the container in the “Networks” tab of “Advanced Settings” and was based on the static IP address we obtained at the start of this guide. If we got our networking setup correct, we should see ICMP Echo packets returned to our workstation.

The second test, which is very helpful if you have the means to run it, is to perform an nmap scan. Nmap is a port scanning utility that can access a remote host and tell you whether or not the host is offering service for particular ports, such as TCP sockets. If your workstation is Windows based, you can download the nmap utility direct from the official Nmap web site . If your workstation is unix based, such as one based on GNU/Linux, you can almost certainly add the nmap utility direct from your local package manager.

Once you have the utility installed, simply check your container’s IP address. For example, I assigned the IP address 172.16.101.201 to my MariaDB container and when I run nmap against that IP address, this is returned:-

$ nmap 172.16.101.201
Starting Nmap 7.80 ( link to official nmap web site normally appears here ) at 2025-11-06 08:25 GMT
Nmap scan report for 172.16.101.201
Host is up (0.00012s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
$

In this case I have only one open/active port at the IP address, but it shows that TCP Port 3306 is open (which means that a listener is monitoring the network stack and will respond to packets with that port ID) and we can also see that the listener is “mysql” – which is what we want.

This gives us a good level of confidence that our MariaDB engine is at least installed and running.

06. Mengakses Docker melalui SSH

Seperti yang diketahui siapa pun yang familiar dengan MariaDB, MariaDB mengikuti prinsip secure by design, yang berarti saat pertama kali diaktifkan, hanya ada satu pengguna terdaftar dan tidak akan mengizinkan akses jarak jauh (yaitu melalui jaringan). Tidak hanya kita harus mengaksesnya melalui localhost untuk mengkonfigurasinya dengan benar, kita juga perlu mengaksesnya dari dalam kontainer Docker-nya.

Mari kita mulai.

Pertama, buka sesi Secure Shell ke NAS Anda. Anda bisa menggunakan berbagai cara untuk melakukan ini – misalnya baik Windows (melalui Command Prompt) maupun Linux (melalui Terminal Session) memungkinkan Anda cukup menjalankan perintah,

SSH {IP NAS atau Nama DNS Anda}

Sebagai alternatif, Anda dapat menggunakan aplikasi klien seperti PuTTY – klien SSH dan telnet gratis yang tersedia untuk Windows dan Linux. Silakan gunakan cara yang Anda suka. Setelah Anda masuk dan berada di prompt shell \[NAS\], masukkan perintah berikut:

docker ps

Anda seharusnya tidak perlu menambahkan “sudo” di depan perintah ini, namun mungkin tergantung pada izin akun non-Admin yang Anda gunakan untuk mengakses NAS Anda. Sebagai respons atas perintah ini, Anda akan melihat respons dua baris dengan beberapa detail dasar di bawah judul kolom “CONTAINER ID”, “IMAGE”, “COMMAND”, “CREATED”, “STATUS”, “PORTS” dan “NAMES”.

Baris detail tunggal di bawah judul kolom tersebut berkaitan dengan kontainer yang baru saja kita buat. Catat item di bawah “NAMES” – ini adalah nama kontainer spesifik dan kita akan membutuhkan ini untuk berinteraksi dengan instance MariaDB kita. Nama ini harus sesuai dengan nama yang Anda berikan saat membuat kontainer tersebut.

07. Akses Sistem File MariaDB untuk Menemukan Endpoint Penghubung Folder
Jika ini adalah pertama kalinya Anda menginstal MariaDB dan tujuan Anda melakukannya adalah untuk menentukan node folder mana di sistem file container yang dapat digunakan sebagai parameter dalam konfigurasi Storage seperti yang dijelaskan di atas, maka mendapatkan informasi yang Anda butuhkan sangatlah mudah. Pertama, kita perlu memulai sesi bash (shell) interaktif untuk masuk ke dalam container. Anda perlu memasukkan perintah Docker melalui sesi SSH aktif ke NAS Anda. Karena metode ini adalah cara umum bagi Anda untuk berinteraksi dengan Docker, mari kita luangkan waktu sejenak untuk menguraikan perintah dan memahami apa arti dari setiap elemen. Bacalah penjelasannya sebelum Anda mengetiknya:-

sudo docker exec -it {yourContainerName} /bin/bash

Dalam string perintah di atas:-

sudo - memberi tahu Sistem Operasi NAS QTS bahwa kita ingin menjalankan perintah berikut dengan hak akses superuser.

Docker - memberi tahu sudo bahwa kita ingin memanggil perintah docker dengan hak akses

exec - adalah singkatan dari “Docker Execute” – ini memberi tahu Docker bahwa kita ingin menjalankan program executable yang dapat ditemukan di dalam container

-it - adalah flag parameter dan masing-masing mewakili Interactive Mode (i) dan Teletype Format (t).

{YourContainerName} - diperlukan jika kita memiliki beberapa container yang diterapkan dalam instance Docker ini. Ini adalah cara kita memberi tahu handler Docker container mana yang ingin kita gunakan.

/bin/bash - adalah nama path lengkap ke program executable di dalam container yang ingin kita jalankan. Bagi yang membaca ini dan belum familiar dengan sistem operasi keluarga unix, “bash” adalah singkatan dari “Bourne Again Shell”, sebuah ekstensi dari salah satu lingkungan command-line asli dari masa awal unix (Bourne Shell).

Ketika Anda menjalankan perintah di atas, Anda akan melihat bahwa prompt perintah di lingkungan shell Anda berubah. Seharusnya berubah menjadi seperti:-

root@{12-digit-hexadecimal-number}:/#

Nilai hex 12 karakter yang terlihat aneh itu, tentu saja, adalah ID Container unik yang diberikan ContainerStation selama proses pembuatan. Sekarang kita sudah berada di dalam container MariaDB. Kita perlu mengetahui di mana posisi kita di dalam container dan apa saja yang ada di lokasi tersebut. Kita akan menjalankan perintah list dan menggunakan parameter untuk meminta semua file dan format panjang (yang setara dengan meminta Windows Explorer untuk menampilkan tampilan “Details” dari sebuah folder). Secara konvensi, kita akan selalu tiba di container pada direktori paling atas, “root” dari sistem file lokalnya (“/”). Jalankan perintah shell:

ls -al

Anda seharusnya melihat sekitar 24 entri di folder root container, dengan 3 yang pertama adalah “.”, “..” dan “.dockerenv”. Sekarang yang perlu kita lakukan adalah mencari di sistem file ini lokasi yang dapat kita gunakan sebagai titik penghubung antara container dan sistem file NAS.

Telusuri dan temukan folder bernama “var”. Nama ini ditulis dalam singkatan unix 3 huruf dan mewakili “variable” yang menandakan bahwa isi folder ini diharapkan berubah seiring waktu. Ini sangat cocok untuk kebutuhan kita, karena digunakan untuk menunjukkan area penyimpanan data. Masuk ke folder dengan:

cd var

(untuk mengubah direktori ke var) lalu lakukan list lagi:

ls -al

Pada titik ini, Anda akan melihat bahwa folder pertama yang terdaftar adalah “backups”. Masuk ke dalamnya menggunakan

cd backups

dan kemudian lakukan list lagi

ls -al

Anda akan menemukan bahwa folder ini kosong, dan itulah yang ingin kita lihat. Ini sempurna – ini adalah yang kita cari. Kita akan menggunakan folder ini sebagai titik penghubung untuk backup yang akan kita ambil dari database MariaDB kita. Kita tidak perlu melakukan perubahan apa pun dan bahkan kita perlu keluar dari shell container dengan menjalankan perintah

exit

Ketika Anda melakukannya, prompt perintah seharusnya berubah kembali ke default QNAP kita. Pada titik ini, kita dapat beralih kembali ke sesi browser, kembali ke Container Station dan, jika perlu, klik opsi menu “Containers” di margin kiri. Kita kemudian dapat menemukan container “MariaDB” kita – yang baru saja kita buat. Mengklik roda gigi di kolom “Actions” akan menghasilkan jendela pop-up, dari mana kita dapat memilih “Stop”, atau jika perlu “Force Stop”. Setelah container berhenti, kita dapat menggulir ke bagian bawah jendela pop-up dan memilih “Remove” untuk menghapus container. Setelah dihapus, kita dapat kembali dan memulai proses dari awal, sekarang setelah kita mengetahui di mana kita ingin menghubungkan antara sistem file container dan sistem file QTS.

08. Akses Interpreter Command Line MariaDB melalui Docker

Berdasarkan asumsi bahwa jika Anda telah sampai pada bagian ini, maka Anda sudah memiliki container yang terkonfigurasi dengan benar, lengkap dengan koneksi folder antara container dan sistem file QTS yang Anda butuhkan. Sekarang kita sudah bisa “melihat” Container kita, mari kita akses MariaDB di dalamnya. Kita akan melakukannya dengan perintah Docker lain, namun seperti sebelumnya, mari kita uraikan agar Anda memahami apa yang Anda lakukan dan alasannya. Ingat, jika Anda belum melakukannya, Anda harus terlebih dahulu “exit” dari container untuk kembali ke prompt Sistem Operasi QTS NAS sebelum menjalankan langkah berikutnya. Sintaks perintah yang akan kita gunakan adalah:

sudo docker exec -it {yourContainerName} mariadb -p{rootPassword}

Perintah ini terdiri dari:

docker exec - kita ingin Docker menjalankan sebuah binary executable di dalam container

-it - kita ingin melakukannya secara (i)nteraktif dan melalui antarmuka gaya (t)eletype

mariadb - kita ingin Docker menjalankan binary spesifik ini di dalam container

-p{rootPassword} - kita ingin memberikan password ini ke binary – dan ini adalah password yang sama yang kita berikan pada variabel Environment sebelumnya.

Anda akan melihat bahwa kita tidak perlu menentukan UserID pada perintah – secara default akan menggunakan ‘root’, pengguna administrasi utama.

Menjalankan perintah ini seharusnya memberikan akses ke MariaDB CLI (Command Line Interpreter). Saya tidak akan membahas secara detail apa yang harus Anda lakukan untuk mengkonfigurasi instance MariaDB baru ini, sebagian karena Anda mungkin ingin mengikuti panduan konfigurasi lokal Anda sendiri, sebagian lagi karena detailnya sepenuhnya tergantung pada apa yang ingin atau perlu Anda lakukan dengan MariaDB. Namun, dasarnya harus cukup sederhana:

  • Terapkan prinsip least privilege – hindari penggunaan wildcard saat memberikan izin.

  • Khususnya, saat mengizinkan “network access”, jangan hanya menentukan “%” [sendirian] untuk “Host” (yang akan mengizinkan akses dari mana saja), melainkan gunakan wildcard bersama dengan alamat jaringan Anda, untuk membatasi akses hanya ke alamat lokal Anda (atau sebagian darinya). Misalnya, alamat IP network lokal saya adalah 172.16.0.0, dengan mask 255.255.0.0, jadi saya akan menentukan 172.16.%.% untuk nilai Host saya. Ini akan memungkinkan saya mengakses MariaDB dari jaringan lokal saya, namun tidak dari tempat lain.

  • Hal utama yang perlu Anda lakukan adalah membuat akun MariaDB non-root dengan otoritas untuk mengakses database dari host (PHPMyAdmin / MySQL Workbench) Anda dan memberikan akun tersebut izin yang diperlukan untuk membuat database baru.

Namun, selain hal lain yang mungkin Anda lakukan untuk mengatur instance MariaDB baru Anda, saya sangat menyarankan Anda membuat akun khusus, hanya-baca yang dapat digunakan untuk melakukan backup database apa pun. Jika ini sesuatu yang ingin Anda lakukan, maka perintah berikut dapat memenuhi kebutuhan tersebut. Pertama, mari kita buat user yang terasosiasi dengan alamat IP loopback:

CREATE USER ‘backup’@’127.0.0.1’ IDENTIFIED BY ‘{securepassword}’;

Saat Anda memasukkan perintah di atas untuk user Anda, perhatikan bahwa password yang Anda berikan harus diapit tanda kutip tunggal, bukan kurung kurawal (kecuali Anda memang ingin kurung kurawal ada di password Anda!). Jadi jika password Anda adalah kata “password”, Anda akan menggunakan

IDENTIFIED BY ‘password’;

Selanjutnya, mari kita berikan user tersebut izin yang diperlukan untuk melakukan ‘SELECT’ pada database mana pun:

GRANT SELECT ON *.* TO ‘backup’@’127.0.0.1’;

Ini membantu Anda memahami sintaks ‘grant’ untuk izin. Di sini, ‘SELECT’ adalah otoritas yang diberikan ke user dan ‘ON *.*’ memberitahu MariaDB untuk memberikan izin ini pada semua database lokal. Ini adalah versi khusus dari grant – tidak hanya memberikan akses ke semua database yang ada saat kita menjalankan perintah, tapi juga secara otomatis menambahkan izin untuk semua database baru yang dibuat setelah saat ini.

Sekarang, ‘SELECT’ bukan satu-satunya otoritas yang perlu diberikan ke user untuk digunakan menjalankan backup, jadi di bawah ini saya akan daftarkan izin-izin yang saya gunakan. Dan untuk jelasnya, daftar ini saya ambil dari Dokumentasi Resmi MariaDB. Berikut daftar lengkapnya:

SELECT, RELOAD, PROCESS, SHOW DATABASES,

LOCK TABLES, SHOW VIEW, EVENT, TRIGGER

Kita sudah memberikan privilege “SELECT” ke user backup, jadi sekarang Anda hanya perlu mengulangi statement tersebut untuk masing-masing privilege perintah MariaDB di atas. Ada 8 semuanya, jadi jika Anda menambahkan satu privilege per pemanggilan statement “GRANT”, Anda harus mengulang perintah tersebut 8 kali.

Dengan membuat akun ‘backup’ dengan @’127.0.0.1’, Anda membatasi penggunaan akun tersebut hanya pada server tempat Anda akan menggunakan utilitas timer native, crontab, untuk menjalankan skrip backup. Itu adalah praktik keamanan dasar yang baik. Artinya, meskipun seseorang menemukan password akun tersebut, mereka tidak dapat menggunakannya untuk mengakses dan mencuri semua data Anda secara (remote).

Sebelum kita meninggalkan bagian ini, beberapa perintah command line lain yang sangat berguna untuk diingat adalah:

SELECT user,host FROM mysql.user;

dan

SHOW GRANTS FOR ‘{user}’@’{context}’;

misalnya:

SHOW GRANTS FOR ‘backup’@’127.0.0.1’;

Seperti yang disarankan oleh sintaks perintah, ini akan menampilkan daftar izin yang telah diberikan ke user tersebut – Anda dapat menggunakannya untuk memastikan bahwa user Anda memiliki otoritas yang diperlukan untuk melakukan aktivitas backup lokal.

Perlu Diperhatikan: Sangat mudah ketika Anda sampai pada bagian ini untuk “curang” dan menjalankan perintah seperti

GRANT ALL PRIVILEGES TO *.* FOR ‘{yourUser}’@’%’;

[yang memberikan Anda otoritas penuh untuk melakukan apa saja dari mana saja] namun perlu diingat betapa berbahayanya hal itu. Aturan umumnya adalah: hanya berikan otoritas yang diperlukan. Hapus otoritas tersebut segera setelah tidak lagi dibutuhkan.

Namun, setelah mengatakan itu, ada baiknya juga untuk membuat user interaktif yang memang memiliki izin luas pada semua konten dan memiliki otoritas untuk mengakses server secara remote. Bukan untuk penggunaan umum atau permanen, tapi untuk disimpan di bawah “segel darurat” dan digunakan hanya saat keadaan darurat. Jika Anda memutuskan untuk membuat user seperti itu, maka Anda dapat menggunakannya untuk memvalidasi bagian proses selanjutnya.

09. Mengakses MariaDB dari PHPMyAdmin

Meskipun antarmuka PHPMyAdmin terkesan agak kuno, utilitas ini sangatlah kuat dan lebih dari cukup untuk memungkinkan manajemen MariaDB jarak jauh melalui antarmuka web. Berkat kecanggihannya, ada beberapa cara untuk menambahkan detail server MariaDB baru – misalnya, Anda bisa menambahkan detail ke file default “config.inc.php”, atau menambahkan file konfigurasi kedua yang didedikasikan untuk masing-masing Server MariaDB.

Dalam kasus saya, saya memilih solusi cepat dan sederhana dengan menambahkan detail untuk server remote kedua ke konfigurasi yang sudah ada, seperti berikut (diambil dari file config.inc.php saya) :-

$i = 0;
/

  • Server pertama - MariaDB 5.5.68 di TVS-672XT
    /
    $i++;
    /
    Jenis autentikasi /
    $cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’;
    /
    Parameter server /
    $cfg[‘Servers’][$i][‘verbose’] = ‘TVS-672XT - MariaDB 10.5.8’;
    $cfg[‘Servers’][$i][‘host’] = ‘172.16.101.2’;
    $cfg[‘Servers’][$i][‘port’] = ‘3307’;
    $cfg[‘Servers’][$i][‘compress’] = false;
    $cfg[‘Servers’][$i][‘AllowNoPassword’] = false;
    *

/

  • Server Kedua – MariaDB 12.0.2 via ContainerStation di TVS-672XT
    /
    $i++;
    /
    Jenis autentikasi /
    $cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’;
    /
    Parameter server /
    $cfg[‘Servers’][$i][‘verbose’] = ‘TVS-672XT - MariaDB 12.0.2’;
    $cfg[‘Servers’][$i][‘host’] = ‘172.16.101.201’;
    $cfg[‘Servers’][$i][‘port’] = ‘3306’;
    $cfg[‘Servers’][$i][‘compress’] = false;
    $cfg[‘Servers’][$i][‘AllowNoPassword’] = false;
    *

Seperti yang dapat Anda lihat dari pilihan parameter dan nilainya, pengaturan saya mengharuskan saya untuk melakukan autentikasi dengan UserID dan Password setiap kali membuka sesi ke PHPMyAdmin; kemudian sesi saya tetap aktif melalui cookie browser.

Bagi Anda yang jeli mungkin memperhatikan bahwa “server pertama” saya menggunakan Port 3307 dan bukan 3306. Itu karena saat saya menginstal MariaDB 10.5.8, saya sudah memiliki MariaDB 5.x yang berjalan di NAS yang sama – dan QTS secara otomatis mendeteksi ini dan menghindari konflik port dengan menaikkan dari 3306 ke 3307 untuk daemon MariaDB kedua.

Jika Anda sudah memiliki instance PHPMyAdmin yang berjalan, setelah menyimpan file konfigurasi default yang telah dimodifikasi (atau menambahkan file kedua), cukup jalankan perintah lokal Anda seperti berikut:-

sudo systemctl reload apache2

di web host Anda, untuk mengaktifkan konfigurasi baru dan memastikan aplikasi web PHPMyAdmin Anda telah memperbarui konfigurasi runtime-nya.

Buka browser Anda (atau tab baru di browser Anda) dan masukkan URL instance PHPMyAdmin Anda. Jika image ContainerStation Anda adalah satu-satunya server remote, Anda dapat mengaksesnya hanya dengan memasukkan user ID dan Password yang baru saja Anda buat.

Jika Anda menambahkan instance ContainerStation Anda sebagai server remote kedua, Anda akan melihat combo box di jendela login, di mana Anda dapat memilih server remote mana yang ingin Anda kelola. Deskripsi yang muncul di Combo Box akan diambil dari nilai yang Anda berikan pada variabel lingkungan “[‘verbose’]” di skrip “config.inc.php”, seperti yang diilustrasikan di atas.

Secara default, PHPMyAdmin akan membawa Anda ke “Server Home Page” untuk server yang sedang dipilih. Di margin kiri layar Anda akan terlihat database yang sudah ada/terbentuk. Karena ini adalah instance MariaDB yang benar-benar baru, Anda seharusnya hanya melihat: “information_schema”, “mysql”, “performance_schema” dan “sys”.

Namun, elemen penting yang harus Anda periksa ulang di sini adalah di sisi kanan halaman, pada elemen berjudul “Database server”, Anda harus menemukan atribut “Server version”.

Nilai spesifik yang saya lihat dari image Docker yang saya deploy adalah

12.0.2-MariaDB-ubu2404 - mariadb.org binary distribution

Bagi saya, elemen penting di sini adalah “12.0.2” – karena ini mengonfirmasi bahwa image tersebut menjalankan versi MariaDB yang saya inginkan. Namun, perhatikan bahwa elemen “mariadb.org” juga menunjukkan asal image docker tersebut. Mungkin belum cukup untuk menjamin bahwa itu adalah image MariaDB yang otentik, tetapi di setiap langkah kita telah berhati-hati untuk memeriksa keasliannya.

10. Menyiapkan Database Uji

Saat kita sedang masuk ke PHPMyAdmin (atau MySQL Workbench, atau alat apa pun yang Anda gunakan), kita akan membuat sebuah database dan mengisinya dengan sebuah tabel yang berisi beberapa record.

Karena saya tidak tahu sebelumnya alat apa yang Anda gunakan, saya tidak akan memberikan instruksi detail di sini. Sebagai gantinya, saya hanya akan mengatakan bahwa saya memilih untuk menamai database saya “demo”, tabel saya “demotable” dan di dalamnya saya membuat dua field, “demokey”, yang merupakan primary key auto-increment, dan “demotext” yang merupakan field teks sederhana. Silakan sesuaikan dengan kebutuhan Anda.

Selanjutnya, kita perlu mengisi tabel ini dengan beberapa data nyata. Penting untuk membuat setidaknya dua record. Karena kita telah membuat field teks sederhana, Anda seharusnya bisa langsung memasukkan teks seperti

Ini adalah record uji pertama
Ini adalah record uji kedua

Kita akan menggunakan tabel ini untuk menguji proses backup kita. Tidak ada salahnya menggunakan fitur “Browse” di PHPMyAdmin untuk melihat record dan memastikan teks terlihat jelas di setiap record.

Setelah Anda memastikan bahwa record telah dibuat (dengan PHPMyAdmin Anda cukup menggunakan tab “Browse”, yang biasanya ada di paling kiri setelah Anda memilih tabel melalui menu di sisi kiri). Jika semuanya sudah benar, kita bisa lanjut ke proses backup database ini…

11. Membackup Database MariaDB yang Dikontainerisasi

Kembali ke sesi SSH Anda yang terhubung ke NAS Anda. Setelah itu, kita bisa menjalankan variasi dari perintah berikut, yang disesuaikan dengan nama database, folder output, dan nama user yang telah kita atur:-

sudo docker exec -it {YourContainerName} mariadb-dump -h 127.0.0.1 -P3306
-u {yourBackupAccountName} -p{yourBackupAccountPassword}
–databases {yourDatabaseName}
–result-file /var/backups/{yourDatabaseName}.sql

Berikut penjelasan dari variabel yang digunakan pada perintah ini:-

-it - menentukan bahwa perintah harus dijalankan interaktif dan melalui antarmuka teletype (yaitu berbasis teks)

{yourContainerName} - adalah nama yang Anda tentukan saat pembuatan container

-h 127.0.0.1 - memberitahu perintah mariadb-dump untuk dijalankan pada host loopback. Lebih penting lagi, ini sesuai dengan cara kita mengatur user “backup”. Ingat bagaimana kita membuatnya sebagai “backup@127.0.0.1”? Nah, inilah alasannya… Pada dasarnya kita akan membungkus perintah ini ke dalam sebuah skrip yang bisa dijalankan secara otomatis dengan timer - dan kita menulis perintah ini serta mengatur hak akses user yang menjalankannya agar hanya bisa dijalankan langsung dari host NAS. Bahkan jika seseorang mengetahui ID “backup” dan password-nya, mereka tidak akan bisa menggunakan kredensial tersebut untuk mengakses database di lingkungan ini. Prinsip hak akses minimum…

-P3306 - mengidentifikasi port TCP yang digunakan oleh instance MariaDB

-u {yourBackupAccountName}
- adalah nama akun MariaDB yang telah diatur dengan hak akses ke database target untuk keperluan backup. Di sini, melanjutkan contoh saya, Anda hanya perlu nama user, “backup”.

-p{yourAdminPassword}
Ini adalah nilai yang Anda atur dalam parameter “IDENTIFIED BY ‘…’;” saat Anda membuat akun user tersebut. PENTING: Jika Anda belum memperhatikan, Anda bisa memberi spasi antara “-u” dan awal UserID Anda dan itu akan diabaikan, tetapi jika Anda memberi spasi antara “-p” dan password Anda, spasi tersebut akan benjadi bagian dari password dan autentikasi akan gagal!

–databases {yourDatabaseName}
[Perhatikan bahwa ada dua tanda minus sebelum “databases”!] Kita hanya akan memberikan satu nama database untuk latihan percobaan (“demo”), dan sejujurnya saya sarankan Anda selalu menjalankan perintah dengan cara ini. Mudah saja menjalankannya beberapa kali – dan menjaga perintah tetap sederhana akan mengurangi kesalahan.

–result-file /var/backups/{yourDatabaseName}.sql

[Perhatikan bahwa ada dua tanda minus sebelum “result-file”!] Pada parameter ini, elemen “/var/backups/” sesuai dengan struktur folder yang telah kita eksplorasi dan verifikasi di dalam container MariaDB (v12.0.2) dan nama yang kita tetapkan sebaiknya merepresentasikan database yang kita arsipkan.

Menambahkan akhiran .sql tidak wajib, tetapi ini adalah konvensi yang berguna untuk membantu mengidentifikasi tipe file dari namanya.

Kemungkinan Anda akan diminta memasukkan password akun Anda untuk menjalankan perintah sudo di NAS – ini adalah praktik standar untuk menggunakan fungsi admin pada host tipe unix. Setelah Anda memasukkannya, jika Anda telah mengikuti semua langkah dengan benar, Anda akan melihat prompt shell Anda kembali tanpa error. Aturan biasa berlaku – jika Anda mendapat error, ulangi dan periksa kembali dengan sangat teliti.

Kita perlu memeriksa apakah backup berjalan sesuai harapan. Sekarang, jika Anda membuat bridge file system seperti dijelaskan dalam panduan ini, maka Anda tidak perlu masuk kembali ke container MariaDB dengan:-

sudo docker exec -it {YourMariaDBContainerName} /bin/bash

karena file yang baru saja Anda buat seharusnya sudah terlihat di folder tujuan yang Anda tentukan. Jika Anda memilih untuk tidak membuat bridge, masuk kembali ke container seperti dijelaskan di atas dan pindah ke direktori output dengan:-

cd /var/backups

dan kemudian tampilkan isi foldernya:-

ls -al

Jika semuanya berjalan sesuai rencana, Anda akan melihat sebuah file dengan timestamp yang sangat baru, dan nama {yourDatabaseName}.sql

Jika iya, selamat! Jika tidak, ulangi langkah-langkah sebelumnya dengan cermat dan coba lagi.

Terakhir, saat Anda berada di folder yang berisi backup Anda [baik di dalam container atau melalui sesi Secure Shell ke NAS Anda] jalankan perintah berikut:-

cat {yourDatabaseName}.sql

Ini akan menampilkan isi file ke layar Anda dan Anda seharusnya melihat isi database “demo” Anda, lengkap dengan tabel yang Anda buat dan dua baris teks. Penting untuk memastikan kedua record tersebut ada di file ini. Karena, tentu saja, sebentar lagi kita akan menghapus salah satunya, lalu menggunakan backup ini untuk mengembalikan data kita…

11a. Mengekspor File Cadangan melalui Container Wall

Jika Anda telah menggunakan metode folder bridge melalui parameter Storage untuk memungkinkan container Anda mengakses sistem file NAS, Anda siap melanjutkan dan dapat langsung ke langkah berikutnya. Namun, jika Anda belum membuat koneksi tersebut, Anda perlu menyalin file cadangan .sql ke luar dari container Anda agar dapat digunakan dalam proses restore.

Kabar baiknya, proses ini sangat mudah dilakukan dan hanya membutuhkan satu perintah.

Pada prompt Secure Shell NAS Anda, masukkan versi perintah berikut yang telah disesuaikan:

sudo docker cp {NamaContainerMariaDBAnda}:var/backups/{namaDatabaseAnda}.sql /share/NFSv=4/Public/Backup/

Harus ada satu spasi antara “.sql” dan “/share/NFS”—atau path lokal yang setara pada QNAP NAS Anda. Selain itu, Anda harus mengganti “/Public/Backup” dengan nama share dan folder yang relevan untuk menentukan di mana Anda ingin file tersebut ditempatkan.

Perintah ini secara manual membuat salinan file ekspor/dump Anda dan menempatkan salinan tersebut di bagian sistem file NAS yang terlihat oleh Anda dan juga oleh HBS3 backup.

Harap Dicatat: Ini juga berarti Anda sekarang memiliki tiga salinan database Anda—yang asli dan dua file dump. Ini mungkin tidak menjadi masalah untuk database kecil, tetapi bisa menjadi lebih merepotkan jika Anda mengelola struktur data yang sangat besar.

Apa yang telah kita capai sampai titik ini adalah menyelesaikan dua dari tiga tahap proses backup yang kita perlukan untuk hasil backup yang memadai. Tahap terakhir, tentu saja, adalah mendaftarkan folder tujuan (“/Public/Backup”) ke dalam proses manajemen data formal, seperti utilitas native QTS Utility HBS3.

Selain itu – jika file database Anda besar dan Anda menggunakan proses “file copy” untuk menempatkan file ekspor .sql di luar container MariaDB Anda, maka Anda sebaiknya mempertimbangkan beberapa langkah tambahan. Setelah pekerjaan backup terakhir/utama Anda selesai, Anda harus mengonfigurasi pekerjaan lain untuk menghapus salinan intermediate file .sql yang Anda tempatkan di /var/backups dalam container MariaDB. Jika Anda menggunakan HBS3 sebagai mekanisme backup Anda, utilitas tersebut tidak memiliki kemampuan untuk menjalankan perintah tambahan, atau memicu batch job eksternal.

Pendekatan yang saya gunakan adalah mengatur HBS3 agar berjalan dengan timer lalu menjalankan skrip shell reguler melalui crontab pada waktu yang jauh setelah pekerjaan HBS3 selesai. Perlu dicatat bahwa ini tidak sepenuhnya aman—karena skrip “bersih-bersih” akan tetap berjalan meskipun pekerjaan HBS3 gagal…

12. Memvalidasi Pemulihan MariaDB

Kita baru saja berhasil membuat backup penuh dari database MariaDB “demo” kita. Jika outputnya ditulis ke lokasi di dalam container MariaDB, kita juga telah menggunakan perintah kedua untuk mengekstrak backup dari dalam container MariaDB dan menempatkannya di lokasi yang bisa kita lindungi dengan mekanisme backup yang lebih andal.

Tapi, apakah backup itu benar-benar berfungsi?!

Mari kita cari tahu.

Pertama, menggunakan browser Anda, kembali ke sesi PHPMyAdmin Anda [Anda mungkin perlu melakukan autentikasi ulang jika sesi telah habis waktu] dan akses tabel demo dalam mode Browse. Pastikan dua data dummy kita masih ada.

Tidak masalah data mana yang Anda pilih saat ini, hapus salah satu dari mereka. Ini sangat mudah dilakukan dari PHPMyAdmin – cukup klik teks “Delete” pada baris data yang ingin Anda hapus. Anda akan melihat jendela pop-up “Confirm” dan kemudian konfirmasi bahwa data telah dihapus, diikuti dengan refresh halaman yang menunjukkan hanya satu data yang tersisa.

Selanjutnya, kembali ke halaman “database” untuk database demo kita, dengan mengklik nama database (“demo”) seperti yang muncul di margin kiri PHPMyAdmin. Jendela utama akan berubah untuk menampilkan “demotable” kita dan kolom status “Rows” akan mengonfirmasi hanya satu data yang tersisa.

Di atas bagian utama jendela terdapat serangkaian tab perintah, dimulai dengan “Structure” dan “SQL”. Pilih tab bernama “Import”. Bagian pertama dari jendela “Import” adalah “File to import:”. Klik kata “Browse” di samping kotak teks yang berisi nilai awal “No file selected” dan navigasikan ke sistem file Anda ke lokasi tempat Anda baru saja menulis atau menyalin file .sql Anda. Pastikan Anda memilih file yang benar.

Anda tidak perlu mengubah parameter default untuk impor, jadi cukup gulir ke bagian bawah halaman ini dan klik tombol “Import”. Tahan napas, silangkan jari, dan sebagainya. Lakukan dengan cara Anda sendiri.

Setelah impor selesai, kembali ke menu atas dan pilih tab “Browse” lagi. Kira-kira di tengah layar Anda seharusnya melihat kedua data di tabel Anda, dengan data yang baru saja Anda hapus telah berhasil dikembalikan melalui proses impor Anda.

Selamat!

Anda sekarang telah berhasil – secara manual – melakukan proses backup dari Container MariaDB Server ke sistem file lokal Anda. Jika Anda pernah perlu melakukan pemulihan dari salah satu backup rutin Anda, “dalam keadaan darurat” – karena Anda benar-benar perlu memulihkan data – inilah proses yang harus digunakan.

Kita hampir selesai!!!

13. Mengotomatisasi Proses Backup

Meskipun langkah manual ini sangat membantu, proses ini bisa menjadi cukup membosankan jika harus dilakukan secara manual setiap kali Anda ingin melakukan backup, jadi mari kita otomatisasi dengan bantuan utilitas cron yang disediakan oleh QNAP NAS dan Sistem Operasi QTS. (Untuk pembaca non-Unix, “cron” adalah singkatan lain – kali ini dari “chronological”, yang menunjukkan bahwa ini adalah kontrol berbasis waktu.)

Pertama, kita akan menulis sebuah skrip shell untuk menjalankan langkah-langkah backup untuk kita. Kita akan menempatkan skrip ini di lokasi folder yang terlihat oleh kita sebagai administrator NAS, tetapi dilindungi dari pengguna biasa. Ini dapat dilakukan melalui “Admin Share” khusus, atau menggunakan Public share lalu menggunakan izin folder untuk membatasi akses ke folder skrip. Dan tentu saja, lokasi yang kita pilih juga harus didaftarkan dalam backup HBS3 juga…

File tersebut perlu berisi instruksi yang setara dengan contoh berikut – yang dapat Anda sesuaikan sesuai kebutuhan Anda:-

#!/bin/bash
#

docker exec -it {YourContainerName} mariadb-dump -h 127.0.0.1 -P3306
-u {yourBackupAccountName} -p{yourBackupAccountPassword}
–databases {yourDatabaseName}
–result-file /var/backups/{yourDatabaseName}.sql

Jika Anda telah membuat folder “bridge” dari container MariaDB Anda ke sistem file NAS, Anda tidak memerlukan baris berikut ini:

docker cp {YourContainerName}:var/backups/{yourDatabaseName}.sql /share/NFSv=4/Public/Backup/

Sebagai gantinya, Anda harus mengubah parameter “–result-file” ke direktori tujuan yang ditunjuk di “Public” share NAS Anda.

Perintah kedua, “docker cp”, berarti “Docker Copy” dan melakukan persis seperti namanya, yaitu mengotomatisasi penyalinan backup yang ditempatkan di dalam container ke lokasi di luar container dari mana file tersebut dapat didaftarkan dalam backup reguler.

Perhatikan secara khusus bahwa awalan tanda hubung untuk “–databases” dan “–result-file” adalah \dua\ tanda hubung, bukan satu tanda hubung … Juga perhatikan bahwa Anda tidak perlu menyertakan awalan “sudo” dalam versi skrip dari perintah-perintah ini - cron akan menjalankan skrip dengan izin root untuk Anda.

Untuk contoh yang sedang kita bahas, kita akan mengasumsikan skrip di atas disimpan sebagai berikut:-

/share/NFSv=4/Public/Software/QNAP/scripts/DockerMariaDBbackup.sh

Arahkan ke folder yang berisi skrip Anda dan jalankan perintah berikut:-

ls -al

Periksa izin untuk skrip, yang seharusnya seperti -rwxrwxr-x

Tidak terlalu penting apa pun izinnya, selama karakter “x” muncul di masing-masing dari tiga triplet, untuk menunjukkan bahwa file tersebut dapat dieksekusi oleh pemilik, grup pemilik, dan pengguna lain.

Uji bahwa file skrip akan berjalan seperti yang diharapkan dengan memasukkan perintah berikut dari sesi SSH NAS Anda:

sudo /share/NFSv=4/Public/Software/QNAP/scripts/DockerMariaDBbackup.sh

ganti lokasi folder dan nama skrip sesuai dengan versi file Anda.

Karena kita menjalankan skrip ini dengan izin root \[dengan menambahkan awalan “sudo” pada perintah\], Anda akan diminta memasukkan password. Masukkan password tersebut dan skrip seharusnya berjalan dengan sukses. Gunakan File Manager di workstation Anda untuk pergi ke lokasi folder “/Backup/” dan periksa tanggal file yang baru saja Anda buat untuk memastikan file tersebut berhasil ditulis.

Sekarang, satu-satunya hal yang tersisa adalah mengotomatisasi penjadwalan pekerjaan backup.

Pertama, mari kita navigasikan ke Dokumentasi Referensi QNAP, di sini dan baca dengan seksama instruksi mereka tentang cara mengedit crontab. Seperti yang dapat Anda lihat dari instruksi tersebut, Anda tidak boleh mencoba pendekatan “konvensional” melalui “crontab -e”, tetapi Anda harus mengedit file yang relevan secara manual.

Selanjutnya, buka tab browser baru dan navigasikan ke https://crontab.guru/, yang merupakan halaman utilitas yang sangat berguna untuk membantu Anda membuat “crontab string” yang akan menjalankan pekerjaan backup Anda pada hari dan waktu yang Anda inginkan.

Setelah Anda memiliki sintaks untuk menjadwalkan cron job dari halaman guru – dan seperti yang dijelaskan dengan jelas dalam tautan dokumentasi referensi QNAP di atas, edit pengaturan crontab QNAP Anda dengan menambahkan string tersebut ke file yang ditunjuk.

Sebagai gambaran tentang seperti apa hasil akhirnya… Saya menjalankan backup saya pada pukul 01:45 setiap pagi, dan entri crontab untuk itu terlihat seperti ini:

45 1 * * * /share/NFSv=4/Public/Software/QNAP/scripts/DockerMariaDBbackup.sh 2>/dev/null

Mungkin tidak langsung terlihat, tetapi bagian dari perintah yang bertuliskan “2>/dev/null” pada dasarnya menginstruksikan cron bahwa jika skrip menghasilkan error, error tersebut akan langsung dibuang. Mengapa saya melakukan itu? Karena skripnya sederhana dan saya sudah sangat menguji salinan saya - dan karena saya memvalidasi outputnya setidaknya seminggu sekali. Juga, sesuatu yang perlu diperhatikan tentang entri ini dalam file crontab… Setiap kali QTS diperbarui, perubahan biasanya akan mengurutkan ulang urutan entri yang muncul dalam file crontab. Saya tidak mengatakan itu sepenuhnya acak, tetapi saya akui jika ada polanya, saya belum menemukannya. Jangan khawatir jika Anda memeriksa lagi di lain waktu dan file yang Anda tambahkan bukan baris terakhir dalam daftar crontab – cukup pindai daftar tersebut dan file Anda akan ada di sana.

14. Beri Tepuk Tangan untuk Diri Sendiri

Serius, bukan hanya karena berhasil mengatur MariaDB di ContainerStation, mengonfigurasi dan menguji backup lalu membuat jadwal backup otomatis. Maksud saya, selamat karena punya stamina untuk membaca panduan ini sampai ke bagian paling bawah!

Saya benar-benar terkesan!

Sebelum Anda pergi, ada dua permintaan kecil dari saya. Pertama, jika Anda melihat sesuatu yang bisa diperbaiki, diperjelas, disederhanakan, atau dikoreksi, tolong tinggalkan komentar tentang hal itu – atau kirim pesan langsung kepada saya.

Kedua, jika panduan ini membantu Anda, tolong pertimbangkan untuk “membalas kebaikan”. Jika Anda menemukan solusi – baik untuk QNAP NAS, MariaDB, atau hal lain, temukan forum yang relevan dan tuliskan pengalaman Anda. Anda tidak hanya membantu diri sendiri, tapi juga membantu kita semua.

Terima kasih.