Men-debug masalah koneksi

Pengantar

Secara umum, masalah koneksi termasuk dalam salah satu dari tiga area berikut:

  • Menghubungkan - apakah Anda dapat menjangkau instance melalui jaringan?
  • Memberi otorisasi - apakah Anda diizinkan untuk terhubung ke instance?
  • Mengautentikasi - apakah database menerima kredensial database Anda?

Masing-masing dapat diuraikan lebih lanjut menjadi jalur investigasi yang berbeda. Bagian berikut menyertakan contoh pertanyaan yang dapat Anda tanyakan pada diri sendiri untuk lebih mempersempit masalahnya:

Checklist masalah koneksi

Pesan error

Untuk pesan error API tertentu, lihat halaman referensi Pesan error.

Pemecahan masalah konektivitas tambahan

Untuk masalah lainnya, lihat bagian Konektivitas di halaman pemecahan masalah.

Masalah koneksi umum

Memverifikasi bahwa aplikasi Anda menutup koneksi dengan benar

Jika Anda melihat error yang berisi "Aborted connection nnnn to db:", biasanya hal tersebut berarti bahwa aplikasi tidak menghentikan koneksi dengan benar. Masalah jaringan juga dapat menyebabkan error ini. Error ini bukan berarti ada masalah dengan instance Cloud SQL Anda. Anda juga dianjurkan untuk menjalankan tcpdump guna memeriksa paket dan melacak sumber masalah.

Untuk contoh praktik terbaik pengelolaan koneksi, lihat Mengelola koneksi database.

Pastikan masa berlaku sertifikat Anda belum habis

Jika instance Anda dikonfigurasi untuk menggunakan SSL, buka halaman Instance Cloud SQL di konsol Google Cloud dan buka instance tersebut. Buka halaman Koneksi, pilih tab Keamanan dan pastikan sertifikat server Anda valid. Jika masa berlakunya telah berakhir, Anda harus menambahkan sertifikat baru dan melakukan rotasi ke sertifikat baru tersebut.

Verifikasi bahwa Anda diizinkan untuk terhubung

Jika koneksi gagal, periksa apakah Anda diizinkan untuk terhubung:

  • Jika mengalami masalah saat menghubungkan menggunakan alamat IP, misalnya, Anda terhubung dari lingkungan lokal dengan klien mysql, maka pastikan alamat IP yang Anda hubungkan diotorisasi untuk terhubung ke instance Cloud SQL.

    Koneksi ke instance Cloud SQL yang menggunakan alamat IP pribadi akan otomatis diizinkan untuk rentang alamat IP RFC 1918. Dengan cara ini, semua klien pribadi dapat mengakses database tanpa melalui Proxy Auth Cloud SQL. Rentang alamat IP non-RFC 1918 harus dikonfigurasi sebagai jaringan yang diizinkan.

    Cloud SQL tidak mempelajari rute subnet Non-RFC 1918 dari VPC Anda secara default. Anda harus memperbarui peering jaringan ke Cloud SQL untuk mengekspor Non-RFC 1918. Contoh:

    gcloud compute networks peerings update cloudsql-mysql-googleapis-com \
    --network=NETWORK \
    --export-subnet-routes-with-public-ip \
    --project=PROJECT_ID
  • Berikut adalah alamat IP Anda saat ini.

  • Coba perintah gcloud sql connect untuk terhubung ke instance Anda. Perintah ini memberikan otorisasi alamat IP Anda untuk sementara waktu. Anda dapat menjalankan perintah ini di lingkungan dengan gcloud CLI dan klien mysql yang sudah terinstal. Anda juga dapat menjalankan perintah ini di Cloud Shell, yang tersedia di konsol Google Cloud dan telah menginstal gcloud CLI dan klien mysql. Cloud Shell menyediakan instance Compute Engine yang dapat Anda gunakan untuk terhubung ke Cloud SQL.
  • Izinkan semua alamat IP terhubung ke instance untuk sementara. Untuk memberi otorisasi IPv4 0.0.0.0/0 (untuk IPv6, beri otorisasi ::/0.

Memverifikasi cara Anda terhubung

Jika Anda mendapatkan pesan error seperti:

ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: NO)

saat Anda terhubung, pastikan Anda memberikan sandi.

Jika Anda mendapatkan pesan error seperti:

ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: YES)

saat terhubung, pastikan Anda menggunakan sandi yang benar dan menghubungkan melalui SSL jika instance memerlukannya.

Tentukan bagaimana koneksi dimulai

Anda dapat melihat informasi tentang koneksi saat ini dengan menghubungkan ke database dan menjalankan perintah berikut:

SHOW PROCESSLIST;

Koneksi yang menampilkan alamat IP, seperti 1.2.3.4, terhubung menggunakan IP. Koneksi dengan cloudsqlproxy~1.2.3.4 menggunakan Proxy Auth Cloud SQL, atau koneksi tersebut berasal dari App Engine. Koneksi dari localhost dapat digunakan oleh beberapa proses Cloud SQL internal.

Batas koneksi

Tidak ada batas QPS untuk instance Cloud SQL. Namun, ada batasan tertentu untuk koneksi, ukuran, dan App Engine yang berlaku. Lihat Kuota dan batas.

Koneksi database menggunakan resource di server dan aplikasi yang terhubung. Selalu gunakan praktik pengelolaan koneksi yang baik untuk meminimalkan jejak aplikasi Anda dan mengurangi kemungkinan terlampauinya batas koneksi Cloud SQL. Untuk mengetahui informasi selengkapnya, lihat Mengelola koneksi database.

Tampilkan koneksi dan rangkaian pesan

Jika mendapatkan pesan error "terlalu banyak koneksi", atau ingin mengetahui apa yang terjadi pada instance, Anda dapat menampilkan jumlah koneksi dan rangkaian pesan dengan SHOW PROCESSLIST.

Dari klien MySQL, jalankan:

mysql> SHOW PROCESSLIST;

Anda akan mendapatkan output yang mirip dengan berikut ini:

+----+-----------+--------------+-----------+---------+------+-------+----------------------+
| Id | User      | Host         | db        | Command | Time | State | Info                 |
+----+-----------+--------------+-----------+---------+------+-------+----------------------+
|  3 | user-name | client-IP    | NULL      | Query   |    0 | NULL  | SHOW processlist     |
|  5 | user-name | client-IP    | guestbook | Sleep   |    1 |       | SELECT * from titles |
| 17 | user-name | client-IP    | employees | Query   |    0 | NULL  | SHOW processlist     |
+----+-----------+--------------+-----------+---------+------+-------+----------------------+
3 rows in set (0.09 sec)

Untuk informasi tentang cara menafsirkan kolom yang ditampilkan dari PROCESSLIST, lihat referensi MySQL.

Untuk mendapatkan jumlah rangkaian pesan, Anda dapat menggunakan:

mysql> SHOW STATUS WHERE Variable_name = 'Threads_connected';

Anda akan mendapatkan output yang mirip dengan berikut ini:

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 7     |
+-------------------+-------+
1 row in set (0.08 sec)

Waktu tunggu koneksi (dari Compute Engine)

Koneksi dengan waktu tunggu instance Compute Engine habis setelah 10 menit tidak aktif. Hal ini dapat memengaruhi koneksi jangka panjang yang tidak terpakai antara instance Compute Engine dan instance Cloud SQL Anda. Untuk mengetahui informasi selengkapnya, lihat Jaringan dan Firewall dalam dokumentasi Compute Engine.

Untuk mengaktifkan koneksi jangka panjang yang tidak digunakan, Anda dapat menyetel TCP keepalive. Perintah berikut menetapkan nilai TCP keepalive ke satu menit dan membuat konfigurasi permanen setiap kali instance dimulai ulang.

Menampilkan nilai tcp_keepalive_time saat ini.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Setel tcp_keepalive_time ke 60 detik dan membuatnya permanen setiap kali mulai ulang.

echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf

Terapkan perubahan.

sudo /sbin/sysctl --load=/etc/sysctl.conf

Tampilkan nilai tcp_keepalive_time untuk memverifikasi bahwa perubahan telah diterapkan.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Terhubung dengan IPv6

Jika Anda menerima salah satu pesan error

Can't connect to MySQL server on '2001:1234::4321' (10051)
Can't connect to MySQL server on '2001:1234::4321' (101)

ketika terhubung, kemungkinan Anda mencoba terhubung ke alamat IPv6 dari instance, tetapi tidak memiliki IPv6 yang tersedia di workstation. Anda dapat memverifikasi apakah IPv6 berfungsi di workstation dengan membuka ipv6.google.com. Jika tidak memuat berarti Anda tidak memiliki IPv6 yang tersedia. Hubungkan ke alamat IPv4 atau instance Cloud SQL Anda. Anda mungkin perlu menambahkan alamat IPv4 ke instance terlebih dahulu.

Kegagalan koneksi sesekali (HA versi lama)

Saat Cloud SQL memulai ulang instance karena terjadi peristiwa pemeliharaan, koneksi mungkin dirutekan ke replika failover. Saat menghubungkan ke replika failover:

  • Permintaan baca dari klien yang menggunakan koneksi tidak terenkripsi berhasil seperti biasa. Namun, permintaan tulis akan gagal dan menampilkan pesan error, seperti 'Error 1290: Server MySQL berjalan dengan opsi --hanya baca sehingga tidak dapat menjalankan pernyataan ini.'
  • Permintaan baca dan tulis dari klien yang menggunakan koneksi terenkripsi akan gagal dan menampilkan pesan error, seperti 'x509: sertifikat valid untuk instance master, bukan instance failover.'

Setelah peristiwa selesai, Cloud SQL akan mereset koneksi. Coba hubungkan lagi. Sebaiknya desain aplikasi Anda untuk menangani kegagalan koneksi sesekali dengan menerapkan strategi penanganan error seperti backoff eksponensial. Lihat Implementasi aplikasi untuk informasi selengkapnya.

Alat untuk proses debug konektivitas

tcpdump

tcpdump adalah alat untuk merekam paket. Sangat disarankan untuk menjalankan tcpdump guna merekam dan memeriksa paket antara host Anda dan instance Cloud SQL saat melakukan proses debug masalah konektivitas.

Menemukan alamat IP lokal Anda

Jika Anda tidak mengetahui alamat lokal host, jalankan perintah ip -br address show. Di Linux, hal ini menunjukkan antarmuka jaringan, status antarmuka, IP lokal, dan alamat MAC. Contoh: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64.

Atau, Anda dapat menjalankan ipconfig atau ifconfig untuk melihat status antarmuka jaringan.

Menguji dengan Uji Konektivitas

Uji Konektivitas adalah alat diagnostik yang memungkinkan Anda memeriksa konektivitas antar-endpoint di jaringan. Layanan ini menganalisis konfigurasi Anda dan dalam beberapa kasus melakukan verifikasi runtime. Layanan ini juga telah mendukung Cloud SQL. Ikuti petunjuk ini untuk menjalankan pengujian dengan instance Cloud SQL Anda.

Menguji koneksi Anda

Anda dapat menggunakan klien mysql guna menguji kemampuan untuk terhubung dari lingkungan lokal. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan klien mysql menggunakan alamat IP dan Menghubungkan klien mysql menggunakan Proxy Auth Cloud SQL.

Menentukan alamat IP untuk aplikasi Anda

Untuk menentukan alamat IP komputer yang menjalankan aplikasi Anda sehingga dapat mengizinkan akses ke instance Cloud SQL dari alamat tersebut, gunakan salah satu opsi berikut:

  • Jika komputer tidak melalui proxy atau firewall, login ke komputer dan gunakan situs Apa IP saya? untuk menentukan alamat IP-nya.
  • Jika komputer melalui proxy atau firewall, login ke komputer tersebut dan gunakan alat atau layanan seperti whatismyipaddress.com untuk menentukan alamat IP sebenarnya.

Buka port lokal

Untuk memverifikasi bahwa host memproses port yang menurut Anda benar, jalankan perintah ss -tunlp4. Perintah ini memberitahu Anda tentang port yang terbuka dan sedang memproses. Misalnya, jika Anda memiliki database MySQL yang berjalan, port 3306 seharusnya aktif dan memproses. Untuk SSH, Anda akan melihat port 22.

Semua aktivitas port lokal

Gunakan perintah netstat untuk melihat semua aktivitas port lokal. Misalnya, netstat -lt menampilkan semua port yang saat ini aktif.

Menghubungkan ke instance Cloud SQL menggunakan telnet

Untuk memverifikasi bahwa Anda dapat terhubung ke instance Cloud SQL menggunakan TCP, jalankan perintah telnet. Telnet mencoba terhubung ke alamat IP dan port yang Anda berikan.

Misalnya, jika instance Cloud SQL menjalankan database MySQL, Anda seharusnya dapat melakukan telnet ke database tersebut di port 3306: telnet 35.193.198.159 3306.

Jika berhasil, Anda akan melihat hal berikut:

Trying 35.193.198.159...

Connected to 35.193.198.159. .

Jika gagal, Anda akan melihat telnet hang sampai Anda menutup percobaan tersebut secara paksa:

Trying 35.193.198.159...

^C. .

Cloud Logging

Cloud SQL dan Cloud SQL menggunakan Cloud Logging. Lihat dokumentasi Cloud Logging untuk mengetahui informasi selengkapnya dan tinjau contoh kueri Cloud SQL.

Lihat log

Anda dapat melihat log untuk instance Cloud SQL dan project Google Cloud lainnya, seperti instance Cloud VPN atau Compute Engine. Untuk melihat log yang berisi entri log instance Cloud SQL Anda:

Konsol

  1. Di konsol Google Cloud, buka halaman Cloud Logging.

    Buka Cloud Logging

  2. Pilih project Cloud SQL yang sudah ada di bagian atas halaman.
  3. Di Builder kueri, tambahkan hal berikut:
    • Resource: Pilih Database Cloud SQL. Pada dialog, pilih instance Cloud SQL.
    • Nama log: Scroll ke bagian Cloud SQL dan pilih file log yang sesuai untuk instance Anda. Contoh:
      • cloudsql.googlapis.com/mysql-general.log
      • cloudsql.googleapis.com/mysql.err
    • Tingkat keparahan: Pilih level log.
    • Rentang waktu: Pilih preset atau buat rentang kustom.

gcloud

Gunakan perintah gcloud logging untuk melihat entri log. Pada contoh di bawah, ganti PROJECT_ID. Flag limit adalah parameter opsional yang menunjukkan jumlah entri maksimum yang akan ditampilkan.

gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/mysql-general.log" \
--limit=10

Alamat IP pribadi

Koneksi ke instance Cloud SQL yang menggunakan alamat IP pribadi akan otomatis diizinkan untuk rentang alamat IP RFC 1918. Rentang alamat IP Non-RFC 1918 harus dikonfigurasi di Cloud SQL sebagai jaringan yang diizinkan. Anda juga harus memperbarui peering jaringan ke Cloud SQL untuk mengekspor rute Non-RFC 1918. Contoh:

gcloud compute networks peerings update cloudsql-mysql-googleapis-com 
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID

Pemecahan masalah VPN

Lihat halaman Pemecahan masalah Cloud VPN.