Mysqli __construct php_network_getaddresses: getaddrinfo không thành công
________số 8_______
Các ứng dụng sử dụng PECL/mysqlnd_ms nên triển khai xử lý lỗi thích hợp cho tất cả lệnh gọi API của người dùng. Và vì plugin thay đổi ngữ nghĩa của bộ điều khiển kết nối, lệnh gọi API có thể trả về lỗi không mong muốn. Nếu sử dụng plugin trên bộ điều khiển kết nối không còn đại diện cho một kết nối mạng riêng lẻ mà là một nhóm kết nối, mã lỗi và thông báo lỗi sẽ được đặt trên bộ điều khiển kết nối bất cứ khi nào xảy ra lỗi trên bất kỳ kết nối mạng nào phía sau Nếu sử dụng các kết nối lười biếng, là mặc định, các kết nối sẽ không được mở cho đến khi chúng cần thiết để thực hiện truy vấn. Do đó, lệnh gọi API để thực thi câu lệnh có thể trả về lỗi kết nối. Trong ví dụ dưới đây, một lỗi xảy ra khi cố gắng chạy một câu lệnh trên một nô lệ. Mở kết nối nô lệ không thành công vì tệp cấu hình plugin liệt kê tên máy chủ không hợp lệ cho nô lệ Ví dụ #1 Kích hoạt lỗi kết nối { "myapp": { "master": { "master_0": { "host": "localhost", "socket": "\/tmp\/mysql.sock" } }, "slave": { "slave_0": { "host": "invalid_host_name", } }, "lazy_connections": 1 } } Việc kích hoạt rõ ràng các kết nối lười biếng chỉ nhằm mục đích trình diễn Ví dụ #2 Lỗi kết nối khi thực hiện truy vấn
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như PHP Warning: mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d PHP Warning: mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known Các ứng dụng dự kiến sẽ xử lý các lỗi kết nối có thể xảy ra bằng cách triển khai xử lý lỗi thích hợp Tùy thuộc vào trường hợp sử dụng, các ứng dụng có thể muốn xử lý lỗi kết nối khác với các lỗi khác. Các lỗi kết nối điển hình là Ví dụ #3 Kích hoạt lỗi kết nối { "myapp": { "master": { "master_0": { "host": "localhost" } }, "slave": { "slave_0": { "host": "invalid_host_name" }, "slave_1": { "host": "192.168.78.136" } }, "lazy_connections": 1, "filters": { "roundrobin": [ ] } } } Kích hoạt rõ ràng các kết nối lười biếng được thực hiện cho mục đích trình diễn, cũng như cân bằng tải luân phiên trái ngược với loại PHP Warning: mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d PHP Warning: mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known0 mặc định Ví dụ #4 Chuyển đổi dự phòng cơ bản nhất
PHP Warning: mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d PHP Warning: mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known3 PHP Warning: mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d PHP Warning: mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known4 Ví dụ trên sẽ xuất ra một cái gì đó tương tự như [1045] Access denied for user 'username'@'localhost' (using password: YES) PHP Warning: mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d PHP Warning: mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d SUCCESS, [0] '' version = 5.6.2-m5-log Trong một số trường hợp, có thể không dễ dàng truy xuất tất cả các lỗi xảy ra trên tất cả các kết nối mạng thông qua bộ điều khiển kết nối. Ví dụ: giả sử một bộ điều khiển kết nối đại diện cho một nhóm gồm ba kết nối đang mở. Một kết nối với chủ và hai kết nối với nô lệ. Ứng dụng thay đổi cơ sở dữ liệu hiện tại bằng cách sử dụng lệnh gọi API người dùng mysqli_select_db(), sau đó gọi hàm thư viện mysqlnd để thay đổi lược đồ. mysqlnd_ms giám sát chức năng và cố gắng thay đổi cơ sở dữ liệu hiện tại trên tất cả các kết nối để hài hòa trạng thái của chúng. Bây giờ, giả sử chủ thành công trong việc thay đổi cơ sở dữ liệu và cả hai nô lệ đều thất bại. Khi có lỗi ban đầu từ nô lệ đầu tiên, plugin sẽ đặt một lỗi thích hợp trên tay cầm kết nối. Điều tương tự cũng được thực hiện khi nô lệ thứ hai không thể thay đổi cơ sở dữ liệu. Thông báo lỗi từ nô lệ đầu tiên bị mất Những trường hợp như vậy có thể được gỡ lỗi bằng cách kiểm tra lỗi loại PHP Warning: mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d PHP Warning: mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known5 (xem ở trên) hoặc, nếu không có lựa chọn nào khác, điều tra lỗi |