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
- Menghubungkan
- IP Pribadi
- Sudahkah Anda mengaktifkan
Service Networking API
untuk project Anda? - Apakah Anda menggunakan VPC Bersama?
- Apakah pengguna atau akun layanan Anda memiliki izin IAM yang diperlukan untuk mengelola koneksi akses layanan pribadi?
- Apakah koneksi akses layanan pribadi dikonfigurasi untuk project Anda?
- Apakah Anda mengalokasikan rentang alamat IP untuk koneksi pribadi?
- Apakah rentang alamat IP yang dialokasikan berisi setidaknya spasi /24 untuk setiap region tempat Anda berencana membuat instance mysql?
- Jika Anda menentukan rentang alamat IP yang dialokasikan untuk instance mysql, apakah rentang tersebut berisi setidaknya spasi /24 untuk setiap region tempat Anda berencana membuat instance mysql dalam rentang ini?
- Apakah koneksi pribadi telah dibuat?
- Jika koneksi pribadi diubah, apakah vpc-peerings diupdate?
- Apakah log VPC menunjukkan adanya error?
- Apakah IP mesin sumber Anda adalah alamat non-RFC 1918?
- IP Publik
- Apakah IP sumber Anda tercantum sebagai jaringan yang diizinkan?
- Apakah sertifikat SSL/TLS diperlukan?
- Apakah pengguna atau akun layanan Anda memiliki izin IAM yang diperlukan untuk terhubung ke instance Cloud SQL?
- Memberikan otorisasi
- Proxy Auth Cloud SQL
- Apakah Proxy Auth Cloud SQL sudah yang terbaru?
- Apakah Proxy Auth Cloud SQL berjalan?
- Apakah nama koneksi instance dibuat dengan benar di perintah koneksi Proxy Auth Cloud SQL?
- Sudahkah Anda memeriksa output Proxy Auth Cloud SQL? Sambungkan output ke file, atau lihat terminal Cloud Shell tempat Anda memulai Proxy Auth Cloud SQL.
- Apakah pengguna atau akun layanan Anda memiliki izin IAM yang diperlukan untuk terhubung ke instance Cloud SQL?
- Sudahkah
Cloud SQL Admin API
diaktifkan untuk project Anda? - Jika Anda memiliki kebijakan firewall keluar, pastikan kebijakan tersebut mengizinkan koneksi ke port 3307 pada instance Cloud SQL target.
- Jika Anda terhubung menggunakan soket domain UNIX, pastikan soket tersebut telah dibuat dengan mencantumkan direktori yang ditentukan dengan -dir saat Anda memulai Proxy Auth Cloud SQL.
- Konektor Cloud SQL dan kode khusus bahasa
- Apakah string koneksi dibuat dengan benar?
- Sudahkah Anda membandingkan kode dengan kode contoh untuk bahasa pemrograman Anda?
- Apakah Anda menggunakan runtime atau framework yang kode contohnya tidak kami miliki?
- Jika demikian, apakah Anda telah mencari informasi dari komunitas untuk mendapatkan materi referensi yang relevan?
- Sertifikat SSL/TLS yang dikelola sendiri
- Apakah sertifikat klien diinstal pada mesin sumber?
- Apakah sertifikat klien dieja dengan benar dalam argumen koneksi?
- Apakah sertifikat klien masih valid?
- Apakah Anda mengalami error saat menghubungkan menggunakan SSL?
- Apakah sertifikat server masih valid?
- Jaringan yang diizinkan
- Apakah alamat IP sumber disertakan?
- Apakah Anda menggunakan alamat IP non-RFC 1918?
- Apakah Anda menggunakan alamat IP yang tidak didukung?
- Kegagalan koneksi
- Apakah Anda diizinkan untuk terhubung?
- Apakah Anda melihat error batas koneksi?
- Apakah aplikasi Anda menutup koneksi dengan benar?
- Mengautentikasi
- Autentikasi database native (nama pengguna/sandi)
- Apakah Anda melihat error
access denied
? - Apakah nama pengguna dan sandi sudah benar?
- Autentikasi database IAM
- Sudahkah Anda mengaktifkan flag
cloudsql.iam_authentication
pada instance? - Apakah Anda menambahkan binding kebijakan untuk akun?
- Apakah Anda menggunakan Proxy Auth Cloud SQL dengan token
-enable_iam_login
atau Oauth 2.0 sebagai sandi database? - Jika menggunakan akun layanan, apakah Anda menggunakan nama email singkat?
- Pelajari autentikasi database IAM di PostgreSQL lebih lanjut.
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.
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
-
Di konsol Google Cloud, buka halaman Cloud Logging.
- Pilih project Cloud SQL yang sudah ada di bagian atas halaman.
- 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.