0

Sharing pengalaman – Setup secondary mysql (versi 5.7) di VPS menggunakan docker

Setup secondary mysql 5.7 di VPS.

Saya buat tutorial ini berdasarkan issue yang saya dapat di tempat kerja. Saya akan share disini.

Casenya waktu itu saya ingin menjalankan 2 mysql sekaligus di satu VPS yang sama. Waktu itu mysql 8.0 sudah terinstall di VPS dengan port 3306, dan saya ingin install mysql lainnya yaitu versi 5.7. Tapi masalahnya adalah port 3306 sudah terpakai, bagaimana caranya menggunakan port lain?

Setelah mencari digoogle, akhirnya ketemu caranya yaitu menggunakan docker. Mysql 5.7 kita install menggunakan docker dengan port 3307.


Supaya ada bayangan, kira-kira seperti ini yang akan kita buat:

  • Kondisi sekarang (garis warna merah)
    Seperti yang saya jelaskan diawal tadi, jadi mysql 8.0 sudah berjalan diatas VPS dengan port 3306, konfigurasi mysql (my.cnf) dan datanya disimpan dalam storage VPS
  • Kondisi yang akan kita buat (garis warna hijau)
    Kita akan mensetup mysql 5.7 dengan port 3307 menggunakan docker. Jadi kita akan buat docker containernya lalu file konfigurasi mysql (my.cnf) dan data mysqlnya akan kita mount ke dalam container. Jadi containernya akan membaca data mysqlnya dari storage VPS. Jika terjadi accident semisal containernya terhapus, maka konfigurasi dan data mysql tetap aman karena berada diluar container.

Oke sekarang kita sudah tahu kondisinya, saatnya setup mysql 5.7 di docker. Berikut langkah-langkahnya:

  1. Pull/download image mysql:5.7
  2. Buat file konfigurasi mysql my.cnf
  3. Jalankan mysql dengan membuat container
  4. Test koneksi ke mysql 5.7

1. Pull image mysql:5.7

Saya asumsikan disini kita sudah menginstall docker di lokal komputer.

Langkah pertama kita download / pull dulu image mysql 5.7 dari official mysql di dockerhub.

docker pull mysql:5.7

Setelah terdownload, image akan tersimpan di lokal komputer. Kita bisa mengeceknya dengan

docker images mysql:5.7

Hasil outputnya kira-kira akan seperti ini

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7       2be84dd575ee   2 weeks ago   569MB

Untuk ukuran mysql 5.7 sebesar 569MB.

2. Buat file konfigurasi mysql my.cnf

Selanjutnya buat file konfigurasi untuk mysql terlebih dahulu. File my.cnf ini nantinya akan digunakan saat membuat container docker.

Contoh file my.cnf yang saya buat adalah seperti ini:

my.cnf

[mysqld]
default-time-zone = 'Asia/Bangkok'
group_concat_max_len = 1000000

sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
bind-address = 0.0.0.0

innodb_buffer_pool_size = 10G
innodb_buffer_pool_instances = 7
innodb_log_file_size = 5G

max_connections = 500

Penjelasan:

  • Saya menggunakan timezone Asia/Bangkok karena aplikasi yang saya buat untuk area Indonesia
  • Saya menggunakan group_concat(), dan saya set max length nya adalah 1000000
  • Bind address saya set 0.0.0.0 supaya mysql bisa diakses dari mana saja
  • Saya menggunakan engine innoDB, jd saya set innodb buffer supaya data mysql bisa diload ke dalam RAM
  • Maksimal koneksi yang bisa masuk ke database adalah 500 koneksi


File my.cnf saya simpan di path /var/www/html/docker/test/my.cnf

3. Jalankan mysql dengan membuat container

Buat container dari image mysql 5.7 yang sudah kita download tadi

docker run --name my-container-app -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 --restart unless-stopped -v /var/www/html/docker/test:/etc/mysql/conf.d/ -v my-container-app:/var/lib/mysql mysql:5.7

Penjelasan:

  • docker run = Membuat container
  • –name my-container-app = Berinama containernya dengan nama my-container-app
  • -d = Menjalankan mysql dalam mode detach (in background)
  • -p 3307:3306 = Mengekspos port. 3307 adalah port yang bisa diakses dari luar, sedangkan 3306 merupakan internal port pada container
  • -e MYSQL_ROOT_PASSWORD=123 = Set password untuk mysql. Kalian bisa ganti passwordnya dengan yang lain
  • –restart unless-stopped = Container akan selalu direstart jika terjadi crash, kecuali distop
  • -v /var/www/html/docker/test:/etc/mysql/conf.d/ = mount folder test yang ada dihost ke folder conf.d yang ada dicontainer. Folder test tadi berisi file my.cnf
  • -v my-container-app:/var/lib/mysql = mount folder my-container-app yang ada dihost ke folder mysql yang ada dicontainer. Folder my-container-app akan tergenerate otomatis di dalam folder /var/lib/docker/volumes/ ketika kita menjalankan docker run
  • mysql:57 = image yang sudah kita download tadi


Setelah menjalankan command diatas, pastikan containernya sudah terbuat dan running. Kita bisa cek dengan:

docker ps

Akan menampilkan container baru yang sedang running:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2962cb634031 mysql:5.7 "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp my-container-app

4. Test koneksi ke MySQL 5.7

Terakhir kita test koneksi ke mysql 5.7. Disini saya menggunakan mysql-client:

mysql -u root -p -P 3307 -h 172.17.0.1

Pada command diatas, kita login ke mysql melalui IP 172.17.0.1. IP ini merupakan IP docker jika kita cek menggunakan ifconfig diterminal. Kemungkinan IPnya akan berbeda, jadi harap sesuaikan saja.

Kemudian user untuk login kita menggunakan user root, password dan port 3307.

Jika berhasil connect, tampilannya akan seperti ini:

Setup secondary mysql 5.7 di VPS


Diakses dari internet

Jika ingin mysql diakses dari luar (internet), jangan lupa buat user mysqlnya dan set % agar bisa diakses dari luar:

'namauser'@'%'

Dan jika ada security group / firewall, jangan lup allow port 3307 -nya pada inbound rule.



—–

Demikian tutorial Setup secondary mysql 5.7 di VPS menggunakan docker. Semoga bermanfaat!

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.