Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để kết nối với cơ sở dữ liệu Cloud SQL MySQL từ App Engine?

KẾT NỐI TỪ CÔNG CỤ ỨNG DỤNG (FLEX VÀ TIÊU CHUẨN) ĐỂ ĐÁM MÂY SQL SỬ DỤNG Ổ CẮM MIỀN TCP VÀ UNIX 2020

1.Tạo một dự án mới

gcloud projects create con-ae-to-sql
gcloud config set project con-ae-to-sql
gcloud projects describe con-ae-to-sql

2. Bật thanh toán cho dự án của bạn: https://cloud.google .com / billing / docs / how-to / mod-project

3. Chạy lệnh gcloud sau để bật App Engine và tạo các tài nguyên ứng dụng liên quan

gcloud app create -region europe-west2
gcloud app describe
#Remember the location of you App Engine aplication, because we will create all our resources on the same region

4 Đặt siêu dữ liệu tính toán thông tin dự án:

 gcloud compute project-info describe --project con-ae-to-sql
 #Enable the Api, and you can check that default-region,google-compute-default-zone are not set. Set the metadata.
 gcloud compute project-info add-metadata --metadata google-compute-default-region=europe-west2,google-compute-default-zone=europe-west2-b

5. bật dịch vụ mạng Api:

gcloud services list --available
gcloud services enable servicenetworking.googleapis.com

6.Tạo 2 phiên bản sql đám mây, (một phiên bản có ip internall và một phiên bản có ip công khai) - https://cloud.google.com/sql/docs/mysql/create-instance :

6.a Cloud Sql Instance với ip bên ngoài:

#Create the sql instance in the same region as App Engine Application
gcloud --project=con-ae-to-sql beta sql instances create database-external --region=europe-west2
#Set the password for the "[email protected]%" MySQL user:
gcloud sql users set-password root --host=% --instance database-external --password root 
#Create a user
gcloud sql users create user_name --host=% --instance=database-external  --password=user_password
#Create a database
gcloud sql databases create user_database --instance=database-external
gcloud sql databases list --instance=database-external

6.b Cloud Sql Instance với ip nội bộ:

i.#Create a private connection to Google so that the VM instances in the default VPC network can use private services access to reach Google services that support it.

gcloud compute addresses create google-managed-services-my-network     --global  --purpose=VPC_PEERING --prefix-length=16  --description="peering range for Google"  --network=default --project=con-ae-to-sql
gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges=google-managed-services-my-network  --network=default  --project=con-ae-to-sql
#Check whether the operation was successful.
gcloud services vpc-peerings operations describe     --name=operations/pssn.dacc3510-ebc6-40bd-a07b-8c79c1f4fa9a
#Listing private connections
gcloud services vpc-peerings list --network=default --project=con-ae-to-sql
 
ii.Create the instance:

gcloud --project=con-ae-to-sql beta sql instances create database-ipinternal --network=default --no-assign-ip  --region=europe-west2
#Set the password for the "[email protected]%" MySQL user:
gcloud sql users set-password root --host=% --instance database-ipinternal --password root
#Create a user
gcloud sql users create user_name --host=% --instance=database-ipinternal  --password=user_password
#Create a database
gcloud sql databases create user_database --instance=database-ipinternal
gcloud sql databases list --instance=database-ipinternal 


gcloud sql instances list
gcloud sql instances describe database-external
gcloud sql instances describe database-ipinternal
#Remember the instances connectionName

OK, vì vậy chúng tôi có hai phiên bản mysql, chúng tôi sẽ kết nối từ App Engine Standard đến database-ipinternal bằng cách sử dụng Serverless Access và TCP, từ App Engine Standard sang database-external bằng ổ cắm miền unix, từ App Engine Flex đến database-ipinternal bằng TCP, và từ App Engine Flex sang cơ sở dữ liệu-bên ngoài bằng cách sử dụng ổ cắm miền unix.

7. Bật API quản trị Cloud SQL

gcloud services list --available
gcloud services enable sqladmin.googleapis.com

8. Tại thời điểm này, môi trường tiêu chuẩn của App Engine không hỗ trợ kết nối với phiên bản Cloud SQL bằng TCP. Mã của bạn không nên cố gắng truy cập phiên bản bằng địa chỉ IP (chẳng hạn như 127.0.0.1 hoặc 172.17.0.1) trừ khi bạn đã định cấu hình Serverless VPC Access. Vì vậy, hãy định cấu hình Serverless VPC Access.

8.a Đảm bảo API truy cập VPC không máy chủ được bật cho dự án của bạn:

gcloud services enable vpcaccess.googleapis.com

8.b Tạo trình kết nối:

gcloud compute networks vpc-access connectors create serverless-connector --network default --region europe-west2 --range 10.10.0.0/28
#Verify that your connector is in the READY state before using it
gcloud compute networks vpc-access connectors describe serverless-connector --region europe-west2

9.App Engine sử dụng tài khoản dịch vụ để cho phép các kết nối của bạn với Cloud SQL. Tài khoản dịch vụ này phải có quyền IAM chính xác để kết nối thành công. Unless otherwise configured, the default service account is in the format [email protected] nt.com. Đảm bảo rằng tài khoản dịch vụ cho dịch vụ của bạn có các vai trò IAM sau:Máy khách Cloud SQL và để kết nối từ App Engine Standard đến Cloud Sql trên ip nội bộ, chúng tôi cũng cần vai trò Người dùng mạng tính toán.

gcloud iam service-accounts list
gcloud projects add-iam-policy-binding con-ae-to-sql --member serviceAccount:[email protected] --role roles/cloudsql.client
gcloud projects add-iam-policy-binding con-ae-to-sql --member serviceAccount:[email protected] --role roles/compute.networkUser

Bây giờ tôi đã định cấu hình thiết lập

1. Kết nối từ Tiêu chuẩn của App Engine đến Cloud Sql bằng Tcp và ổ cắm unix domanin

cd app-engine-standard/
ls
#app.yaml  main.py requirements.txt

cat requirements.txt
Flask==1.1.1
sqlalchemy
pymysql
uwsgi==2.0.18

cat app.yaml
runtime: python37
entrypoint: uwsgi --http-socket :8080 --wsgi-file main.py --callable app --master --processes 1 --threads 2
vpc_access_connector:
    name: "projects/con-ae-to-sql/locations/europe-west2/connectors/serverless-connector" 



cat main.py

from flask import Flask
import pymysql
from sqlalchemy import create_engine

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = Flask(__name__)

@app.route('/')
def hello():
    engine_tcp = create_engine('mysql+pymysql://user_name:[email protected]:3306')
    existing_databases_tcp = engine_tcp.execute("SHOW DATABASES;")
    con_tcp = "Connecting from APP Engine Standard to Cloud SQL using TCP: databases => " + str([d[0] for d in existing_databases_tcp]).strip('[]') + "\n"
    engine_unix_socket = create_engine('mysql+pymysql://user_name:[email protected]/user_database?unix_socket=/cloudsql/con-ae-to-sql:europe-west2:database-external')
    existing_databases_unix_socket = engine_unix_socket.execute("SHOW DATABASES;")
    con_unix_socket = "Connecting from APP Engine Standard to Cloud SQL using Unix Sockets: tables in sys database:  => " + str([d[0] for d in existing_databases_unix_socket]).strip('[]') + "\n"
    return con_tcp + con_unix_socket



gcloud app deploy -q
gcloud app browse
#Go to https://con-ae-to-sql.appspot.com
#Connecting from APP Engine Standard to Cloud SQL using TCP: databases => 'information_schema', 'user_database', 'mysql', 'performance_schema', 'sys' Connecting from APP Engine Standard to Cloud SQL using Unix Sockets: tables in sys database: => 'information_schema', 'user_database', 'mysql', 'performance_schema', 'sys'

THÀNH CÔNG!

2.Kết nối từ App Engine Flex với Cloud Sql bằng Tcp và ổ cắm unix domanin

cd app-engine-flex/
ls
#app.yaml  main.py requirements.txt

cat requirements.txt
Flask==1.1.1
gunicorn==19.9.0
sqlalchemy
pymysql

cat app.yaml
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
  python_version: 3
#Using TCP and unix sockets domain
beta_settings:
 cloud_sql_instances: con-ae-to-sql:europe-west2:database-ipinternal=tcp:3306,con-ae-to-sql:europe-west2:database-external
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10


cat main.py

from flask import Flask
import pymysql
from sqlalchemy import create_engine

app = Flask(__name__)

@app.route('/')
def hello():
    engine_tcp = create_engine('mysql+pymysql://user_name:[email protected]:3306')
    existing_databases_tcp = engine_tcp.execute("SHOW DATABASES;")
    con_tcp = "Connecting from APP Engine Flex to Cloud SQL using TCP: databases => " + str([d[0] for d in existing_databases_tcp]).strip('[]') + "\n"

    engine_unix_socket = create_engine('mysql+pymysql://user_name:[email protected]/user_database?unix_socket=/cloudsql/con-ae-to-sql:europe-west2:database-external')
    existing_databases_unix_socket = engine_unix_socket.execute("SHOW DATABASES;")
    con_unix_socket = "Connecting from APP Engine Flex to Cloud SQL using Unix Sockets: tables in sys database:  => " + str([d[0] for d in existing_databases_unix_socket]).strip('[]') + "\n"
    return con_tcp + con_unix_socket


gcloud app deploy -q
gcloud app browse
#Go to https://con-ae-to-sql.appspot.com
#Connecting from APP Engine Flex to Cloud SQL using TCP: databases => 'information_schema', 'marian', 'mysql', 'performance_schema', 'sys' Connecting from APP Engine Flex to Cloud SQL using Unix Sockets: tables in sys database: => 'information_schema', 'marian', 'mysql', 'performance_schema', 'sys'

THÀNH CÔNG!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lược đồ cơ sở dữ liệu tình bạn

  2. Tại sao tôi nhận được System.Data.DataRowView thay vì các giá trị thực trong Listbox của mình?

  3. Chọn hồ sơ từ NOW () -1 Ngày

  4. MySQL - tại sao không lập chỉ mục mọi trường?

  5. MySQL:int bigint Vs