Komunikat w application.log opisywał ostatni objaw, nie przyczynę. Poniżej wpisy z logów tak, jak je zapisał ColdFusion; uogólnione są tylko ścieżka pliku CFML i nazwa wątku.
Dokładne wpisy z logów
application.log, przy każdym żądaniu:
"Error","...-exec-6","11/02/26","17:40:29","","Error Executing Database Query.Could not create connection to database server. Attempted reconnect 3 times. Giving up. The specific sequence of files included or processed is: /app/wwwroot/katalog.cfm, line: 15 Could not create connection to database server. Attempted reconnect 3 times. Giving up."
exception.log, pełny łańcuch wyjątków (ramki JDK, Tomcata i filtrów ColdFusion pominięte i oznaczone ...):
coldfusion.tagext.sql.QueryTag$DatabaseQueryException: Error Executing Database Query.
at coldfusion.tagext.sql.QueryTag.startQueryExecution(QueryTag.java:853)
at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:750)
...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
...
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2097)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2022)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
...
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
at coldfusion.server.j2ee.sql.pool.JDBCPool.createPhysicalConnection(JDBCPool.java:614)
at coldfusion.server.j2ee.sql.pool.ConnectionRunner$RunnableConnection.run(ConnectionRunner.java:59)
... 1 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 1 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago.
...
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:203)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4901)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1659)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2191)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2038)
... 12 more
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
...
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:188)
... 17 more
coldfusion-error.log, komunikaty sterownika:
Mon Nov 02 17:40:25 CET 2026 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
SQLException while attempting to connect: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up..
Nie aktualizacja w Debianie 12, tylko granica 11.0
Między pakietami 1:10.11.3-1 i 1:10.11.19-0+deb12u1 nie ma różnicy dla Connector/J 5.1: każda sprawdzona wersja sterownika zachowywała się identycznie, także po aktualizacji na miejscu. Sterownik widzi oba serwery jako MySQL 5.5.5-10.11…, a mariadb-upgrade po aktualizacji w obrębie gałęzi nic nie robi. Decyduje prefiks 5.5.5-, którego od MariaDB 11.0.1 nie ma (MDEV-28910). Serwery od 11.4 ogłaszają przy tym TLS bez żadnej konfiguracji, z certyfikatem generowanym przy starcie.
Ten sam „Connector/J 5” zachowuje się na trzy sposoby
Na MariaDB od 11.0 wydania do 5.1.37 łączą się bez TLS, od 5.1.38 do 5.1.45 nie łączą się wcale, a od 5.1.46 do 5.1.49 łączą się po TLS bez weryfikacji certyfikatu i przy każdym nowym połączeniu dopisują do coldfusion-error.log kilkuzdaniowe ostrzeżenie. Dwa serwery z „tym samym” sterownikiem mogą się więc różnić. Wersję sprawdzamy w manifeście jara (Implementation-Version: 5.1.44), nie w nazwie katalogu.
Lista protokołów TLS siedzi w sterowniku
W wydaniach od 5.1.38 do 5.1.45 klasa ExportControlled proponuje TLSv1.2 tylko serwerom MySQL od 5.6 w edycji Enterprise. Każdy inny serwer dostaje TLSv1.1,TLSv1. Java 21 ma oba protokoły w jdk.tls.disabledAlgorithms (w Oracle JDK od 11.0.11), więc uzgadnianie kończy się błędem „No appropriate protocol”, zanim cokolwiek trafi do serwera. Od 5.1.46 TLSv1.2 dostają także serwery od 8.0.4.
„NonTransient” i „reconnect” kierują w stronę sieci
ColdFusion otwiera fizyczne połączenie przez connectWithRetries, nawet bez autoReconnect=true w adresie. Sterownik próbuje trzy razy, każde żądanie czeka 4,03 s na błąd, a przy ruchu wątki ColdFusion zajmują się głównie czekaniem. Prawdziwa przyczyna to trzecie Caused by w exception.log. Sprawdzanie zapory czy limitu połączeń w bazie to tu strata czasu.
Typ „MySQL” w ColdFusion 2025 to ślepa uliczka
Typ „MySQL” oczekuje klasy com.mysql.cj.jdbc.Driver, czyli Connector/J 8 lub nowszego, którego Adobe nie dostarcza. Bez tego jara źródło zwraca „No suitable driver available for … The mysql package is not installed.”, a cfpm.sh install mysql odpowiada „mysql(2025.0.08.331874) package is already installed.”, bo pakiet mysql to sterownik DataDirect. Właściwa droga to typ „Other”, jak w bazie wiedzy Adobe.
Podmiana jara nie wystarcza, a najnowszy sterownik ma inne domyślne TLS
MariaDB Connector/J 3.x i 4.x rejestruje się tylko dla jdbc:mariadb:; stary adres jdbc:mysql:// kończy się „No suitable driver found”, dlatego każde źródło danych trzeba zmienić. Wersja 4.0.0 z października 2026 wymaga Javy 17 i domyślnie ma sslMode=verify-full. Z bazą Debiana 12 bez TLS kończy się błędem:
java.sql.SQLNonTransientConnectionException: (conn=52) Trying to connect with ssl, but ssl not enabled in the server. TLS is enabled by default, set sslMode=disable to permit unencrypted connection
„Other” zmienia typy danych
Typ „MySQL” dokleja do adresu tinyInt1isBit=false, „Other” nie. Bez tego obie rodziny sterowników zwracają TINYINT(1) jako Boolean, a ColdFusion pokazuje wartości 0, 1, 2 jako NO, YES, YES. Daty 0000-00-00 00:00:00 Connector/J 5.1 zgłaszał błędem „Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp”, MariaDB Connector/J zwraca pustą wartość. Kod, który polegał na jednym albo drugim, zachowa się inaczej.
Każdy restart bazy zostawia w puli martwe połączenia
Aktualizacja pakietu restartuje MariaDB, a ColdFusion trzyma połączenia otwarte. Każde z nich daje jeden błąd przy pierwszym użyciu: przy 8 połączeniach w puli 8 z 12 kolejnych żądań skończyło się błędem, w obu rundach. Ten sam objaw po zwykłej aktualizacji w obrębie 10.11 łatwo wziąć za awarię sterownika:
"Error","...-exec-5","11/02/26","17:34:39","","Datasource shop verification failed.The root cause was that: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 31,181 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago. ..."
"Error","...-exec-1","11/02/26","17:34:39","","Error Executing Database Query.(conn=13) Socket error The specific sequence of files included or processed is: /app/wwwroot/katalog.cfm, line: 15 (conn=13) Socket error"
Pierwszy wpis pochodzi z Connector/J 5.1, drugi z MariaDB Connector/J; jego przyczyna w exception.log to java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server). „Validate connection” z zapytaniem SELECT 1 usunęło te błędy całkowicie, 0 z 12.