Tutorial ini membahas proses menjalankan database MySQL di jaringan pribadi di Google Cloud untuk memungkinkan akses jarak jauh yang aman ke database tersebut menggunakan Compute Engine.
Gunakan tutorial ini jika Anda ingin menginstal database MySQL sendiri di Compute Engine, tetapi ingin membatasi akses hanya untuk klien MySQL resmi yang juga berjalan di Compute Engine. Anda mungkin ingin mengelola instance MySQL sendiri daripada menggunakan layanan terkelola, karena instance lintas region, penggunaan parameter lanjutan, dan kebutuhan performa tertentu.
Tutorial ini menjelaskan cara mengonfigurasi aplikasi server MySQL untuk menerima traffic jarak jauh dari klien MySQL yang diinstal pada instance Compute Engine di jaringan pribadi yang sama.
Untuk mengetahui informasi tentang cara memilih opsi deployment MySQL yang tepat, lihat Cara menginstal MySQL di Compute Engine.
Tutorial ini mengasumsikan bahwa Anda sudah memahami hal-hal berikut:
- Perintah Linux dasar
- Ubuntu-server 18.04
- MySQL 5.7
- Compute Engine
Arsitektur
Dalam tutorial ini, Anda akan men-deploy dua instance Compute Engine. Satu instance adalah server dan instance lainnya adalah klien seperti yang ditunjukkan dalam diagram berikut:
Tujuan
- Membuat instance Compute Engine dan menginstal server MySQL.
- Membuat instance Compute Engine dan menginstal klien MySQL.
- Mengonfigurasi server MySQL untuk akses jarak jauh.
- Menghapus akses publik ke server MySQL.
- Terhubung ke MySQL dari jarak jauh.
- Membuat aturan firewall Kontrol Layanan VPC.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Compute Engine
- Cloud Storage
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Lihat Pembersihan untuk mengetahui detail selengkapnya.
Membuat instance Compute Engine
Buat dua instance untuk MySQL—klien dan instance server.
Membuat instance klien Compute Engine
-
Name the instance
my-client
. -
Tetapkan flag
--zone
ke zona tempat Anda ingin membuat instance. -
Tetapkan flag
--image-project
keubuntu-os-cloud
. -
Tetapkan flag
--image-family
keubuntu-1804-lts
. -
Tetapkan
--scopes
flag kehttps://www.googleapis.com/auth/cloud-platform
. -
Create a Compute Engine instance. Configure the instance as follows:
-
Name the instance
my-server
. -
Tetapkan flag
--zone
ke zona tempat Anda ingin membuat instance. -
Tetapkan flag
--image-project
keubuntu-os-cloud
. -
Tetapkan flag
--image-family
keubuntu-1804-lts
. -
Tetapkan
--scopes
flag kehttps://www.googleapis.com/auth/cloud-platform
. - Untuk terhubung ke instance
my-client
, gunakan perintahssh
. - Update pengelola paket
apt-get
.sudo apt-get update
- Instal paket klien MySQL.
sudo apt-get -y install mysql-client-5.7
- Untuk terhubung ke instance
my-server
, gunakan perintahssh
. - Update pengelola paket
apt-get
.sudo apt-get update
- Instal paket server MySQL.
sudo apt-get -y install mysql-server-5.7
Dalam sesi SSH ke instance
my-server
Anda, gunakan perintah berikut untuk meningkatkan keamanan penginstalan MySQL Anda.sudo mysql_secure_installation
Tekan
enter
untuk melewati penyiapan pluginVALIDATE PASSWORD
.Masukkan sandi root baru dua kali.
Untuk menghapus pengguna anonim, masukkan
Y
dan tekanenter
.Untuk mencegah login root jarak jauh, masukkan
Y
dan tekanenter
.Untuk menghapus database pengujian, masukkan
Y
lalu tekanenter
.Untuk memuat ulang tabel hak istimewa, masukkan
Y
lalu tekanenter
.Di Cloud Shell, gunakan SSH untuk terhubung ke instance
my-server
.Update file konfigurasi
/etc/mysql/mysql.conf.d/mysqld.cnf
dengan informasi berikut:LOCAL_IP=$(curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \ -H "Metadata-Flavor: Google") sudo sed -i "s|bind-address.*|bind-address = $LOCAL_IP|" /etc/mysql/mysql.conf.d/mysqld.cnf
Mulai ulang layanan MySQL untuk menerapkan perubahan ke server yang berjalan.
sudo service mysql restart
Pastikan server berjalan secara lokal. Ganti
[ROOT_PASSWORD]
dengan sandi root server MySQL yang Anda buat di langkah sebelumnya.sudo mysql --user=root -p[ROOT_PASSWORD] -e "show databases"
Output-nya akan terlihat mirip dengan berikut ini:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
Di Cloud Shell, buat variabel lingkungan untuk alamat IP internal
my-client
.CLIENT_IP=$(gcloud compute instances describe my-client \ --zone=ZONE \ --format='value(networkInterfaces[0].networkIP)')
Buat pengguna MySQL baru dengan sandi. Ganti
[MY_PASSWORD]
dengan sandi Anda,[ROOT_PASSWORD]
dengan sandi pengguna root MySQL Anda.sudo mysql -uroot -p[ROOT_PASSWORD] \ -e "CREATE USER 'TESTUSER'@'${CLIENT_IP}' IDENTIFIED BY '[MY_PASSWORD]';"
Berikan izin kepada pengguna MySQL baru untuk login ke server dari alamat IP internal
my-client
.sudo mysql -uroot -p[ROOT_PASSWORD] -e \ "GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'${CLIENT_IP}' \ IDENTIFIED BY '[MY_PASSWORD]';"
Untuk menghapus alamat IP eksternal, update setelan konfigurasi di Cloud Shell. Ganti
[ZONE]
dengan zona Google Cloud Anda.gcloud compute instances delete-access-config my-server \ --access-config-name "external-nat" \ --zone="ZONE"
- Di Cloud Shell, gunakan SSH untuk terhubung ke instance
my-client
. Uji koneksi Anda dengan membuat daftar database.
sudo mysql --host=my-server --user=TESTUSER \ --password=[MY_PASSWORD] -e "SHOW DATABASES;"
Output-nya akan tampak mirip dengan berikut ini:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
Di Cloud Shell, buat aturan firewall untuk mengizinkan komunikasi dari
mysql-client
kemysql-server
.gcloud compute firewall-rules create "mysql-remote-access" \ --allow tcp:3306 --source-tags "mysql-client" \ --target-tags "mysql-server"
- Tambahkan alamat IP eksternal ke
my-server
untuk mengizinkan konektivitas eksternal. - Tambahkan alamat IP sumber klien eksternal ke aturan firewall.
- Ubah akun
TESTUSER
, atau buat sebuah akun pengguna, yang terikat dengan alamat IP sumber klien eksternal Anda.
gcloud compute instances create my-server --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
Menginstal klien MySQL
Langkah-langkah berikut menjelaskan cara menginstal MySQL pada instance Compute Engine.
Menginstal server MySQL
Langkah-langkah berikut menjelaskan cara menginstal MySQL pada instance Compute Engine.
Meningkatkan keamanan penginstalan MySQL
Anda harus membuat sandi root untuk MySQL dan melakukan pemeliharaan keamanan dasar pada konfigurasi server MySQL Anda. Untuk mengetahui informasi selengkapnya, baca dokumentasi MySQL untuk
mysql_secure_installation
.Mengonfigurasi server MySQL
Sebelum dapat terhubung ke server MySQL dari jarak jauh, Anda perlu mengonfigurasinya untuk memproses alamat IP internalnya. Kemudian, Anda membuat akun pengguna non-root agar klien MySQL dapat terhubung ke server.
Semua perintah klien MySQL harus menyertakan flag command line tertentu (misalnya, untuk mengautentikasi). Perintah MySQL di bagian ini mencakup flag berikut:
--user
untuk nama pengguna,-p
untuk sandi, dan-e
untuk menjalankan pernyataan yang diberikan dan segera keluar. Untuk mengetahui informasi selengkapnya, lihat Referensi opsi perintah MySQL 5.7.Membuat pengguna MySQL
Terhubung dari jarak jauh karena pengguna root dinonaktifkan dengan perintah
mysql_secure_installation
sebelumnya. Anda harus membuat pengguna baru dengan izin yang diperlukan untuk memungkinkan koneksi jarak jauh.Hapus alamat IP eksternal untuk
my-server
Instance
my-server
tidak memerlukan alamat IP eksternal karena klien dapat mengaksesmy-server
melalui alamat IP internal.Memverifikasi akses jarak jauh dari instance klien ke server
Langkah-langkah berikut menjelaskan cara terhubung ke server MySQL di
my-server
dari instancemy-client
Anda.Langkah-langkah ini memverifikasi bahwa klien MySQL Anda berhasil terhubung ke server MySQL melalui alamat IP internal.
Pertimbangan firewall dalam lingkungan produksi
Konfigurasi jaringan default di Google Cloud mencakup aturan firewall,
default-allow-internal
, yang memungkinkan traffic internal antara instance Compute Engine pada berbagai port, termasuk port MySQL, port3306
. Di lingkungan non-default dengan jejak keamanan yang telah ditetapkan, Anda mungkin perlu membuat aturan firewall agar instancemy-client
Anda dapat berkomunikasi dengan instancemy-server
melalui jaringan. Jika tidak, kedua instance tidak dapat saling berkomunikasi.Anda dapat mendasarkan aturan firewall pada rentang atau tag alamat IP. Rentang alamat IP berguna jika Anda ingin memberikan akses ke berbagai alamat IP internal. Atau, jika Anda ingin memberikan akses ke instance tertentu di jaringan Anda, tag dapat memberikan solusi yang lebih fleksibel. Tag memudahkan Anda menambahkan klien baru tanpa memberikan akses ke berbagai alamat IP. Anda hanya perlu menetapkan tag yang sesuai ke instance klien MySQL yang baru. Misalnya, Anda dapat membuat aturan firewall baru yang mengizinkan traffic dari semua instance klien yang diberi tag dengan
mysql-client
.Untuk mendukung aturan firewall menggunakan tag, Anda dapat menetapkan tag yang sesuai ke VM
my-client
danmy-server
di Cloud Shell.gcloud compute instances add-tags my-client --tags mysql-client --zone=ZONE gcloud compute instances add-tags my-server --tags mysql-server --zone=ZONE
Menambahkan aturan firewall baru
Langkah-langkah berikut menjelaskan cara membuat aturan firewall baru untuk memungkinkan instance dengan tag
my-client
berkomunikasi dengan instance yang memiliki tagmy-server
menggunakan port3306
.Sekarang Anda dapat terhubung ke MySQL dari
my-client
.Mengakses pertimbangan dari klien eksternal
Tutorial ini membahas akses dari klien MySQL ke server MySQL yang keduanya berjalan di Compute Engine. Akses dari klien yang tidak berjalan di Compute Engine berada di luar cakupan tutorial ini. Jika Anda perlu mengizinkan akses non-Compute Engine, ubah hal berikut:
-
Name the instance
gcloud compute instances create my-client --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
Membuat instance server Compute Engine
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project atau menghapus instance.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus instance
Untuk menghapus instance Compute Engine:
- In the Google Cloud console, go to the VM instances page.
-
Select the checkbox for
your
my-server
instance. - To delete the instance, click More actions, click Delete, and then follow the instructions.
Langkah berikutnya
- Baca ketersediaan tinggi untuk MySQL.
- Baca Cara menyiapkan MySQL di Compute Engine.
- Mengonfigurasi Cloud Logging untuk log MySQL.
Pelajari Cloud SQL.
Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.