[数据库/Java] MYSQL之数据库错误代码及解决思路

0 序

0.1 前言

吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了。
下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现的情况。

  • 为方便快速检索,本文按照【MySQL错误代码】升序排列
  • 在后续的开发过程,本文将把所遇MySQL错误的相关问题持续更新
  • SELECT VERSION()查看数据库当前版本

0.2 MYSQL ERROR CODE 错误编号(合集)

错误码 错误解释 备注说明
错误:1044 SQLSTATE: HY000/42000 原因1:表示目标用户没有足够的权限来访问指定的数据库(这个错误通常与用户权限设置有关)
2、存在为''的匿名用户/空用户(方法1:删除该用户[即mysql.user表中user列为空的空用户]【推荐】;
方法2、跳过权限,以无密码的方式进入mysql[skip-grant-tables])
1、授权:
SHOW GRANTS FOR '{userName}'@'%';
GRANT ALL PRIVILEGES ON {database_name}.* TO '{username}'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
2、查看登录用户:
select user(), current_user();drop user ''@'localhost';-- 删除匿名用户
错误:1236 SQLSTATE: HY000 (ER_MASTER_FATAL_ERROR_READING_BINLOG) 消息:从二进制日志读取数据时,获得来自主服务器的致命错误%d: ’%s’。
错误:1237 SQLSTATE: HY000 (ER_SLAVE_IGNORED_TABLE) 消息:由于“replicate-*-table”规则,从SQL线程忽略了查询。
错误:1238 SQLSTATE: HY000 (ER_INCORRECT_GLOBAL_LOCAL_VAR) 消息:变量’%s’是一种%s变量。
错误:1239 SQLSTATE: 42000 (ER_WRONG_FK_DEF) 消息:对于 ’%s’: %s, 外键定义不正确。 [Page]
错误:1240 SQLSTATE: HY000 (ER_KEY_REF_DO_NOT_MATCH_TABLE_REF) 消息:键引用和表引用不匹配。
错误:1241 SQLSTATE: 21000 (ER_OPERAND_COLUMNS) 消息:操作数应包含%d列。
错误:1242 SQLSTATE: 21000 (ER_SUBQUERY_NO_1_ROW) 消息:子查询返回1行以上。
错误:1243 SQLSTATE: HY000 (ER_UNKNOWN_STMT_HANDLER) 消息:指定给%s的未知预处理语句句柄。
错误:1244 SQLSTATE: HY000 (ER_CORRUPT_HELP_DB) 消息:帮助数据库崩溃或不存在。
错误:1245 SQLSTATE: HY000 (ER_CYCLIC_REFERENCE) 消息:对子查询的循环引用。
错误:1246 SQLSTATE: HY000 (ER_AUTO_CONVERT) 消息:将列’%s’从%s转换为%s。
错误:1247 SQLSTATE: 42S22 (ER_ILLEGAL_REFERENCE) 消息:引用’%s’不被支持 (%s)。
错误:1248 SQLSTATE: 42000 (ER_DERIVED_MUST_HAVE_ALIAS) 消息:所有的导出表必须有自己的别名。
错误:1249 SQLSTATE: 01000 (ER_SELECT_REDUCED) 消息:在优化期间简化了选择%u。
错误:1250 SQLSTATE: 42000 (ER_TABLENAME_NOT_ALLOWED_HERE) 消息:来自某一SELECT的表’%s’不能在%s中使用。
错误:1251 SQLSTATE: 08004 (ER_NOT_SUPPORTED_AUTH_MODE) 消息:客户端不支持服务器请求的鉴定协议,请考虑升级MySQL客户端。
错误:1252 SQLSTATE: 42000 (ER_SPATIAL_CANT_HAVE_NULL) 消息:SPATIAL索引的所有部分必须是NOT NULL。
错误:1253 SQLSTATE: 42000 (ER_COLLATION_CHARSET_MISMATCH) 消息:对于CHARACTER SET ’%s’,COLLATION ’%s’无效。
错误:1254 SQLSTATE: HY000 (ER_SLAVE_WAS_RUNNING) 消息:从服务器正在运行。
错误:1255 SQLSTATE: HY000 (ER_SLAVE_WAS_NOT_RUNNING) 消息:从服务器已停止。
错误:1256 SQLSTATE: HY000 (ER_TOO_BIG_FOR_UNCOMPRESS) 消息:解压的数据过大,最大大小为%d(也可能是,解压数据的长度已损坏)。
错误:1257 SQLSTATE: HY000 (ER_ZLIB_Z_MEM_ERROR) 消息:ZLIB,无足够内存。
错误:1258 SQLSTATE: HY000 (ER_ZLIB_Z_BUF_ERROR) 消息:ZLIB,输出缓冲区内无足够空间(也可能是,解压数据的长度已损坏)。
错误:1259 SQLSTATE: HY000 (ER_ZLIB_Z_DATA_ERROR) 消息:ZLIB,输入数据已损坏。
错误:1260 SQLSTATE: HY000 (ER_CUT_VALUE_GROUP_CONCAT) 消息:%d行被GROUP_CONCAT()截去。
错误:1261 SQLSTATE: 01000 (ER_WARN_TOO_FEW_RECORDS) 消息:行%ld不包含所有列的数据。
错误:1262 SQLSTATE: 01000 (ER_WARN_TOO_MANY_RECORDS) 消息:行%ld被解短,它包含的数据大于输入列中的数据。
错误:1263 SQLSTATE: 22004 (ER_WARN_NULL_TO_NOTNULL) 消息:列被设为默认值,在行%ld上将NULL提供给了NOT NULL列。
错误:1264 SQLSTATE: 22003 (ER_WARN_DATA_OUT_OF_RANGE) 消息:为行%ld上的列’%s’调整超出范围的值。
错误:1265 SQLSTATE: 01000 (WARN_DATA_TRUNCATED) 消息:为行%ld上的列’%s’截短数据。
错误:1266 SQLSTATE: HY000 (ER_WARN_USING_OTHER_HANDLER) 消息:为表%s使用存储引擎%s。 [Page]
错误:1267 SQLSTATE: HY000 (ER_CANT_AGGREGATE_2COLLATIONS) 消息:对于操作’%s’,非法混合了校对(%s,%s)和(%s,%s)。
错误:1268 SQLSTATE: HY000 (ER_DROP_USER) 消息:无法撤销1个或多个请求的用户。
错误:1269 SQLSTATE: HY000 (ER_REVOKE_GRANTS) 消息:无法撤销所有权限,为1个或多个请求的用户授权。
错误:1270 SQLSTATE: HY000 (ER_CANT_AGGREGATE_3COLLATIONS) 消息:对于操作’%s’,非法混合了校对(%s,%s)、(%s,%s)和(%s,%s)。
错误:1271 SQLSTATE: HY000 (ER_CANT_AGGREGATE_NCOLLATIONS) 消息:对于操作’%s’,非法混合了校对。
错误:1272 SQLSTATE: HY000 (ER_VARIABLE_IS_NOT_STRUCT) 消息:变量’%s’不是变量组分(不能用作XXXX.variable_name)。
错误:1273 SQLSTATE: HY000 (ER_UNKNOWN_COLLATION) 消息:未知校对’%s’。
错误:1274 SQLSTATE: HY000 (ER_SLAVE_IGNORED_SSL_PARAMS) 消息:由于该MySQL从服务器是在不支持SSL的情况下编译的,CHANGE MASTER中的SSL参数被忽略,随后,如果启动了具备SSL功能的MySQL,可使用这些参数。
错误:1275 SQLSTATE: HY000 (ER_SERVER_IS_IN_SECURE_AUTH_MODE) 消息:服务器正运行在“--secure-auth”模式下,但 ’%s’@’%s’ 有1个采用旧格式的密码,请将密码更改为新格式。
错误:1276 SQLSTATE: HY000 (ER_WARN_FIELD_RESOLVED) 消息:SELECT #%d的字段或引用’%s%s%s%s%s’是在SELECT #%d中确定的。
错误:1277 SQLSTATE: HY000 (ER_BAD_SLAVE_UNTIL_COND) 消息:对于START SLAVE UNTIL,不正确的参数或参数组合。
错误:1278 SQLSTATE: HY000 (ER_MISSING_SKIP_SLAVE) 消息:与START SLAVE UNTIL一起执行按步复制时,建议使用“--skip-slave-start”,否则,如果发生未预料的从服务器mysqld重启,间出现问题。
错误:1279 SQLSTATE: HY000 (ER_UNTIL_COND_IGNORED) 消息:SQL线程未启动,因而UNTIL选项被忽略。
错误:1280 SQLSTATE: 42000 (ER_WRONG_NAME_FOR_INDEX) 消息:不正确的索引名’%s’。
错误:1281 SQLSTATE: 42000 (ER_WRONG_NAME_FOR_CATALOG) 消息:不正确的目录名’%s’。
错误:1282 SQLSTATE: HY000 (ER_WARN_QC_RESIZE) 消息:查询高速缓冲设置大小%lu时失败,新的查询高速缓冲的大小是%lu。
错误:1283 SQLSTATE: HY000 (ER_BAD_FT_COLUMN) 消息:列’%s’不能是FULLTEXT索引的一部分。
错误:1284 SQLSTATE: HY000 (ER_UNKNOWN_KEY_CACHE) 消息:未知的键高速缓冲’%s’。
错误:1285 SQLSTATE: HY000 (ER_WARN_HOSTNAME_WONT_WORK) 消息:MySQL是在“--skip-name-resolve”模式下启动的,必须在不使用该开关的情况下重启它,以便该授权能起作用。
错误:1286 SQLSTATE: 42000 (ER_UNKNOWN_STORAGE_ENGINE) 消息:未知的表引擎’%s’。
错误:1287 SQLSTATE: HY000 (ER_WARN_DEPRECATED_SYNTAX) 消息:’%s’已过时,请使用’%s’取而代之。
错误:1288 SQLSTATE: HY000 (ER_NON_UPDATABLE_TABLE) 消息:%s的目标表%s不可更新。
错误:1289 SQLSTATE: HY000 (ER_FEATURE_DISABLED) 消息:’%s’特性已被禁止,要想使其工作,需要用’%s’创建MySQL。 [Page]
错误:1290 SQLSTATE: HY000 (ER_OPTION_PREVENTS_STATEMENT 消息:MySQL正使用%s选项运行,因此不能执行该语句。
错误:1291 SQLSTATE: HY000 (ER_DUPLICATED_VALUE_IN_TYPE) 消息:列’%s’在%s中有重复值’%s’。
错误:1292 SQLSTATE: 22007 (ER_TRUNCATED_WRONG_VALUE) 消息:截短了不正确的%s值: ’%s’
错误:1293 SQLSTATE: HY000 (ER_TOO_MUCH_AUTO_TIMESTAMP_COLS) 消息:不正确的表定义,在DEFAULT或ON UPDATE子句中,对于CURRENT_TIMESTAMP,只能有一个TIMESTAMP列。
错误:1294 SQLSTATE: HY000 (ER_INVALID_ON_UPDATE) 消息:对于’%s’列,ON UPDATE子句无效
错误:1295 SQLSTATE: HY000 (ER_UNSUPPORTED_PS) 消息:在预处理语句协议中,尚不支持该命令。
错误:1296 SQLSTATE: HY000 (ER_GET_ERRMSG) 消息:从%s获得错误%d ’%s’。
错误:1297 SQLSTATE: HY000 (ER_GET_TEMPORARY_ERRMSG) 消息:从%s获得临时错误%d ’%s’。
错误:1298 SQLSTATE: HY000 (ER_UNKNOWN_TIME_ZONE) 消息:未知或不正确的时区: ’%s’
错误:1299 SQLSTATE: HY000 (ER_WARN_INVALID_TIMESTAMP) 消息:在行%ld的列’%s’中存在无效的TIMESTAMP值。
错误:1300 SQLSTATE: HY000 (ER_INVALID_CHARACTER_STRING) 消息:无效的%s字符串: ’%s’
错误:1301 SQLSTATE: HY000 (ER_WARN_ALLOWED_PACKET_OVERFLOWED) 消息:%s()的结果大于max_allowed_packet (%ld),已截短
错误:1302 SQLSTATE: HY000 (ER_CONFLICTING_DECLARATIONS) 消息:冲突声明:’%s%s’和’%s%s’
错误:1303 SQLSTATE: 2F003 (ER_SP_NO_RECURSIVE_CREATE) 消息:不能从另一个存储子程序中创建%s。
错误:1304 SQLSTATE: 42000 (ER_SP_ALREADY_EXISTS) 消息:%s %s已存在。
错误:1305 SQLSTATE: 42000 (ER_SP_DOES_NOT_EXIST) 消息:%s %s不存在。
错误:1306 SQLSTATE: HY000 (ER_SP_DROP_FAILED) 消息:DROP %s %s失败
错误:1307 SQLSTATE: HY000 (ER_SP_STORE_FAILED) 消息:CREATE %s %s失败。
错误:1308 SQLSTATE: 42000 (ER_SP_LILABEL_MISMATCH) 消息:%s无匹配标签: %s
错误:1309 SQLSTATE: 42000 (ER_SP_LABEL_REDEFINE) 消息:重新定义标签%s
错误:1310 SQLSTATE: 42000 (ER_SP_LABEL_MISMATCH) 消息:末端标签%s无匹配项
错误:1311 SQLSTATE: 01000 (ER_SP_UNINIT_VAR) 消息:正在引用未初始化的变量%s。
错误:1312 SQLSTATE: 0A000 (ER_SP_BADSELECT) 消息:PROCEDURE %s不能在给定场景下返回结果集。
错误:1313 SQLSTATE: 42000 (ER_SP_BADRETURN) 消息:仅在FUNCTION中允许RETURN。
错误:1314 SQLSTATE: 0A000 (ER_SP_BADSTATEMENT) 消息:在存储程序中不允许%s。
错误:1315 SQLSTATE: 42000 (ER_UPDATE_LOG_DEPRECATED_IGNORED) 消息:更新日志已被放弃,并用二进制日志取代,SET SQL_LOG_UPDATE被忽略。
错误:1316 SQLSTATE: 42000 (ER_UPDATE_LOG_DEPRECATED_TRANSLATED) 消息:更新日志已被放弃,并用二进制日志取代,SET SQL_LOG_UPDATE已被截短为SET SQL_LOG_BIN。 [Page]
错误:1317 SQLSTATE: 70100 (ER_QUERY_INTERRUPTED) 消息:查询执行被中断。
错误:1318 SQLSTATE: 42000 (ER_SP_WRONG_NO_OF_ARGS) 消息:对于%s %s,参量数目不正确,预期为%u,但却是%u。
错误:1319 SQLSTATE: 42000 (ER_SP_COND_MISMATCH) 消息:未定义的CONDITION: %s
错误:1320 SQLSTATE: 42000 (ER_SP_NORETURN) 消息:在FUNCTION %s中未发现RETURN。
错误:1321 SQLSTATE: 2F005 (ER_SP_NORETURNEND) 消息:FUNCTION %s结束时缺少RETURN。
错误:1322 SQLSTATE: 42000 (ER_SP_BAD_CURSOR_QUERY) 消息:光标语句必须是SELECT。
错误:1323 SQLSTATE: 42000 (ER_SP_BAD_CURSOR_SELECT) 消息:光标SELECT不得有INTO。
错误:1324 SQLSTATE: 42000 (ER_SP_CURSOR_MISMATCH) 消息:未定义的CURSOR: %s
错误:1325 SQLSTATE: 24000 (ER_SP_CURSOR_ALREADY_OPEN) 消息:光标已打开
错误:1326 SQLSTATE: 24000 (ER_SP_CURSOR_NOT_OPEN) 消息:光标未打开
错误:1327 SQLSTATE: 42000 (ER_SP_UNDECLARED_VAR) 消息:未声明的变量:%s
错误:1328 SQLSTATE: HY000 (ER_SP_WRONG_NO_OF_FETCH_ARGS) 消息:不正确的FETCH变量数目。
错误:1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA) 消息:FETCH无数据。
错误:1330 SQLSTATE: 42000 (ER_SP_DUP_PARAM) 消息:重复参数: %s
错误:1331 SQLSTATE: 42000 (ER_SP_DUP_VAR) 消息:重复变量: %s
错误:1332 SQLSTATE: 42000 (ER_SP_DUP_COND) 消息:重复条件: %s
错误:1333 SQLSTATE: 42000 (ER_SP_DUP_CURS) 消息:重复光标: %s
错误:1334 SQLSTATE: HY000 (ER_SP_CANT_ALTER) 消息:ALTER %s %s失败。
错误:1335 SQLSTATE: 0A000 (ER_SP_SUBSELECT_NYI) 消息:不支持Subselect值。
错误:1336 SQLSTATE: 0A000 (ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG) 消息:在存储函数或触发程序中,不允许%s。
错误:1337 SQLSTATE: 42000 (ER_SP_VARCOND_AFTER_CURSHNDLR) 消息:光标或句柄声明后面的变量或条件声明。
错误:1338 SQLSTATE: 42000 (ER_SP_CURSOR_AFTER_HANDLER) 消息:句柄声明后面的光标声明。
错误:1339 SQLSTATE: 20000 (ER_SP_CASE_NOT_FOUND) 消息:对于CASE语句,未发现Case。
错误:1340 SQLSTATE: HY000 (ER_FPARSER_TOO_BIG_FILE) 消息:配置文件’%s’过大。
错误:1341 SQLSTATE: HY000 (ER_FPARSER_BAD_HEADER) 消息:文件’%s’中存在残缺的文件类型标题。
错误:1342 SQLSTATE: HY000 (ER_FPARSER_EOF_IN_COMMENT) 消息:解析’%s’时,文件意外结束。
错误:1343 SQLSTATE: HY000 (ER_FPARSER_ERROR_IN_PARAMETER) 消息:解析参数’%s’时出错(行:’%s’)。
错误:1344 SQLSTATE: HY000 (ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER) 消息:跳过未知参数’%s’时,文件意外结束。
错误:1345 SQLSTATE: HY000 (ER_VIEW_NO_EXPLAIN) 消息:EXPLAIN/SHOW无法发出,缺少对基本表的权限。
错误:1346 SQLSTATE: HY000 (ER_FRM_UNKNOWN_TYPE) 消息:文件’%s’在其题头中有未知的类型’%s’。 [Page]
错误:1347 SQLSTATE: HY000 (ER_WRONG_OBJECT) 消息:’%s.%s’不是%s。
错误:1348 SQLSTATE: HY000 (ER_NONUPDATEABLE_COLUMN) 消息:列’%s’不可更新。
错误:1349 SQLSTATE: HY000 (ER_VIEW_SELECT_DERIVED) 消息:视图的SELECT在FROM子句中包含子查询。
错误:1350 SQLSTATE: HY000 (ER_VIEW_SELECT_CLAUSE) 消息:视图的SELECT包含’%s’子句。
错误:1351 SQLSTATE: HY000 (ER_VIEW_SELECT_VARIABLE) 消息:视图的SELECT包含1个变量或参数。
错误:1352 SQLSTATE: HY000 (ER_VIEW_SELECT_TMPTABLE) 消息:视图的SELECT引用了临时表’%s’。
错误:1353 SQLSTATE: HY000 (ER_VIEW_WRONG_LIST) 消息:视图的SELECT和视图的字段列表有不同的列计数。
错误:1354 SQLSTATE: HY000 (ER_WARN_VIEW_MERGE) 消息:此时,不能在这里使用视图合并算法(假定未定义算法)。
错误:1355 SQLSTATE: HY000 (ER_WARN_VIEW_WITHOUT_KEY) 消息:正在更新的视图没有其基本表的完整键。
错误:1356 SQLSTATE: HY000 (ER_VIEW_INVALID) 消息:视图’%s.%s’引用了无效的表、列、或函数,或视图的定义程序/调用程序缺少使用它们的权限。
错误:1357 SQLSTATE: HY000 (ER_SP_NO_DROP_SP) 消息:无法从另一个存储子程序中撤销或更改%s。
错误:1358 SQLSTATE: HY000 (ER_SP_GOTO_IN_HNDLR) 消息:在存储子程序句柄中不允许GOTO。
错误:1359 SQLSTATE: HY000 (ER_TRG_ALREADY_EXISTS) 消息:触发程序已存在。
错误:1360 SQLSTATE: HY000 (ER_TRG_DOES_NOT_EXIST) 消息:触发程序不存在。
错误:1361 SQLSTATE: HY000 (ER_TRG_ON_VIEW_OR_TEMP_TABLE) 消息:触发程序的’%s’是视图或临时表。
错误:1362 SQLSTATE: HY000 (ER_TRG_CANT_CHANGE_ROW) 消息:在%strigger中,不允许更新%s行。
错误:1363 SQLSTATE: HY000 (ER_TRG_NO_SUCH_ROW_IN_TRG) 消息:在%s触发程序中没有%s行。
错误:1364 SQLSTATE: HY000 (ER_NO_DEFAULT_FOR_FIELD) 消息:字段’%s’没有默认值。
错误:1365 SQLSTATE: 22012 (ER_DIVISION_BY_ZERO) 消息:被0除。
错误:1366 SQLSTATE: HY000 (ER_TRUNCATED_WRONG_VALUE_FOR_FIELD) 消息:不正确的%s值,’%s’,对于行%ld 上的列’%s’。
错误:1367 SQLSTATE: 22007 (ER_ILLEGAL_VALUE_FOR_TYPE) 消息:解析过程中发现非法%s ’%s’值。
错误:1368 SQLSTATE: HY000 (ER_VIEW_NONUPD_CHECK) 消息:不可更新视图’%s.%s’上的CHECK OPTION。
错误:1369 SQLSTATE: HY000 (ER_VIEW_CHECK_FAILED) 消息:CHECK OPTION失败,’%s.%s’
错误:1370 SQLSTATE: 42000 (ER_PROCACCESS_DENIED_ERROR) 消息:对于子程序’%s’,拒绝用户 ’%s’@’%s’ 使用%s命令。
错误:1371 SQLSTATE: HY000 (ER_RELAY_LOG_FAIL) 消息:清除旧中继日志失败,%s
错误:1372 SQLSTATE: HY000 (ER_PASSWD_LENGTH) 消息:密码混编应是%d位的十六进制数。
错误:1373 SQLSTATE: HY000 (ER_UNKNOWN_TARGET_BINLOG) 消息:在binlog索引中未发现目标日志。 [Page]
错误:1374 SQLSTATE: HY000 (ER_IO_ERR_LOG_INDEX_READ) 消息:读取日志索引文件时出现I/O错误。
错误:1375 SQLSTATE: HY000 (ER_BINLOG_PURGE_PROHIBITED) 消息:服务器配置不允许binlog清除。
错误:1376 SQLSTATE: HY000 (ER_FSEEK_FAIL) 消息:fseek()失败。
错误:1377 SQLSTATE: HY000 (ER_BINLOG_PURGE_FATAL_ERR) 消息:在日志清除过程中出现致命错误。
错误:1378 SQLSTATE: HY000 (ER_LOG_IN_USE) 消息:可清除的日志正在使用,不能清除。
错误:1379 SQLSTATE: HY000 (ER_LOG_PURGE_UNKNOWN_ERR) 消息:在日志清除过程中出现未知错误。
错误:1380 SQLSTATE: HY000 (ER_RELAY_LOG_INIT) 消息:初始化中继日志位置失败,%s
错误:1381 SQLSTATE: HY000 (ER_NO_BINARY_LOGGING) 消息:未使用二进制日志功能。
错误:1382 SQLSTATE: HY000 (ER_RESERVED_SYNTAX) 消息:’%s’语法保留给MySQL服务器内部使用。
错误:1383 SQLSTATE: HY000 (ER_WSAS_FAILED) 消息:WSAStartup失败。
错误:1384 SQLSTATE: HY000 (ER_DIFF_GROUPS_PROC) 消息:尚不能用不同的组处理过程。
错误:1385 SQLSTATE: HY000 (ER_NO_GROUP_FOR_PROC) 消息:对于该过程,SELECT必须有1个组。
错误:1386 SQLSTATE: HY000 (ER_ORDER_WITH_PROC) 消息:不能与该过程一起使用ORDER子句。
错误:1387 SQLSTATE: HY000 (ER_LOGGING_PROHIBIT_CHANGING_OF) 消息:二进制日志功能和复制功能禁止更改全局服务器%s。
错误:1388 SQLSTATE: HY000 (ER_NO_FILE_MAPPING) 消息:无法映射文件: %s, errno: %d
错误:1389 SQLSTATE: HY000 (ER_WRONG_MAGIC) 消息:%s中有错
错误:1390 SQLSTATE: HY000 (ER_PS_MANY_PARAM) 消息:预处理语句包含过多的占位符。
错误:1391 SQLSTATE: HY000 (ER_KEY_PART_0) 消息:键部分’%s’的长度不能为0。
错误:1392 SQLSTATE: HY000 (ER_VIEW_CHECKSUM) 消息:视图文本校验和失败。
错误:1393 SQLSTATE: HY000 (ER_VIEW_MULTIUPDATE) 消息:无法通过联合视图’%s.%s’更改1个以上的基本表。
错误:1394 SQLSTATE: HY000 (ER_VIEW_NO_INSERT_FIELD_LIST) 消息:不能在没有字段列表的情况下插入联合视图’%s.%s’。
错误:1395 SQLSTATE: HY000 (ER_VIEW_DELETE_MERGE_VIEW) 消息:不能从联合视图’%s.%s’中删除。
错误:1396 SQLSTATE: HY000 (ER_CANNOT_USER) 消息:对于%s的操作%s失败。
错误:1397 SQLSTATE: XAE04 (ER_XAER_NOTA) 消息:XAER_NOTA: 未知XID
错误:1398 SQLSTATE: XAE05 (ER_XAER_INVAL) 消息:XAER_INVAL: 无效参量(或不支持的命令)
错误:1399 SQLSTATE: XAE07 (ER_XAER_RMFAIL) 消息:XAER_RMFAIL: 当全局事务处于%s状态时,不能执行命令。
错误:1400 SQLSTATE: XAE09 (ER_XAER_OUTSIDE) 消息:XAER_OUTSIDE: 某些工作是在全局事务外完成的。
错误:1401 SQLSTATE: XAE03 (ER_XAER_RMERR) 消息:XAER_RMERR: 在事务分支中出现致命错误,请检查数据一致性。
错误:1402 SQLSTATE: XA100 (ER_XA_RBROLLBACK) 消息:XA_RBROLLBACK: 回滚了事务分支。 [Page]
错误:1403 SQLSTATE: 42000 (ER_NONEXISTING_PROC_GRANT) 消息:在子程序’%s’上没有为主机’%s’上的用户’%s’定义的这类授权。
错误:1404 SQLSTATE: HY000 (ER_PROC_AUTO_GRANT_FAIL) 消息:无法授予EXECUTE和ALTER ROUTINE权限。
错误:1405 SQLSTATE: HY000 (ER_PROC_AUTO_REVOKE_FAIL) 消息:无法撤销已放弃子程序上的所有权限。
错误:1406 SQLSTATE: 22001 (ER_DATA_TOO_LONG) 消息:对于行%ld上的列’%s’来说,数据过长。
错误:1407 SQLSTATE: 42000 (ER_SP_BAD_SQLSTATE) 消息:不良SQLSTATE: ’%s’
错误:1408 SQLSTATE: HY000 (ER_STARTUP) 消息:%s,连接就绪;版本,’%s’;套接字,’%s’;端口,%d %s
错误:1409 SQLSTATE: HY000 (ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR) 消息:不能从具有固定大小行的文件中将值加载到变量。
错误:1410 SQLSTATE: 42000 (ER_CANT_CREATE_USER_WITH_GRANT) 消息:不允许用GRANT创建用户。
错误:1411 SQLSTATE: HY000 (ER_WRONG_VALUE_FOR_TYPE) 消息:不正确的%s值,’%s’,对于函数%s
错误:1412 SQLSTATE: HY000 (ER_TABLE_DEF_CHANGED) 消息:表定义已更改,请再次尝试事务。
错误:1413 SQLSTATE: 42000 (ER_SP_DUP_HANDLER) 消息:在相同块中声明了重复句柄。
错误:1414 SQLSTATE: 42000 (ER_SP_NOT_VAR_ARG) 消息:子程序%s的OUT或INOUT参量不是变量。
错误:1415 SQLSTATE: 0A000 (ER_SP_NO_RETSET) 消息:不允许从%s返回结果集。
错误:1416 SQLSTATE: 22003 (ER_CANT_CREATE_GEOMETRY_OBJECT) 消息:不能从发送给GEOMETRY字段的数据中获取几何对象。
错误:1417 SQLSTATE: HY000 (ER_FAILED_ROUTINE_BREAK_BINLOG) 消息:1个子程序失败,在其声明没有NO SQL或READS SQL DATA,而且二进制日志功能已启用,如果更新了非事务性表,二进制日志将丢失其变化信息。
错误:1418 SQLSTATE: HY000 (ER_BINLOG_UNSAFE_ROUTINE) 消息:在该子程序的在其声明没有DETERMINISTIC、NO SQL或READS SQL DATA,而且二进制日志功能已启用(你或许打算使用不太安全的log_bin_trust_routine_creators变量)。
错误:1419 SQLSTATE: HY000 (ER_BINLOG_CREATE_ROUTINE_NEED_SUPER) 消息:你没有SUPER权限,而且二进制日志功能已启用(你或许打算使用不太安全的log_bin_trust_routine_creators变 量)。
错误:1420 SQLSTATE: HY000 (ER_EXEC_STMT_WITH_OPEN_CURSOR) 消息:不能执行该预处理语句,该预处理语句有与之相关的打开光标。请复位语句并再次执行。
错误:1421 SQLSTATE: HY000 (ER_STMT_HAS_NO_OPEN_CURSOR) 消息:语句(%lu)没有打开的光标。
错误:1422 SQLSTATE: HY000 (ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG) 消息:在存储函数或触发程序中,不允许显式或隐式提交。
错误:1423 SQLSTATE: HY000 (ER_NO_DEFAULT_FOR_VIEW_FIELD) 消息:视图’%s.%s’基本表的字段没有默认值。
错误:1424 SQLSTATE: HY000 (ER_SP_NO_RECURSION) 消息:不允许递归存储子程序。 [Page]
错误:1425 SQLSTATE: 42000 (ER_TOO_BIG_SCALE) 消息:为列’%s’指定了过大的标度%d。最大为%d。
错误:1426 SQLSTATE: 42000 (ER_TOO_BIG_PRECISION) 消息:为列’%s’指定了过高的精度%d。最大为%d。
错误:1427 SQLSTATE: 42000 (ER_M_BIGGER_THAN_D) 消息:对于float(M,D)、double(M,D)或decimal(M,D),M必须>= D (列’%s’)。
错误:1428 SQLSTATE: HY000 (ER_WRONG_LOCK_OF_SYSTEM_TABLE) 消息:不能将系统’%s.%s’表的写锁定与其他表结合起来。
错误:1429 SQLSTATE: HY000 (ER_CONNECT_TO_FOREIGN_DATA_SOURCE) 消息:无法连接到外部数据源,数据库’%s’!
错误:1430 SQLSTATE: HY000 (ER_QUERY_ON_FOREIGN_DATA_SOURCE) 消息:处理作用在外部数据源上的查询时出现问题。数据源错误:’%s’
错误:1431 SQLSTATE: HY000 (ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST) 消息:你试图引用的外部数据源不存在。数据源错误:’%s’
错误:1432 SQLSTATE: HY000 (ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE) 消息:无法创建联合表。数据源连接字符串’%s’格式不正确。
错误:1433 SQLSTATE: HY000 (ER_FOREIGN_DATA_STRING_INVALID) 消息:数据源连接字符串’%s’格式不正确。
错误:1434 SQLSTATE: HY000 (ER_CANT_CREATE_FEDERATED_TABLE) 消息:无法创建联合表。外部数据源错误:’%s’
错误:1435 SQLSTATE: HY000 (ER_TRG_IN_WRONG_SCHEMA) 消息:触发程序位于错误的方案中。
错误:1436 SQLSTATE: HY000 (ER_STACK_OVERRUN_NEED_MORE) 消息:线程堆栈溢出,%ld字节堆栈用了%ld字节,并需要%ld字节。请使用’mysqld -O thread_stack=#’指定更大的堆栈。
错误:1437 SQLSTATE: 42000 (ER_TOO_LONG_BODY) 消息:’%s’的子程序主体过长。
错误:1438 SQLSTATE: HY000 (ER_WARN_CANT_DROP_DEFAULT_KEYCACHE) 消息:无法撤销默认的keycache。
错误:1439 SQLSTATE: 42000 (ER_TOO_BIG_DISPLAYWIDTH) 消息:对于列’%s’,显示宽度超出范围(max = %d)
错误:1440 SQLSTATE: XAE08 (ER_XAER_DUPID) 消息:XAER_DUPID: XID已存在
错误:1441 SQLSTATE: 22008 (ER_DATETIME_FUNCTION_OVERFLOW) 消息:日期时间函数,%s字段溢出。
错误:1442 SQLSTATE: HY000 (ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG) 消息:由于它已被调用了该存储函数/触发程序的语句使用,不能在存储函数/触发程序中更新表’%s’。
错误:1443 SQLSTATE: HY000 (ER_VIEW_PREVENT_UPDATE) 消息:表’%s’的定义不允许在表’%s上执行操作%s。
错误:1444 SQLSTATE: HY000 (ER_PS_NO_RECURSION) 消息:预处理语句包含引用了相同语句的存储子程序调用。不允许以这类递归方式执行预处理语句。
错误:1445 SQLSTATE: HY000 (ER_SP_CANT_SET_AUTOCOMMIT) 消息:不允许从存储函数或触发程序设置autocommit。
错误:1446 SQLSTATE: HY000 (ER_NO_VIEW_USER) 消息:视图定义人不完全合格。
错误:1447 SQLSTATE: HY000 (ER_VIEW_FRM_NO_USER) 消息:视图%s.%s没有定义人信息(旧的表格式)。当前用户将被当作定义人。请重新创建视图! [Page]
错误:1448 SQLSTATE: HY000 (ER_VIEW_OTHER_USER) 消息:需要SUPER权限才能创建具有 %s@%s 定义器的视图。
错误:1449 SQLSTATE: HY000 (ER_NO_SUCH_USER) 消息:没有注册的 %s@%s 。
错误:1450 SQLSTATE: HY000 (ER_FORBID_SCHEMA_CHANGE) 消息:不允许将方案从’%s’变为’%s’。
错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,外键约束失败(%s)。
错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,外键约束失败(%s)。
错误:1453 SQLSTATE: 42000 (ER_SP_BAD_VAR_SHADOW) 消息:必须用...引用变量,或重新命名变量。
错误:1454 SQLSTATE: HY000 (ER_PARTITION_REQUIRES_VALUES_ERROR) 消息:对于每个分区,%s PARTITIONING需要VALUES %s的定义。
错误:1455 SQLSTATE: HY000 (ER_PARTITION_WRONG_VALUES_ERROR) 消息:在分区定义中,只有%s PARTITIONING能使用VALUES %s。
错误:1456 SQLSTATE: HY000 (ER_PARTITION_MAXVALUE_ERROR) 消息:MAXVALUE只能在最后1个分区定义中使用。
错误:1457 SQLSTATE: HY000 (ER_PARTITION_SUBPARTITION_ERROR) 消息:子分区只能是哈希分区,并按键分区。
错误:1458 SQLSTATE: HY000 (ER_PARTITION_WRONG_NO_PART_ERROR) 消息:定义了错误的分区数,与前面的设置不匹配。
错误:1459 SQLSTATE: HY000 (ER_PARTITION_WRONG_NO_SUBPART_ERROR) 消息:定义了错误的子分区数,与前面的设置不匹配。
错误:1460 SQLSTATE: HY000 (ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR) 消息:在分区(子分区)函数中不允许使用常量/随机表达式。
错误:1461 SQLSTATE: HY000 (ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR) 消息:RANGE/LIST VALUES中的表达式必须是常量。
错误:1462 SQLSTATE: HY000 (ER_FIELD_NOT_FOUND_PART_ERROR) 消息:在表中未发现分区函数字段列表中的字段。
错误:1463 SQLSTATE: HY000 (ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR) 消息:仅在KEY分区中允许使用字段列表。
错误:1464 SQLSTATE: HY000 (ER_INCONSISTENT_PARTITION_INFO_ERROR) 消息:frm文件中的分区信息与能够写入到frm文件中的不一致。
错误:1465 SQLSTATE: HY000 (ER_PARTITION_FUNC_NOT_ALLOWED_ERROR) 消息:%s函数返回了错误类型。
错误:1466 SQLSTATE: HY000 (ER_PARTITIONS_MUST_BE_DEFINED_ERROR) 消息:对于%s分区,必须定义每个分区。
错误:1467 SQLSTATE: HY000 (ER_RANGE_NOT_INCREASING_ERROR) 消息:对于各分区,VALUES LESS THAN值必须严格增大。
错误:1468 SQLSTATE: HY000 (ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR) 消息:VALUES值必须与分区函数具有相同的类型。
错误:1469 SQLSTATE: HY000 (ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR) 消息:Multiple definition of same constant in list partitioning
错误:1470 SQLSTATE: HY000 (ER_PARTITION_ENTRY_ERROR) 消息:在查询中,不能独立使用分区功能。
错误:1471 SQLSTATE: HY000 (ER_MIX_HANDLER_ERROR) 消息:在该MySQL版本中,不允许分区中的句柄组合。 [Page]
错误:1472 SQLSTATE: HY000 (ER_PARTITION_NOT_DEFINED_ERROR) 消息:对于分区引擎,有必要定义所有的%s。
错误:1473 SQLSTATE: HY000 (ER_TOO_MANY_PARTITIONS_ERROR) 消息:定义了过多分区。
错误:1474 SQLSTATE: HY000 (ER_SUBPARTITION_ERROR) 消息:对于子分区,仅能将RANGE/LIST分区与HASH/KEY分区混合起来。
错误:1475 SQLSTATE: HY000 (ER_CANT_CREATE_HANDLER_FILE) 消息:无法创建特定的句柄文件。
错误:1476 SQLSTATE: HY000 (ER_BLOB_FIELD_IN_PART_FUNC_ERROR) 消息:在分区函数中,不允许使用BLOB字段。
错误:1477 SQLSTATE: HY000 (ER_CHAR_SET_IN_PART_FIELD_ERROR) 消息:如果为分区函数选择了二进制校对,才允许使用VARCHAR。
错误:1478 SQLSTATE: HY000 (ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF) 消息:在分区函数中,%s需要包含所有文件。
错误:1479 SQLSTATE: HY000 (ER_NO_PARTS_ERROR) 消息:%s的数目= 0不是允许的值。
错误:1480 SQLSTATE: HY000 (ER_PARTITION_MGMT_ON_NONPARTITIONED) 消息:无法在非分区表上进行分区管理。
错误:1481 SQLSTATE: HY000 (ER_DROP_PARTITION_NON_EXISTENT) 消息:分区列表中的错误出现变化。
错误:1482 SQLSTATE: HY000 (ER_DROP_LAST_PARTITION) 消息:不能删除所有分区,请使用DROP TABLE取而代之。
错误:1483 SQLSTATE: HY000 (ER_COALESCE_ONLY_ON_HASH_PARTITION) 消息:COALESCE PARTITION仅能在HASH/KEY分区上使用。
错误:1484 SQLSTATE: HY000 (ER_ONLY_ON_RANGE_LIST_PARTITION) 消息:%s PARTITION仅能在RANGE/LIST分区上使用。
错误:1485 SQLSTATE: HY000 (ER_ADD_PARTITION_SUBPART_ERROR) 消息:试图用错误的子分区数增加分区。
错误:1486 SQLSTATE: HY000 (ER_ADD_PARTITION_NO_NEW_PARTITION) 消息:必须至少添加1个分区。
错误:1487 SQLSTATE: HY000 (ER_COALESCE_PARTITION_NO_PARTITION) 消息:必须至少合并1个分区。
错误:1488 SQLSTATE: HY000 (ER_REORG_PARTITION_NOT_EXIST) 消息:重组的分区数超过了已有的分区数。

0.3 SQLSTATE[HY000]:执行查询后出现常规错误

  • SQLSTATE[HY000]是一种SQL语句执行错误的状态码,表示在执行查询时发生了常规错误

该错误码是由SQL标准定义的,不仅适用于特定的数据库系统,也适用于各种关系型数据库

  • 常规错误可能包括以下几种情况:
  • 语法错误:SQL查询语句中存在语法错误,例如拼写错误、缺少关键字等。这种错误可以通过仔细检查SQL语句并进行修正来解决。
  • 数据库连接错误:数据库连接可能出现问题,例如数据库服务器无法访问、连接超时等。可以通过检查数据库连接配置、网络连接状态等来解决。
  • 表或字段不存在:查询语句中引用了不存在的表或字段。可以通过检查表结构、字段名拼写等来解决。
  • 数据类型不匹配:查询语句中使用了不匹配的数据类型,例如将字符串类型的值插入到整数类型的字段中。可以通过检查数据类型定义、数据转换等来解决。
  • 权限不足:执行查询的用户没有足够的权限访问相关的表或数据库。可以通过检查用户权限、授权相关的操作来解决。
  • 对于这种常规错误,可以通过以下步骤来解决:
  • 仔细检查SQL查询语句,确保语法正确,并且引用的表、字段存在且拼写正确。
  • 检查数据库连接配置,确保数据库服务器可访问,并且连接参数正确。
  • 检查数据库表结构和字段定义,确保查询语句中引用的表、字段存在且数据类型匹配。
  • 检查用户权限,确保执行查询的用户具有足够的权限。
  • 如果以上步骤都没有解决问题,可以尝试以下方法:
  • 查看数据库系统的错误日志,获取更详细的错误信息。
  • 联络云平台的工程师 (仅针对云数据库)

在云计算领域,云平台提供了一系列的数据库产品,例如云数据库MySQL、云数据库SQL Server等,可以根据具体需求选择适合的产品。

  • 参考文献

1 问题 : 【登录/鉴权 1045(28000)】Access denied for user 'root'@'localhost' (using password: YES)

问题分析:针对【Access denied for user 'root'@'localhost' (using password: YES)】的可能原因汇总

  • Access denied 拒绝访问
  • using password: YES : (是否)使用密码(登录)? 是
  • 可能原因1: 用户名和密码不匹配 (乃至可能, 数据库连接的配置信息存在空格、多打或少打了字符)
Access denied for user `root`@`12.34.46.xx` (using password: YES)

  • 可能原因2: 用户的权限不足

用户授权 详见 : [数据库] MySQL之数据库管理篇 - 博客园/千千寰宇
GRANT ALL PRIVILEGES ON databaseName.* TO userName@host IDENTIFIED BY password;

  • 可能原因3: 数据库与应用程序的数据传输过程中产生的【编码 不匹配】问题

可尝试在数据库连接的Url后 添加 useUnicode=true&characterEncoding=UTF-8

  • 可能原因4:访问控制与身份验证的插件不支持密码登录(auth_socket[不支持密码]、mysql_native_password[支持密码]) (多出现于刚安装完MYSQL后,登录时)

详情参见:本文档《ERROR 1698 (28000):Access denied for user 'root'@'localhost'" error - 博客园/千千寰宇

参考文献

2 问题 : 【授权 1410(42000)】ERROR 1410 (42000): You are not allowed to create a user with GRANT

  • 原因:
    • MySQL8.0的重大改版,导致 【创建用户】与【授权】分开执行 ( 即 必须先创建用户,才能后续授权)
  • 解决办法
USE mysql; ## 使用mysql数据库
UPDATE user SET host='%' WHERE user='userName'; # 修改指定用户的host范围
FLUSH PRIVILEGES; # 刷新权限表
GRANT ALL PRIVILEGES ON dataBaseName.* to userName@host; # 授权
FLUSH PRIVILEGES; # 刷新权限表

3 问题 : 【登陆/鉴权 1698(28000)】ERROR 1698 (28000):Access denied for user 'root'@'localhost'" error

参考文献

问题描述

刚通过apt-get install安装好MYSQL,准备登录时:

//错误起源:
~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

解决步骤

  1. 停止mysql服务
    ~$ sudo service mysql stop
  1. 以安全模式启动MySQL
    ~$ sudo mysqld_safe --skip-grant-tables &
  1. MySQL启动之后就可以不用密码登陆了
    ~$ mysql -u root
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.10 MySQL Community Server (GPL)
  1. 查看一下user表,错误的起因就是在这里, root的plugin被修改成了auth_socket,用密码登陆的plugin应该是mysql_native_password。
    mysql> select user, plugin from mysql.user;
    +-----------+-----------------------+
    | user      | plugin                |
    +-----------+-----------------------+
    | root      | auth_socket           |
    | mysql.sys | mysql_native_password |
    | dev       | mysql_native_password |
    +-----------+-----------------------+
    3 rows in set (0.01 sec)
  1. 关于auth_socket,在官方有说明: https://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/socket-authentication-plugin.html ,反正现在暂时不用它, 那就把这里改了。
    mysql> update mysql.user set authentication_string=PASSWORD('newPwd'), plugin='mysql_native_password' where user='root';#最关键一步骤
    Query OK, 1 row affected, 1 warning (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 1

    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

  1. 重启服务,问题就解决了
    ~$ sudo service mysql stop
    ...
     * MySQL Community Server 5.7.10 is stopped
    ~$ sudo service mysql start
    ..
     * MySQL Community Server 5.7.10 is started
    ~$ mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.10 MySQL Community Server (GPL)

7.linux云主机端:开启远程连接

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 
    注释掉bind-address           = 127.0.0.1
    sudo service mysql restart

4 问题 : 【登陆/鉴权 2059】Unable to load authentication plugin 'caching_sha2_password”

  • 原因
    • MySQL数据库8.0以后,改变了身份验证插件为’caching_sha2_password’ 而之前的身份验证方式(default_authentication_plugin)=mysql_native_password
  • 解决方法
    • 方法一 使用老版本的身份验证插件方式 [in MySQL]
      • ALTER USER userName@host IDENTIFIED WITH mysql_native_password BY ‘用户密码’;
    • 方法二 使用8.0以后的MySQL驱动(java的jdbc包) [in POM.xml and driverName]
      • 1 更新 jdbc的驱动程序(8.0+)
      • [2 修改驱动名(原先的旧驱动名也可继续使用)] com.mysql.jdbc.Driver → com.mysql.cj.jdbc.Driver
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>

5 问题 : java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

  • 背景
    • 多出现在使用MySQL 8.0以上版本(MySQL连接驱动和版本都是8.0以上)的时候易出现本错误
  • 解决方法
    • 数据库连接的 Url 中 添加: allowPublicKeyRetrieval=true

6 问题 : Unknown system variable 'query_cache_size'

  • 背景
    • jdbc(mysql-connecter-java)驱动程序的版本太低,导致 数据库驱动程序与数据库版本不适配 (注:查看数据库版本 SELECT VERSION() )
    • MySQL官方: query cache在MySQL5.7.20就已经过时了,而在MySQL8.0之后就已经被移除了。
  • 解决方法
    • 1 更新 jdbc的驱动程序(8.0+)
    • [2 修改驱动名(原先的旧驱动名也可继续使用)] com.mysql.jdbc.Driver → com.mysql.cj.jdbc.Driver
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>

7 问题 : The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

  • 背景
    • 多出现在使用MySQL 8.0以上版本(MySQL连接驱动和版本都是8.0以上)的时候易出现本错误
  • 解决方法
    • 法一 show variables like '%time_zone%'; set global time_zone='+8:00';
    • 法二 数据库连接的Url后面加上 &serverTimezone=GMT%2B8 【未亲测】

8 问题 : Flink(CDC/SQL)Job在启动时,报“ConnectException: Error reading MySQL variables: Access denied for user 'xxxx '@'xxxx' (using password: YES)”(1个空格引发的"乌龙")

问题描述

基本信息

所属环境:CN-PT
问题时间:2023-11-21
所属程序: Flink Job(XXXPT_dimDeviceLogEventRi)

  • 作业类型: Flink SQL Job
  • 数据流 : 业务MySQL ==> Flink Job( Flink Cdc Connector(mysql) + Flink SQL) ==> Bigdata Kafka ==> Bigdata OLAP ==> 业务系统
  • 作业备注: 关键技术---- 利用 Flink Cdc Connector(mysql) 监听业务库表进行实时数据同步业务维度数据至kafka

问题日志

Flink Job(XXXPT_dimDeviceLogEventRi) 运行过程中,出现错误:

…
2023-11-21 15:25:28,263 INFO  org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer [] - Starting FlinkKafkaInternalProducer (1/1) to produce into default topic dim_device_log_event_ri
2023-11-21 15:25:28,266 INFO  org.apache.flink.runtime.io.network.partition.consumer.SingleInputGate [] - Converting recovered input channels (1 channels)
2023-11-21 15:25:28,325 INFO  io.debezium.connector.common.BaseSourceTask                  [] - Stopping down connector
2023-11-21 15:25:28,325 INFO  io.debezium.connector.mysql.MySqlConnectorTask               [] - Stopping MySQL connector task
2023-11-21 15:25:28,326 ERROR com.alibaba.ververica.cdc.debezium.DebeziumSourceFunction    [] - Reporting error:
org.apache.kafka.connect.errors.ConnectException: Error reading MySQL variables: Access denied for user 'root '@'123.45.67.89' (using password: YES)
	at io.debezium.connector.mysql.MySqlJdbcContext.querySystemVariables(MySqlJdbcContext.java:342) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.connector.mysql.MySqlJdbcContext.readMySqlSystemVariables(MySqlJdbcContext.java:321) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.connector.mysql.MySqlTaskContext.<init>(MySqlTaskContext.java:79) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.connector.mysql.MySqlTaskContext.<init>(MySqlTaskContext.java:52) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.connector.mysql.MySqlConnectorTask.createAndStartTaskContext(MySqlConnectorTask.java:350) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.connector.mysql.MySqlConnectorTask.start(MySqlConnectorTask.java:143) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.connector.common.BaseSourceTask.start(BaseSourceTask.java:106) ~[blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.embedded.EmbeddedEngine.run(EmbeddedEngine.java:758) [blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at io.debezium.embedded.ConvertingEngineBuilder$2.run(ConvertingEngineBuilder.java:171) [blob_p-b4fb1883b8b45408debf574a19853181362f64e4-1be92b6c42d0969e1e10ed136b1c5fc9:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_362]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_362]
	at java.lang.Thread.run(Thread.java:750) [?:1.8.0_362]
Caused by: java.sql.SQLException: Access denied for user 'root '@'123.45.67.89' (using password: YES)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[blob_p-
...

问题分析

这是1个 Flink SQL Job:

其仅使用了8(5+3)个外部变量(放在NACOS配置文件中的):

经检查,无误。

那么,咱们来看看启动参数是否有错误:

作业启动参数

启动参数(nacos地址等)均无误。

再看看NACOS的配置:

果然有问题!

再细究日志

再仔细看看日志:赫然发现了这个空格!

问题结论

  1. 本次问题出在 MYSQL数据库用户名中含【空格】;
  2. 针对Flink CDC错误"ConnectException: Error reading MySQL variables: Access denied for user 'root '@'123.45.67.89' (using password: YES)"共有如下情况,做以小结:
| 结论1	| 
数据库链接(HOST/PORT/USER/PASSWORD)【配置错误】,包括可能意想不到的【空格】;

| 结论2	|
当出现 Access denied for user 'xx'@'xxxx' (using password: YES),只且仅有2类原因:
	1)数据库【用户不存在】、或【密码错误】;
	    注:用户不存在,自然也包括了上面说的配置错误(比如空格)的情况;
	2)【无操作权限】;
	    注1:通过 show grants for {user}@'{host}' 查看用户的权限授予情况;
	    注2:在使用 grant 授权用户后,应使用 flush privileges 刷新权限;否则,有最新权限尚未生效的小概率事件发生。

解决方法

  • 本问题:去除 root 用户后面的空格符!
  • 本错误的全部情况,参见:2.X 章节 问题结论

X 推荐与参考文献

[1] Custom Payload in Debezium - copyprogramming.com 【推荐】
[2] Multiple debezium connector for same MySql database not working - stackoom
[3] 大数据-业务数据采集-FlinkCDC DebeziumSourceFunction via the 'serverTimezone' configuration property - 51CTO
[4] 报错:Access denied for user 'xxx'@'localhost' - segementfault
[5] [数据库] MYSQL之授予/查验binlog权限 - 博客园/千千寰宇 【推荐】
[6] 一文看尽MySQL用户权限管理,真香 - Zhihu 【推荐】

9 问题 :"[Err] 1071 - Specified key was too long; max key length is 767 bytes"(设置Unique索引时报错)

问题首发于:[数据库] MYSQL问题之解决缺陷设置Unique索引时报错:"[Err] 1071 - Specified key was too long; max key length is 767 bytes" - 博客园/千千寰宇 | 2020-09-21 18:50 【现已删除原文,归档于此处】

问题复现

  • 原表结构:
CREATE TABLE `XX_TEMPERATURE` (
	`FLOW_ID` int(11) NOT NULL COMMENT '独立的数据表或FTP唯一标识', -- 与上述其它表的字段完全无关联,属自创ID
	`TABLE_FLOW_ID` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '表,元数据uniqueID',  -- 本次博客的重点
  		-- MYSQL_127.0.0.1_3306_root_CJ_TESTDBDatabase^CJ_TEST|DBTable^Person
	`TEMPERATURE_VALUE` int(11) NOT NULL COMMENT '(表级)热度值',  -- 应保证其值实时更新 
	PRIMARY KEY (`FLOW_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='热度值表';
  • 现需求

对 TABLE_FLOW_ID 新增 Unique 索引

  • 正常做法:
ALTER TABLE `XX_TEMPERATURE` ADD CONSTRAINT UNIQUE_INDEX_FOR_TABLE_FLOW_ID_OF_TEMPERATURE_TABLE UNIQUE(`TABLE_FLOW_ID`);

然鹅,出现了如下错误:

[SQL]ALTER TABLE `XX_TEMPERATURE` ADD CONSTRAINT UNIQUE_INDEX_FOR_TABLE_FLOW_ID UNIQUE(`TABLE_FLOW_ID`);
[Err] 1071 - Specified key was too long; max key length is 767 bytes

解决方案

本质上,就是 VARCHAR(512) 512>256了,导致的失败。(更深层原因待深究)

方案1: 缩短Unique索引字段的长度

ALTER TABLE `XX_TEMPERATURE` MODIFY `TABLE_FLOW_ID` VARCHAR(255);

方案2: [配置] 系统变量 innodb_large_prefix / 系统变量 innodb_file_format / 表配置项 ROW_FORMAT

要解决 [Err] 1071 - Specified key was too long; max key length is 767 bytes这一缺陷,必须满足如下3个条件:

系统变量 innodb_large_prefix = ON
系统变量 innodb_file_format = Barracuda
表配置项 ROW_FORMAT = DYNAMIC / COMPRESSED
  • step1 配置 系统变量 innodb_large_prefix
set global innodb_large_prefix=on;

相关知识延伸

 -- 系统变量 innodb_large_prefix : 不同版本,开闭情况不同 (MySQL 5.6.41和5.6.33 默认关闭 ; MySQL 5.7 默认开启)
 ---- 如果启用了系统变量innodb_large_prefix,则:对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。
 ---- 如果禁用innodb_large_prefix,则:对于任何行格式的表,索引键前缀限制为767字节。
 -- 查看 innodb_large_prefix
 show variables like '%innodb_large_prefix%';
 -- 设置 innodb_large_prefix -- on / off
 set global innodb_large_prefix=off; -- off
  • step2 配置 系统变量 innodb_file_format
set global innodb_file_format=Barracuda; 

相关知识延伸

 -- 查看
 show variables like '%innodb_file_format%';-- innodb_file_format = Antelope / innodb_file_format_check = ON / innodb_file_format_max = Barracuda
 -- 设置 
 set global innodb_file_format=Antelope; 
  • step3 配置 表配置项 ROW_FORMAT
ALTER TABLE XX_TEMPERATUREROW_FORMAT = DYNAMIC; 

相关知识延伸

 -- 备注 
 ---- https://www.cnblogs.com/wilburxu/p/9435818.html
 ---- 只有在MYSAM 的数据库引擎才支持属性: FIXED
 ---- fixed--->dynamic: 这会导致CHAR变成VARCHAR
 ---- dynamic--->fixed: 这会导致VARCHAR变成CHAR
 -- 查看
 SHOW TABLE STATUS LIKE "%XX_TEMPERATURE%"; -- ROW_FORMAT 字段 : Compact [ DEFAULT / Compact / FIXED / DYNAMIC / COMPRESSED / ... ]
 -- 设置
 ALTER TABLE XX_TEMPERATUREROW_FORMAT = Compact; 

X 参考资料

10 问题 : JDBC报"MySQLNonTransientConnectionException: Could not create connection to database server."

原发于 [[数据库] MySQL问题之解决:MySQLNonTransientConnectionException: Could not create connection to database server. - 博客园/千千寰宇 | 2020-09-29 14:37] (https://www.cnblogs.com/johnnyzen/p/13749509.html)
现原文已被删除,并归档至此。

场景复现

mysql数据库 5.7.24

jdbc driver: mysql-connector-java: 5.1.33

jdbc 配置: 
+ jdbc.url
+ driverName: 

Tomcat报错:
MySQLNonTransientConnectionException: Could not create connection to database server.

解决方法

jdbc driver: mysql-connector-java.jar 从5.1升级到8.0

jdbc 配置:
+ jdbc.url: &useSSL=false
+ driverName: com.mysql.cj.jdbc.Driver

遗留问题:

  • mysql负载高,如何分析和解决?

X 参考文献

11 问题 : Data truncation: Truncated incorrect DOUBLE value: 'dc5' (删除数据时)

原文发布于: [数据库] MYSQL问题之解决异常:Data truncation: Truncated incorrect DOUBLE value: 'dc5' - 博客园/千千寰宇 | 2020-10-14 20:28
【原文已被删除,主题系列问题,统一归档至此】

场景复现

  • MySQL: 5.7.24-27
  • 表结构
    (两张独立的表)
[表 RRR1]
CREATE TABLE `RRR1` (
  `R1` float NOT NULL COMMENT 'R1',
  `R2` float NOT NULL COMMENT 'R2'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='RRR1';

[表 Person11]
CREATE TABLE `Person11` (
  `CSSJY111` varchar(3) DEFAULT NULL COMMENT '测试数据元011',
  `CSSJY107` int(3) DEFAULT NULL COMMENT '测试数据元007',
  `CSSJY106` int(3) DEFAULT NULL COMMENT '测试数据元006',
  `CSSJY112` datetime DEFAULT NULL COMMENT '测试数据元012',
  `CSSJY103` varchar(10) DEFAULT NULL COMMENT '测试数据元003',
  `CSSJY113` blob COMMENT '测试数据元013',
  `CSSJY104` varchar(10) DEFAULT NULL COMMENT '测试数据元004',
  `CSSJY108` varchar(10) DEFAULT NULL COMMENT '测试数据元008',
  `CSSJY102` varchar(10) DEFAULT NULL COMMENT '测试数据元002',
  `CSSJY109` varchar(10) DEFAULT NULL COMMENT '测试数据元009',
  `CSSJY101` varchar(10) DEFAULT NULL COMMENT '测试数据元101',
  `CSSJY110` date DEFAULT NULL COMMENT '测试数据元010',
  `CSSJY105` int(3) DEFAULT NULL COMMENT '测试数据元005'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='个人信息';
  • 异常SQL
DELETE FROM 
	CJ_TEST.`RRR1` 
		WHERE `R1` IN (  
			SELECT * FROM ( 
				SELECT `R1` FROM CJ_TEST.`RRR1` WHERE `R1` IN ( 
					SELECT `CSSJY111` FROM ( 
						SELECT `CSSJY111` FROM `CJ_TEST`.`Person11` ORDER BY `CSSJY112` ASC, `CSSJY111` LIMIT 3
					) ttt -- 中间表 ttt
				)
			) B WHERE B.R1 = 1 -- 中间表 B 
		)

报异常:

[Err] 1292 - Truncated incorrect DOUBLE value: 'dc5'

翻译: [错误] 1292 - 数据截断:截断不正确的双精度值:'dc5'

注: MySQL数据库 必须带中间表 ttt 和 B,否则 查询会失败

MySQL数据库中 带中间表 可避免异常:[Err] 1093 - You can't specify target table 'tableName' for update in FROM clause

FROM clause : FROM 子句

(翻译: 你不能在DELETE/UPDATE这类修改操作的FROM子句中指定目标表——tableName。)
"不能先select出同一表中的某些值,再update这个表(在同一语句中)"
"不能在同一表中查询的数据作为同一表的更新数据"
"注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。" (博主尚未验证此结论)

原因: DELETE/UPDATE (修改)操作 表tableName时,其FROM子句的实际操作表是 FROM子句内的虚表(结果集)

解决办法: 
1. 在select外边套一层括号"( 原SQL )",让数据库认为你不是查同一表的数据作为同一表的更新数据
2. 将select的结果集临时设置为中间表——`select * from ( 原select的结果集 ) TMP`,让修改操作的FROM对象为中间表

详见:MySQL之You can't specify target table for update in FROM clause解决办法 - CSDN

原因分析

源字段与目标字段的类型不一致!!!

异常SQL中:
  源字段为    Person11表的CSSJY111字段(varchar(3))
  目标字段为  RRR1表的R1字段(float)

解决方案

情况1: 源字段值A与目标字段值B的类型不一致

  • 解决方案1

修改数据库表的字段类型。

ALTER TABLE RRR1 MODIFY COLUMN R1 VARCHAR(3);
  • 解决方案2

sql_mode

(此方案不太推荐,但迫不得已时亦可使用)

SET SESSION sql_mode = '';

补充/延申: sql_mode的其它操作

select @@GLOBAL.sql_mode; 
select @@SESSION.sql_mode; -- STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

情况2: UPDATE的语法错误

网络博客中很多人更多遇到的是此类情况————语法错误
例如:update table set A = "a" and B = "b" where id = 1 (报错)

  • 解决方案

原SQL语句的 "and" 换成逗号 ","

update table set  A = "a" ,   B=  "b" where  id = 1 (正确)

Y 不足之处与反思

1 追根到底,本质上是什么原因导致的此异常? [√]
—— 此问题已解决 于 2020-10-14 21:14

2 sql_mode的配置起到了什么作用? [待解决]
3 为什么这么做可以成功解决? [√]
—— 此问题已基本解决 于 2020-10-14 21:14

X 参考与推荐文献

12 问题 : 【版本兼容系列(MYSQL5.7与8.x)】解决 Invalid default value for created_at(timestamp)

原文发布于: [MYSQL] MYSQL 8解决 Invalid default value for created_at(timestamp) - 博客园/千千寰宇 | 2024-02-26 14:12
【原文已被删除,主题系列问题,统一归档至此】

问题描述

  • 问题背景

执行 从 MYSQL 5.7 导出,并在 MYSQL 8.0.33 的数据库中执行 DDL 建表语句时,报Invalid default value for 'create_at'

...
  `create_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间/created time',
...

原因分析

  • 表面原因:导出的DDL版本不是 MYSQL8 , timestamp类型的字段DDL中存在 DEFAULT '0000-00-00 00:00:00'

根本原因1:explicit_defaults_for_timestamp

  • explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。
  • 此变量自MySQL 5.6.6 版本引入,分为全局级别和会话级别,可动态更新,默认值为OFF。
  • 在 MYSQL 8.0 之中默认值改为了on
  • explicit_defaults_for_timestamp=OFF,表示使用默认的timestamp默认格式
  • timestamp类型的默认格式是什么样的呢?
1.和其它字段类型不一样,这个字段默认为not null.而且不允许设置default null.
2.第一列timestamp字段,如果不强制指定默认值或on update属性的话,就会默认设为DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP。
3.非第一列timestamp字段,如果不强制指定默认值,DEFAULT ‘0000-00-00 00:00:00’
4.往该列中插入null值,会自动转化为默认值;
  • explicit_defaults_for_timestamp=ON,则关闭timestamp default的特性:
1. 如果没有被显示指定not null,则默认为null; 
2. 默认值也会是null而非CURRENT_TIMESTAMP; 
3. 如果指定了not null属性,inset式不指定该字段的值,且 strict sql_mode(SQL_MODE=STRICT_TRANS_TABLES) 下,会报错。非strict sql_mode下允许插入’0000-00-00 00:00:00’;
  • 解决思路:

执行以下sql语句,重启mysql服务

SHOW GLOBAL VARIABLES LIKE "explicit_defaults_for_timestamp";
SET persist explicit_defaults_for_timestamp=OFF;

-- mysql8.0 新增了持久化修改全局变量,
-- 使用 set persist 和修改配置文件的效果一致,重启之后无需再改一遍了

根本原因2:SQL_MODE = STRICT_TRANS_TABLES

  • explicit_defaults_for_timestamp=ON,则关闭timestamp default的特性:
如果指定了not null属性,inset式不指定该字段的值,且 strict sql_mode(SQL_MODE=STRICT_TRANS_TABLES) 下,会报错。非strict sql_mode下允许插入’0000-00-00 00:00:00’

解决方法

  • 方法1:换用datetime类型

  • 方法2:保持严格约束表的SQL模式,但修改timestamp字段的默认值的策略

修改timestamp字段的DDL定义(不修改timestamp的类型)

...
  -- `create_at` timestamp DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间/created time',
  `create_at` timestamp NULL DEFAULT current_timestamp COMMENT '创建时间/created time', -- current_timestamp  也可换成 NULL
  `create_by` varchar(15) NOT NULL DEFAULT '-1' COMMENT '创建人/creater. default: -1(super administrator)',
  -- `update_at` timestamp DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间/modified time',
  `update_at` timestamp DEFAULT current_timestamp ON UPDATE current_timestamp COMMENT '更新时间/modified time',
  `update_by` varchar(15) NOT NULL DEFAULT '-1' COMMENT '更新人/updater. default: -1(super administrator)',
...
  • 方法2:关闭explicit_defaults_for_timestamp ,取消严格约束表的SQL模式 (未亲测)
  • Step1 设置explicit_defaults_for_timestamp = OFF
SHOW GLOBAL VARIABLES LIKE "explicit_defaults_for_timestamp";
SET persist explicit_defaults_for_timestamp=OFF;

-- mysql 8.0 新增了持久化修改全局变量,
-- 使用 set persist 和修改配置文件的效果一致,重启之后无需再改一遍了
  • Step2 改为非严格约束表的SQL模式(STRICT_TRANS_TABLES)
  • step2.1 在mysql的配置文件my.ini[mysqld]下面添加如下列;
  • step2.2 保存后重启
SHOW GLOBAL VARIABLES LIKE "sql_mode";

-- SET persist sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
SET persist sql_mode="ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

X 参考文献

X 参考文献

  • 查看登录用户:select user(), current_user(); -- 正常响应本应是这样的:bigdata_cdc@172.33.16.120 bigdata_cdc@%
  • 查看用户拥有哪些权限(略)
  • 删除匿名用户: drop user ''@'localhost';
  • 原因:localhost映射到了一个叫'空'的用户名[即mysql.user表中user列为空''的空用户]
  • 解决方法:
  • 方法1:删除空用户 【推荐】
  • 方法2:跳过权限,以无密码的方式进入mysql[skip-grant-tables])

原因:存在用户名为空的账户即匿名账户,实际上是匿名登录的,通过错误提示里的''@'localhost'可以看出来
解决方法:

systemctl stop mysql
ps -a | grep mysql
kil -9 {mysqlPid}

# 在配置文件 [mysqld] 下添加 skip-grant-tables
./bin/mysqld_safe --defaults-file=/home/disk1/work/mysql/my.cnf &

# 登陆mysql,不需要输密码,直接回车
mysql -u root -p 

# 查看所有用户
select host,user,password from user;

delete from user where USER=''; //删除空用户名的用户
FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误
# 此时再执行查看命令可看到空用户已被删除了

修改my.cnf再次重启mysql即可正常登陆

这可能是连接器偏移量错误的问题。因此,我删除了连接器,删除了所有相关的 Kafka 主题(如架构历史记录等),并使用以下指南清理了偏移量 https://debezium.io/documentation/faq/#how_to_remove_commissed_offsets_for_a_connector 这很有帮助!重新创建后 - 连接器现在按预期工作。

ConnectException:与该从服务器具有相同server_uuid/server_id的从服务器已连接到主服务器;第一个事件在4,最后一个事件从'./mysql-bin '读取。152542' at 1380734,从'./mysql-bin '读取的最后一个字节。152542' at 1380734。错误码:1236;SQLSTATE: HY000。
根本原因:当前FlinkCdcJob(作为1个Salve)的 serverId/serverUuid 与另一个已同MySQL Server(作为Master)的MySQL Salve(这个Slave可能是另一个 Flink CdcJob、可能是MYSQL从库、也可能是其他的基于binlog的应用程序————如Cannal)一致。

20XX-04-19 17:33:46,904 INFO  org.apache.flink.runtime.executiongraph.ExecutionGraph       [] - Source: vehicle-log-event-config-data-stream-source (1/1) (f5a85f95c9928b0863707680cfde33bf) switched from RUNNING to FAILED on flink-258500-taskmanager-1-1-68365a8c-9c7b-4545-ba97-2179ae9adf45 @ 172.xx.xx.xx (dataPort=43236).
org.apache.kafka.connect.errors.ConnectException: A slave with the same server_uuid/server_id as this slave has connected to the master; the first event '' at 4, the last event read from './mysql-bin.152542' at 1380734, the last byte read from './mysql-bin.152542' at 1380734. Error code: 1236; SQLSTATE: HY000.
	at io.debezium.connector.mysql.AbstractReader.wrap(AbstractReader.java:241) ~[258500_flink-connector-mysql-cdc-1.3.0.jar:1.3.0]
	at io.debezium.connector.mysql.AbstractReader.failed(AbstractReader.java:207) ~[258500_flink-connector-mysql-cdc-1.3.0.jar:1.3.0]
posted @ 2020-03-30 16:04  千千寰宇  阅读(791)  评论(0编辑  收藏  举报