2017-06-19 16 views
5

Tôi dự định kết nối ứng dụng PHP (từ máy chủ bên ngoài Google Cloud Platform) với Google Cloud SQL. Tôi muốn biết làm thế nào tôi có thể thiết kế các ứng dụng để chuyển đổi cơ sở dữ liệu của nó đúng cách.Tính năng chuyển đổi dự phòng hoạt động như thế nào trên Google Cloud SQL?

Theo manual:

Khi cúp địa đới xảy ra và làm chủ của bạn không qua failover bản sao của bạn, bất kỳ kết nối hiện có để các trường hợp đều đóng cửa. Tuy nhiên, ứng dụng của bạn có thể kết nối lại bằng cách sử dụng cùng một chuỗi kết nối hoặc địa chỉ IP ; bạn không cần cập nhật ứng dụng của mình sau khi chuyển đổi dự phòng.

Dường như mọi thứ diễn ra tự động phía sau hậu trường nhưng điều gì sẽ xảy ra nếu địa chỉ IP của cơ sở dữ liệu bị hỏng hoặc hết giờ?

+1

IP sẽ được chuyển sang phiên bản mới sau khi chuyển đổi dự phòng. Không có gì cần phải xảy ra trong ứng dụng. – Vadim

Trả lời

0

Google không tiết lộ here gì back-end được sử dụng để cung cấp dịch vụ cơ sở dữ liệu nhưng giả định của tôi là:

  • Nó được sử dụng một IP ảo được định tuyến giao thông để làm chủ kết nối, do đó khi thầy không những sao lưu sẽ bắt đầu quảng cáo IP ảo, điều này sẽ khiến kết nối TCP của bạn không thành công.

Nhận xét có nghĩa là nếu bạn mysqli.reconnect trong php.ini phải được bật để cho phép mã PHP tự động kết nối với đầu nối MySQL dự phòng khi xảy ra lỗi. read here

Nếu mysqli.reconnect của bạn được bật thì bạn không phải lo lắng về bất kỳ điều gì.

Chỉnh sửa: trả lời câu hỏi liên quan đến giao dịch SQL - Tất nhiên nó sẽ là một mớ hỗn độn nếu mã giao dịch SQL không được ghi chú ý rằng kết nối có thể ngắt kết nối bất cứ lúc nào trong quá trình giao dịch. mã. và khi tự động cam kết được kích hoạt và bạn không nằm trong một giao dịch, việc tự động kết nối lại đơn giản sẽ giải quyết hầu như mọi tình huống khác.

+0

mysqli của PHP sẽ phá vỡ mọi giao dịch khi kết nối được liệt kê. Nếu nó tự động kết nối lại, giao dịch một phần sẽ là ROLLBACK'd và một giao dịch mới sẽ được bắt đầu. _may_ này gây ra một mớ hỗn độn. Bạn nên tắt tự động kết nối lại và coi đó là giao dịch không thành công và yêu cầu _code_ khởi động lại giao dịch. –

+0

Tất nhiên nó sẽ là một mớ hỗn độn nếu mã giao dịch SQL không được viết với một biện pháp phòng ngừa mà kết nối có thể ngắt kết nối bất cứ lúc nào trong quá trình giao dịch, kịch bản đó phải được xử lý bằng mã. và khi tự động cam kết được kích hoạt và bạn không nằm trong một giao dịch, việc tự động kết nối lại đơn giản sẽ giải quyết hầu như mọi tình huống khác. –

+0

(Tôi cảm thấy cần phải chỉ ra "tất nhiên" đối với những người mới đọc chủ đề này.) –

Các vấn đề liên quan