Tutorial ini menunjukkan dua cara untuk meng-clone database MySQL yang berjalan di Compute Engine. Salah satu metode menggunakan snapshot persistent disk. Metode lainnya menggunakan ekspor dan impor MySQL native, dengan mentransfer file ekspor menggunakan Cloud Storage. Cloud Storage adalah layanan penyimpanan objek Google Cloud. Layanan ini menawarkan cara yang mudah, dengan keamanan yang ditingkatkan, andal, dan memiliki ketersediaan tinggi untuk menyimpan file.
Cloning adalah proses penyalinan database ke server lain. Salinan tersebut tidak bergantung pada database sumber dan dipertahankan sebagai snapshot untuk waktu tertentu. Anda dapat menggunakan database yang di-clone untuk berbagai tujuan tanpa membebani server produksi atau mempertaruhkan integritas data produksi. Beberapa tujuannya meliputi:
- Menjalankan kueri analisis.
- Pengujian pemuatan atau pengujian integrasi aplikasi Anda.
- Mengekstrak data untuk mengisi data warehouse.
- Menjalankan eksperimen pada data.
Setiap metode cloning yang dijelaskan dalam tutorial ini memiliki kelebihan dan kekurangan. Metode yang ideal bergantung pada situasi Anda. Tabel berikut menyoroti beberapa masalah utama.
Masalah | Metode 1: Snapshot disk | Metode 2: Mengekspor dan mengimpor menggunakan Cloud Storage |
---|---|---|
Kapasitas disk tambahan yang diperlukan pada instance MySQL | Tidak memerlukan ruang disk tambahan | Ruang tambahan yang diperlukan untuk menyimpan file ekspor saat membuat dan memulihkan |
Pemuatan tambahan pada instance MySQL sumber selama cloning | Tidak ada pemuatan tambahan | Pemuatan tambahan pada CPU dan I/O saat membuat dan mengupload file ekspor |
Durasi cloning | Relatif cepat untuk database besar | Relatif lambat untuk database besar |
Dapat meng-clone dari instance MySQL secara eksternal ke Google Cloud | Tidak | Ya |
Kompleksitas | Urutan perintah kompleks untuk memasang disk yang di-clone | Serangkaian perintah yang relatif mudah untuk melakukan clone |
Dapat memanfaatkan sistem pencadangan yang ada | Ya, jika sistem pencadangan menggunakan snapshot disk Google Cloud | Ya, jika sistem pencadangan mengekspor file ke Cloud Storage |
Perincian cloning | Hanya dapat meng-clone seluruh disk | Hanya dapat meng-clone database yang ditentukan |
Konsistensi data | Konsisten pada poin snapshot | Konsisten pada poin ekspor |
Dapat menggunakan Cloud SQL sebagai sumber | Tidak | Ya, jika versi yang sama digunakan |
Dapat menggunakan Cloud SQL sebagai tujuan | Tidak | Ya |
Tutorial ini mengasumsikan bahwa Anda sudah memahami administrasi database MySQL dan command line Linux.
Tujuan
- Mempelajari cara menjalankan database MySQL di Google Cloud.
- Mempelajari cara membuat database demo di disk sekunder.
- Mempelajari cara meng-clone database MySQL menggunakan snapshot disk Compute Engine.
- Mempelajari cara meng-clone database MySQL dengan mentransfer file ekspor menggunakan Cloud Storage.
- Mempelajari cara meng-clone database MySQL ke Cloud SQL dengan mentransfer file ekspor menggunakan Cloud Storage.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- Aktifkan Compute Engine API. Aktifkan API
Menyiapkan lingkungan
Untuk menyelesaikan tutorial ini, Anda perlu menyiapkan lingkungan komputasi dengan hal berikut:
- Instance MySQL di Compute Engine (bernama
mysql-prod
) untuk mewakili server database produksi Anda. - Disk tambahan (bernama
mysql-prod-data
) yang terpasang ke server produksi untuk menyimpan database produksi Anda. - Salinan
database
Employees
yang diimpor kemysql-prod
untuk menyimulasikan database produksi yang ingin Anda clone. - Instance MySQL di Compute Engine (bernama
mysql-test
) untuk mewakili server database pengujian Anda. Anda meng-clone database ke server ini.
Diagram berikut mengilustrasikan arsitektur ini.
Membuat instance VM produksi
Untuk menyimulasikan lingkungan produksi, siapkan instance VM Compute Engine yang menjalankan MySQL di Debian Linux.
Instance VM untuk tutorial ini menggunakan dua disk: disk sebesar 50 GB untuk akun pengguna dan OS, serta disk 100 GB untuk penyimpanan database.
Di Compute Engine, menggunakan disk terpisah tidak memberikan manfaat performa. Performa disk ditentukan oleh total kapasitas penyimpanan semua disk yang terpasang ke sebuah instance dan oleh jumlah total vCPU pada instance VM Anda. Oleh karena itu, file log dan database dapat berada di disk yang sama.
Buka Cloud Shell.
Tetapkan zona pilihan Anda:
ZONE=us-east1-b REGION=us-east1 gcloud config set compute/zone "${ZONE}"
Buat instance Compute Engine
gcloud compute instances create mysql-prod \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --boot-disk-size=50GB \ --boot-disk-device-name=mysql-prod \ --create-disk="mode=rw,size=100,type=pd-standard,name=mysql-prod-data,device-name=mysql-prod-data"
Perintah ini memberi instance akses penuh ke Google Cloud API, membuat disk sekunder sebesar 100 GB, dan memasang disk ke instance. Abaikan peringatan performa disk karena Anda tidak memerlukan performa tinggi untuk tutorial ini.
Menyiapkan disk tambahan
Disk kedua yang terpasang ke instance produksi digunakan untuk menyimpan database produksi Anda. Disk ini kosong, jadi Anda perlu mempartisi, memformat, dan memasangnya.
Di Konsol Google Cloud, buka halaman Instance VM.
Pastikan tanda centang hijau check ditampilkan di samping nama instance
mysql-prod
, yang menunjukkan bahwa instance sudah siap.Klik tombol SSH di samping instance
mysql-prod
. Browser akan membuka koneksi terminal ke instance.Di jendela terminal, tampilkan daftar disk yang terpasang ke instance Anda:
lsblk
Outputnya adalah sebagai berikut:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk └─sda1 8:1 0 50G 0 part / sdb 8:16 0 100G 0 disk
Disk bernama
sdb
(100 GB) adalah disk data Anda.Format disk
sdb
dan buat satu partisi dengan sistem file ext4:sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard \ /dev/sdb
Buat direktori data MySQL sebagai direktori pemasangan untuk disk data:
sudo mkdir -p /var/lib/mysql
Untuk memasang disk secara otomatis di direktori pemasangan yang Anda buat, tambahkan entri ke file
/etc/fstab
:echo "UUID=`sudo blkid -s UUID -o value /dev/sdb` /var/lib/mysql ext4 discard,defaults,nofail 0 2" \ | sudo tee -a /etc/fstab
Pasang disk:
sudo mount -av
Hapus semua file dari disk data agar bebas untuk digunakan oleh MySQL sebagai direktori data:
sudo rm -rf /var/lib/mysql/*
Menginstal server MySQL
Anda perlu mendownload dan menginstal MySQL Community Edition. Direktori data MySQL dibuat di disk tambahan.
Pada sesi SSH yang terhubung ke
mysql-prod
, download dan instal paket konfigurasi MySQL:wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
Saat diminta, pilih opsi Server & Cluster MySQL, lalu pilih mysql-5.7.
Dalam daftar, pilih opsi Oke untuk menyelesaikan konfigurasi paket.
Muat ulang cache repositori dan instal paket mysql-community:
sudo apt-get update sudo apt-get install -y mysql-community-server mysql-community-client
Jika Anda mendapatkan peringatan bahwa direktori data sudah ada, pilih Oke.
Saat diminta untuk memberikan sandi root, buat dan masukkan sandi. Catat sandi atau simpan untuk sementara di tempat yang aman.
Mendownload dan menginstal database contoh
Pada sesi SSH yang terhubung ke instance
mysql-prod
, instal git:sudo apt-get install -y git
Clone repositori GitHub yang berisi skrip database
Employees
:git clone https://github.com/datacharmer/test_db.git
Ubah direktori ke direktori untuk skrip database
Employees
:cd test_db
Jalankan skrip pembuatan database
Employees
:mysql -u root -p -q < employees.sql
Saat diminta, masukkan sandi root yang Anda buat sebelumnya.
Untuk memastikan database contoh berfungsi, Anda dapat menjalankan kueri yang menghitung jumlah baris dalam tabel
employees
:mysql -u root -p -e "select count(*) from employees.employees;"
Saat diminta, masukkan sandi root yang Anda buat sebelumnya.
Outputnya adalah sebagai berikut:
+----------+ | count(*) | +----------+ | 300024 | +----------+
Membuat instance VM pengujian
Di bagian ini, Anda akan membuat instance VM MySQL bernama mysql-test
sebagai
tujuan untuk database yang di-clone. Konfigurasi instance ini
identik dengan instance produksi. Namun, Anda tidak membuat disk data
kedua. Sebagai gantinya, Anda akan memasang disk data itu nanti dalam tutorial ini.
Buka Cloud Shell.
Buat instance MySQL pengujian:
gcloud compute instances create mysql-test \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --boot-disk-size=50GB \ --boot-disk-device-name=mysql-test
Anda dapat mengabaikan peringatan performa disk karena tidak memerlukan performa tinggi untuk tutorial ini.
Menginstal server MySQL pada instance VM pengujian
Anda juga perlu mendownload dan menginstal MySQL Community Edition ke
instance VM mysql-test
.
Pada sesi SSH yang terhubung ke
mysql-test
, download dan instal paket konfigurasi MySQL:wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
Saat diminta, pilih opsi Server & Cluster MySQL, lalu pilih mysql-5.7.
Dalam daftar, pilih opsi Oke untuk menyelesaikan konfigurasi paket.
Muat ulang cache repositori dan instal paket mysql-community:
sudo apt-get update sudo apt-get install -y mysql-community-server mysql-community-client
Saat diminta untuk memberikan sandi root, buat dan masukkan sandi. Catat sandi atau simpan untuk sementara di tempat yang aman.
Meng-clone database menggunakan snapshot disk Compute Engine
Salah satu cara untuk meng-clone database MySQL yang berjalan di Compute Engine adalah dengan menyimpan database di disk data terpisah dan menggunakan snapshot persistent disk untuk membuat clone disk tersebut.
Snapshot persistent disk memungkinkan Anda mendapatkan salinan data dalam disk untuk waktu tertentu. Menjadwalkan snapshot disk adalah salah satu cara untuk mencadangkan data Anda secara otomatis.
Di bagian tutorial ini, Anda akan melakukan hal-hal berikut:
- Mengambil snapshot disk data server produksi.
- Membuat disk baru dari snapshot.
- Memasang disk baru ke server pengujian.
- Memulai ulang server MySQL pada instance pengujian sehingga server menggunakan disk baru sebagai disk data.
Diagram berikut menunjukkan cara meng-clone database menggunakan snapshot disk.
Membuat snapshot disk
Buka Cloud Shell.
Buat snapshot disk data Anda di zona yang sama dengan instance VM:
gcloud compute disks snapshot mysql-prod-data \ --snapshot-names=mysql-prod-data-snapshot \ --zone="${ZONE}"
Setelah beberapa menit, snapshot Anda akan dibuat.
Memasang snapshot disk ke instance pengujian
Anda harus membuat disk data baru dari snapshot yang telah dibuat, lalu
memasangnya ke instance mysql-test
.
Buka Cloud Shell.
Buat persistent disk baru menggunakan snapshot disk produksi untuk kontennya:
gcloud beta compute disks create mysql-test-data \ --size=100GB \ --source-snapshot=mysql-prod-data-snapshot \ --zone="${ZONE}"
Pasang disk baru ke instance
mysql-test
Anda dengan izin baca-tulis:gcloud compute instances attach-disk mysql-test \ --disk=mysql-test-data --mode=rw
Memasang disk data baru di Linux
Untuk menggunakan disk data yang di-clone sebagai direktori data MySQL, Anda harus menghentikan instance MySQL dan memasang disk.
Pada sesi SSH yang terhubung ke
mysql-test
, hentikan layanan MySQL:sudo service mysql stop
Di jendela terminal, tampilkan daftar disk yang terpasang ke instance Anda:
lsblk
Outputnya adalah sebagai berikut:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk └─sda1 8:1 0 50G 0 part / sdb 8:16 0 100G 0 disk
Disk bernama
sdb
(100 GB) adalah disk data Anda.Pasang disk data MySQL ke direktori data MySQL:
sudo mount -o discard,defaults /dev/sdb /var/lib/mysql
Pemasangan disk ini akan menyembunyikan setiap tablespace dan file konfigurasi MySQL, lalu menggantinya dengan konten disk.
Dengan perintah ini, disk dipasang untuk sementara dan tidak dipasang kembali saat booting sistem. Jika Anda ingin memasang disk saat booting sistem, buat entri
fstab
. Untuk mengetahui informasi selengkapnya, baca bagian Menyiapkan disk tambahan di awal tutorial ini.
Memulai MySQL dalam instance pengujian
Pada sesi SSH yang terhubung ke
mysql-test
, mulai layanan MySQL:sudo service mysql start
Untuk memastikan database yang di-clone berfungsi, jalankan kueri yang menghitung jumlah baris dalam tabel
employees
:mysql -u root -p -e "select count(*) from employees.employees;"
Saat diminta, masukkan sandi root untuk server database
mysql-prod
. Sandi root instance produksi diperlukan karena seluruh direktori data MySQL adalah clone direktori data instancemysql-prod
, sehingga semua database, pengguna database, dan sandi mereka akan disalin.+----------+ | count(*) | +----------+ | 300024 | +----------+
Jumlah baris sama seperti pada instance
mysql-prod
.
Setelah mengetahui cara meng-clone database menggunakan snapshot persistent disk, Anda dapat mencoba meng-clone database menggunakan ekspor dan impor. Guna menyelesaikan tutorial untuk pendekatan kedua ini, Anda harus melepas disk yang di-clone.
Melepaskan disk yang di-clone
Untuk melepaskan disk yang di-clone dan Anda buat menggunakan snapshot disk, lakukan langkah-langkah berikut:
Pada sesi SSH yang terhubung ke instance
mysql-test
, hentikan layanan MySQL:sudo service mysql stop
Lepaskan disk data yang di-clone dari direktori data MySQL:
sudo umount /var/lib/mysql
Mulai ulang layanan MySQL:
sudo service mysql start
Meng-clone menggunakan ekspor dan impor
Metode kedua untuk meng-clone database MySQL yang berjalan di
Compute Engine adalah dengan ekspor (menggunakan mysqldump
) dan
impor MySQL native. Dengan pendekatan ini, Anda akan mentransfer file ekspor menggunakan
Cloud Storage.
Bagian tutorial ini menggunakan resource yang Anda buat di bagian Meng-clone database menggunakan snapshot disk Compute Engine dalam tutorial ini. Jika belum menyelesaikan bagian tersebut, Anda harus melakukannya sebelum melanjutkan.
Di bagian tutorial ini, Anda akan melakukan hal-hal berikut:
- Membuat bucket Cloud Storage.
- Mengekspor database pada instance produksi, dengan menuliskannya ke Cloud Storage.
- Mengimpor file ekspor ke instance pengujian, lalu membacanya dari Cloud Storage.
Diagram berikut menunjukkan cara meng-clone database dengan mentransfer ekspor menggunakan Cloud Storage.
Karena sistem di luar Google Cloud dapat diberi akses ke Cloud Storage, Anda dapat menggunakan pendekatan ini untuk meng-clone database dari instance MySQL eksternal.
Membuat bucket Cloud Storage
Anda perlu membuat bucket Cloud Storage yang menyimpan file ekspor
saat Anda mentransfernya dari instance mysql-prod
ke instance
mysql-test
.
Buka Cloud Shell.
Buat bucket Cloud Storage di region yang sama dengan instance VM Anda:
gsutil mb -l "${REGION}" "gs://$(gcloud config get-value project)-bucket"
Mengekspor database
Di lingkungan produksi, Anda mungkin sudah membuat cadangan menggunakan file ekspor
mysqldump
. Anda dapat menggunakan cadangan ini sebagai dasar untuk meng-clone database.
Dalam tutorial ini, Anda akan membuat file ekspor baru menggunakan mysqldump
, yang tidak
memengaruhi jadwal pencadangan penuh atau inkremental yang sudah ada.
Pada sesi SSH yang terhubung ke instance
mysql-prod
, ekspor databaseEmployees
, lalu streaming ke objek Cloud Storage di bucket yang Anda buat sebelumnya:mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose --hex_blob \ --databases employees |\ gsutil cp - "gs://$(gcloud config get-value project)-bucket/employees-dump.sql"
Saat diminta, masukkan sandi root server database
mysql-prod
.Anda menggunakan himpunan karakter
utf8mb4
dalam ekspor untuk menghindari masalah encoding karakter apa pun.Opsi
--add-drop-database
digunakan sehingga pernyataanDROP DATABASE
danCREATE DATABASE
disertakan dalam ekspor.
Mengimpor file yang diekspor
Pada sesi SSH yang terhubung ke instance
mysql-test
, streaming file yang diekspor dari bucket Cloud Storage Anda ke aplikasi command linemysql
:gsutil cat "gs://$(gcloud config get-value project)-bucket/employees-dump.sql" |\ mysql --user=root -p --default-character-set=utf8mb4
Saat diminta, masukkan sandi root server database
mysql-test
.Anda menggunakan himpunan karakter
utf8mb4
dalam impor untuk menghindari masalah encoding karakter apa pun.Untuk memastikan database yang di-clone berfungsi, jalankan kueri yang menghitung jumlah baris dalam tabel
employees
:mysql -u root -p -e "select count(*) from employees.employees;"
Saat diminta, masukkan sandi root server database
mysql-test
.+----------+ | count(*) | +----------+ | 300024 | +----------+
Jumlah baris sama seperti pada instance
mysql-prod
.
Menggunakan Cloud SQL sebagai tujuan clone
Jika database tujuan Anda dihosting di Cloud SQL, dan database asalnya berada di Compute Engine, satu-satunya mekanisme cloning yang didukung adalah dengan mengekspor database ke Cloud Storage, lalu mengimpornya ke Cloud SQL.
Seperti yang dijelaskan dalam dokumentasi untuk Cloud SQL, Cloud SQL hanya dapat mengimpor file yang diekspor jika tidak berisi pemicu, fungsi, tampilan, atau prosedur yang tersimpan.
Jika database bergantung pada salah satu elemen ini, Anda harus mengecualikannya dari
ekspor menggunakan argumen command line
--skip-triggers
dan --ignore-table [VIEW_NAME]
, lalu membuatnya kembali secara manual setelah diimpor.
Membuat instance Cloud SQL untuk MySQL
Buka Cloud Shell.
Buat instance Cloud SQL untuk MySQL yang menjalankan versi database yang sama dengan instance
mysql-prod
Anda:gcloud sql instances create mysql-cloudsql \ --tier=db-n1-standard-2 --region=${REGION} --database-version MYSQL_5_7
Setelah beberapa menit, database Cloud SQL Anda telah dibuat.
Reset sandi pengguna root ke nilai yang diketahui:
gcloud sql users set-password root \ --host=% --instance=mysql-cloudsql --prompt-for-password
Saat diminta untuk memberikan sandi root, buat dan masukkan sandi. Catat sandi atau simpan untuk sementara di tempat yang aman.
Mengekspor database
Untuk mengekspor database dalam format yang sesuai untuk diimpor ke Cloud SQL, Anda perlu mengecualikan semua tampilan dalam database.
Pada sesi SSH yang terhubung ke instance
mysql-prod
, tetapkan variabel lingkungan yang berisi kumpulan argumen command line untuk perintahmysqldump
agar mengabaikan tampilan dalam databaseEmployees
:DATABASE_NAME=employees IGNORE_TABLES_ARGS="`mysql -u root -p -s -s -e \" SELECT CONCAT('--ignore-table ${DATABASE_NAME}.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA = '${DATABASE_NAME}'; \"`"
Saat diminta, masukkan sandi root server database
mysql-prod
.Lihat konten variabel untuk memastikan semuanya telah ditetapkan dengan benar:
echo "${IGNORE_TABLES_ARGS}"
--ignore-table employees.current_dept_emp --ignore-table employees.dept_emp_latest_date
Ekspor database
Employees
, kecuali pemicu dan tampilan, lalu streaming langsung ke objek Cloud Storage di bucket yang Anda buat sebelumnya:mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose \ --hex-blob --skip-triggers --set-gtid-purged=OFF \ $IGNORE_TABLES_ARGS \ --databases employees |\ gsutil cp - "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
Saat diminta, masukkan sandi root server database
mysql-prod
.
Memperbarui izin objek
Izin yang benar harus ditetapkan pada bucket Cloud Storage
dan objek ekspor, agar akun layanan Cloud SQL dapat membacanya.
Izin ini ditetapkan secara otomatis saat Anda menggunakan Konsol Google Cloud untuk
mengimpor objek, atau izin tersebut dapat ditetapkan menggunakan perintah gcloud
.
Buka Cloud Shell.
Tetapkan variabel lingkungan yang berisi alamat akun layanan instance Cloud SQL Anda:
CLOUDSQL_SA="$(gcloud sql instances describe mysql-cloudsql --format='get(serviceAccountEmailAddress)')"
Tambahkan akun layanan ke ACL bucket sebagai penulis, dan ke objek ekspor sebagai pembaca:
gsutil acl ch -u "${CLOUDSQL_SA}":W "gs://$(gcloud config get-value project)-bucket/" gsutil acl ch -u "${CLOUDSQL_SA}":R \ "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
Mengimpor database yang diekspor
Buka Cloud Shell.
Impor file yang diekspor ke instance Cloud SQL Anda:
gcloud sql import sql mysql-cloudsql \ "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
Saat diminta, masukkan
y
.Untuk memastikan database yang di-clone berfungsi, jalankan kueri yang menghitung jumlah baris dalam tabel
employees
:echo "select count(*) from employees.employees;" |\ gcloud sql connect mysql-cloudsql --user=root
Jika diminta, masukkan sandi root server database
mysql-cloudsql
.Outputnya adalah sebagai berikut:
Connecting to database with SQL user [root].Enter password: count(*) 300024
Jumlah baris sama seperti pada instance
mysql-prod
.
Informasi tambahan untuk sistem produksi
Menggunakan snapshot disk
Untuk pencadangan fisik (seperti snapshot disk), dokumentasi MySQL
menyarankan
agar Anda menjeda penulisan ke database sebelum mengambil snapshot. Anda dapat melakukannya dengan
menggunakan
perintah
FLUSH TABLES WITH READ LOCK
. Setelah snapshot selesai, Anda dapat menggunakan UNLOCK TABLES
untuk memulai ulang penulisan.
Untuk database yang menggunakan tabel InnoDB, sebaiknya ambil snapshot
secara langsung tanpa menjalankan perintah FLUSH TABLES WITH READ LOCK
terlebih dahulu. Hal ini
memungkinkan database tetap berjalan tanpa efek buruk, tetapi snapshot
mungkin dalam status tidak konsisten. Namun, jika hal ini terjadi, mesin InnoDB
dapat mem-build ulang tabel ke status yang konsisten saat clone dimulai.
Untuk database yang menggunakan tabel MyISAM, menjalankan perintah FLUSH TABLES WITH READ LOCK
akan memblokir semua penulisan ke tabel, sehingga database menjadi hanya baca
hingga Anda menjalankan perintah UNLOCK TABLES
.
Jika Anda mengambil snapshot tanpa flush dan mengunci tabel terlebih dahulu, ada risiko bahwa database yang baru di-clone akan berisi data yang tidak konsisten, atau akan rusak.
Oleh karena itu, untuk mendapatkan snapshot yang konsisten pada database yang menggunakan tabel MyISAM, sebaiknya
jalankan FLUSH TABLES WITH READ LOCK
pada replika baca dan
ambil snapshot replika tersebut sehingga performa database utama (master)
tidak terpengaruh.
Menggunakan perintah mysqldump
Untuk membuat file ekspor yang konsisten dengan database sumber,
perintah mysqldump
mengunci semua tabel selama operasi ekspor. Artinya,
penulisan ke database akan diblokir saat database sedang diekspor.
Oleh karena itu, sebaiknya jalankan perintah mysqldump
terhadap replika
baca database utama agar yang utama tidak diblokir.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project Google Cloud yang Anda buat untuk tutorial ini.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
Pelajari cara memantau kueri lambat Anda di MySQL dengan Cloud Monitoring.
Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.