Die Meldung im application.log beschrieb das letzte Symptom, nicht die Ursache. Unten stehen die Logeinträge so, wie ColdFusion sie geschrieben hat; verallgemeinert sind nur der Pfad der CFML-Datei und der Threadname.
Die genauen Logeinträge
application.log, bei jeder Anfrage:
"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, die vollständige Ausnahmekette (Frames von JDK, Tomcat und den ColdFusion-Filtern ausgelassen und mit ... markiert):
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, die Meldungen des Treibers:
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..
Nicht das Update unter Debian 12, sondern die Grenze 11.0
Zwischen den Paketen 1:10.11.3-1 und 1:10.11.19-0+deb12u1 gibt es für Connector/J 5.1 keinen Unterschied: Jede geprüfte Treiberversion verhielt sich gleich, auch nach dem Update an Ort und Stelle. Der Treiber sieht beide Server als MySQL 5.5.5-10.11…, und mariadb-upgrade tut nach einem Update innerhalb des Zweigs nichts. Entscheidend ist das Präfix 5.5.5-, das es ab MariaDB 11.0.1 nicht mehr gibt (MDEV-28910). Server ab 11.4 bieten dazu TLS ohne jede Konfiguration an, mit einem beim Start erzeugten Zertifikat.
Derselbe „Connector/J 5“ verhält sich auf drei Arten
Auf MariaDB ab 11.0 verbinden sich die Releases bis 5.1.37 ohne TLS, 5.1.38 bis 5.1.45 gar nicht, und 5.1.46 bis 5.1.49 über TLS ohne Zertifikatsprüfung, wobei sie bei jeder neuen Verbindung eine mehrzeilige Warnung in coldfusion-error.log schreiben. Zwei Server mit „demselben“ Treiber können sich also unterscheiden. Die Version lesen wir im Manifest des Jar (Implementation-Version: 5.1.44), nicht im Namen des Verzeichnisses.
Die Liste der TLS-Protokolle steckt im Treiber
In den Releases 5.1.38 bis 5.1.45 bietet die Klasse ExportControlled TLSv1.2 nur MySQL-Servern ab 5.6 in der Enterprise-Edition an. Jeder andere Server bekommt TLSv1.1,TLSv1. Java 21 führt beide Protokolle in jdk.tls.disabledAlgorithms (im Oracle JDK seit 11.0.11), also endet der Handshake mit „No appropriate protocol“, bevor irgendetwas beim Server ankommt. Ab 5.1.46 bekommen auch Server ab 8.0.4 TLSv1.2.
„NonTransient“ und „reconnect“ führen in Richtung Netzwerk
ColdFusion öffnet die physische Verbindung über connectWithRetries, auch ohne autoReconnect=true in der Adresse. Der Treiber versucht es dreimal, jede Anfrage wartet 4,03 s auf den Fehler, und unter Last sind die Threads von ColdFusion vor allem mit Warten beschäftigt. Die eigentliche Ursache ist das dritte Caused by in exception.log. Firewall oder Verbindungslimit der Datenbank zu prüfen, kostet hier nur Zeit.
Der Typ „MySQL“ in ColdFusion 2025 ist eine Sackgasse
Der Typ „MySQL“ erwartet die Klasse com.mysql.cj.jdbc.Driver, also Connector/J 8 oder neuer, den Adobe nicht mitliefert. Ohne dieses Jar meldet die Quelle „No suitable driver available for … The mysql package is not installed.“, und cfpm.sh install mysql antwortet „mysql(2025.0.08.331874) package is already installed.“, weil das Paket mysql der Treiber von DataDirect ist. Der richtige Weg ist der Typ „Other“, wie in der Wissensdatenbank von Adobe.
Das Jar zu tauschen reicht nicht, und der neueste Treiber hat andere TLS-Vorgaben
MariaDB Connector/J 3.x und 4.x registriert sich nur für jdbc:mariadb:; die alte Adresse jdbc:mysql:// endet mit „No suitable driver found“, deshalb muss jede Datenquelle geändert werden. Version 4.0.0 vom Oktober 2026 braucht Java 17 und hat standardmäßig sslMode=verify-full. Mit der Datenbank aus Debian 12 ohne TLS endet sie mit:
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“ verändert Datentypen
Der Typ „MySQL“ hängt tinyInt1isBit=false an die Adresse, „Other“ nicht. Ohne diesen Parameter liefern beide Treiberfamilien TINYINT(1) als Boolean, und ColdFusion zeigt die Werte 0, 1, 2 als NO, YES, YES. Daten 0000-00-00 00:00:00 meldete Connector/J 5.1 mit dem Fehler „Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp“, MariaDB Connector/J liefert einen leeren Wert. Code, der sich auf das eine oder das andere verließ, verhält sich anders.
Jeder Datenbankneustart hinterlässt tote Verbindungen im Pool
Ein Paketupdate startet MariaDB neu, und ColdFusion hält Verbindungen offen. Jede davon liefert bei der ersten Nutzung einen Fehler: Bei 8 Verbindungen im Pool endeten 8 von 12 folgenden Anfragen mit Fehler, in beiden Runden. Dasselbe Symptom nach einem gewöhnlichen Update innerhalb von 10.11 hält man leicht für einen Treiberfehler:
"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"
Der erste Eintrag stammt von Connector/J 5.1, der zweite von MariaDB Connector/J; seine Ursache in exception.log ist java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server). „Validate connection“ mit der Abfrage SELECT 1 hat diese Fehler vollständig beseitigt, 0 von 12.