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

Không thể kết nối với cơ sở dữ liệu sau một số lần triển khai trên máy chủ

Trong thuộc tính cấu hình của mình, bạn đã sử dụng thuộc tính c3p0 maxIdleTime, nhưng thuộc tính c3p0 được định cấu hình bằng c3p0. tiền tố hoặc hibernate.c3p0. . Lưu ý rằng bật bất kỳ c3p0 nào thuộc tính tự động kích hoạt nhà cung cấp kết nối tương ứng bằng phương pháp hibernate heuristics. Trong nhật ký không thấy rằng bạn đang sử dụng c3p0. Nếu bạn chưa định cấu hình nguồn dữ liệu thì Hibernate sẽ sử dụng hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider . Nhà cung cấp kết nối này tích hợp sẵn nhóm kết nối thô sơ mà bạn có thể đặt hibernate.connection.pool_size , nhưng nó chỉ được sử dụng cho các mục đích phát triển. Không bao giờ sử dụng nó trong môi trường sản xuất.

Bạn có thể thảo luận bất tận về chủ đề Cách sửa java.net.SocketException:Broken pipe . Sau một thời gian, bạn sẽ nhận ra rằng bạn vẫn mở kết nối trong pool đột ngột bị đóng ở phía bên kia bởi những lý do sau:

  • Tường lửa hoặc bộ định tuyến có thể chặn các kết nối không hoạt động (giao thức máy khách / máy chủ MySQL không hoạt động).
  • Máy chủ MySQL có thể đang đóng các kết nối không hoạt động vượt quá wait_timeout hoặc interactive_timeout ngưỡng cửa.

Để giúp khắc phục những sự cố này, bạn có thể sử dụng các mẹo sau:

  • Phiên bản trình điều khiển JDBC (5.1.13+) gần đây được sử dụng.
  • Đảm bảo rằng wait_timeoutinteractive_timeout được đặt đủ cao. Kiểm tra xem interactiveClient được sử dụng.
  • Đảm bảo rằng tcpKeepalive được bật.
  • Đảm bảo rằng mọi cài đặt thời gian chờ của bộ định tuyến hoặc tường lửa có thể định cấu hình đều cho phép thời gian chờ kết nối dự kiến ​​tối đa.
  • Đảm bảo các kết nối hợp lệ khi được sử dụng từ nhóm kết nối. Sử dụng truy vấn bắt đầu bằng /* ping */ để thực hiện một ping nhẹ thay vì truy vấn đầy đủ. Lưu ý, cú pháp của ping cần phải chính xác như được chỉ định ở đây.
  • Xác thực rõ ràng kết nối trước khi sử dụng nếu kết nối không hoạt động trong một thời gian dài.
  • Giảm thiểu thời lượng đối tượng kết nối không hoạt động trong khi logic ứng dụng khác được thực thi.

Để tuân thủ một số tùy chọn này, bạn nên sử dụng nhóm kết nối mà bạn có thể sử dụng với Hibernate. Hibernate có hỗ trợ commons-dbcp, c3p0 và proxool. Ngoài ra, bạn có thể cấu hình nguồn dữ liệu JNDI trên máy chủ web để sử dụng với chế độ ngủ đông, nó có một nhóm kết nối. Xem Chương 7 Tổng hợp kết nối với Trình kết nối / J .

Nếu bạn muốn định cấu hình Hibernate với c3p0, bạn nên đọc Cách định cấu hình nhóm kết nối C3P0 . Đối với cấu hình ví dụ dbcp, bạn nên kiểm tra bài đăng này MySQL, Hibernate và Broken Pipe Exception . Bạn sẽ sử dụng kết nối nào là tùy thuộc vào bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Lựa chọn từ hai Bảng có nối bên trong và giới hạn

  2. Chọn ngày từ db của tôi mà không cần giây bằng PHP MySql

  3. Thay thế các hàm mysql_ * bằng PDO và các câu lệnh đã chuẩn bị

  4. Giải thích Wordnet SQL

  5. Trích xuất các bộ giá trị chung được chỉ định trong một cột khác trong SQL