迁移至MySQL 8后Google表格脚本数据库连接失败排查求助
解决MySQL 8迁移后Google表格脚本连接失败的问题
我帮你分析下这个问题,MySQL 5到8的迁移确实会带来几个常见的连接兼容性问题,尤其是和Google Apps Script的JDBC结合时,以下是最可能的原因和解决方法:
MySQL 8默认认证插件不兼容
MySQL 8.0开始默认使用caching_sha2_password认证插件,而Google Apps Script的JDBC驱动目前对这个插件的支持有限。你需要将你的数据库用户改回旧的mysql_native_password认证方式:- 用其他能正常连接的工具登录MySQL服务器
- 执行以下SQL语句(替换你的用户名和主机,
%表示允许从任意地址连接,如果你是固定IP就换成对应IP):ALTER USER 'MY_USER'@'%' IDENTIFIED WITH mysql_native_password BY 'MY_PW'; FLUSH PRIVILEGES;
执行完后再尝试运行脚本,这通常是解决这类问题的关键。
连接字符串参数缺失或转义错误
你当前的连接字符串里用了&,这是HTML的转义字符,但在Google Apps Script的字符串中,应该直接使用&来分隔参数。另外,MySQL 8可能需要额外的参数来允许公钥检索,建议修改连接字符串为:var conn = Jdbc.getConnection('jdbc:mysql://X.X.X.X:3306/DB_NAME?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false', 'MY_USER', 'MY_PW');这里添加了
allowPublicKeyRetrieval=true(允许驱动获取服务器公钥)和useSSL=false(如果你的服务器没有配置SSL的话,避免SSL连接失败),同时修正了参数分隔符。时区配置问题
MySQL 8默认的时区可能和MySQL 5不同,若脚本所在的时区与数据库时区不匹配,也可能导致连接失败。可以在连接字符串中指定时区参数,比如:var conn = Jdbc.getConnection('jdbc:mysql://X.X.X.X:3306/DB_NAME?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC', 'MY_USER', 'MY_PW');把
UTC换成你实际使用的时区,比如Asia/Shanghai。
内容的提问来源于stack exchange,提问作者Carlo Camusso
相关产品推荐
相关产品推荐

