MySQL URL 连接参数设置

MySQL URL 连接可以携带参数,通用配置模板如下:

# 通过URL设置连接参数
spring.datasource.url=jdbc:mysql://localhost:3306/dbname?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&failOverReadOnly=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull

参数说明

以下是部分比较常用的参数。

serverTimezone

设置时区。

MySQL高版本中如果不设置可能会有问题。UTC表示全球标准时间,国内建议使用中国标准时间:

# 上海时间
serverTimezone=Asia/Shanghai

# 北京时间东八区
serverTimezone=GMT%2B8

characterEncoding

设置字符集的编码类型。

characterEncoding=utf-8

useUnicode

是否使用编码集。

useUnicode=true

autoReconnect

当数据库连接中断时,是否自动重新连接?缺省为 false。

autoReconnect=true

关联的两个参数:

  • maxReconnects:当 autoReconnect 设置为 true 时,重试连接的次数,缺省为 3 次。
  • initialTimeout:当 autoReconnect 设置为 true 时,两次重连之间的时间间隔,缺省为 2 秒。

autoReconnectForPools

是否使用针对数据库连接池的重连策略。缺省为 false。

autoReconnectForPools=true

failOverReadOnly

自动重连成功后,连接是否设置为只读?缺省为 true。

当 autoReconnect 设置为 true 时,建议将此参数设置为 false。

failOverReadOnly=false

noAccessToProcedureBodies

JDBC 调用存储过程时需要有 show create procudure 权限或是有表 mysql.proc 的 select 的权限,可以添加该参数。缺省为 false。

noAccessToProcedureBodies=true

这样做会存在一些影响:

  • 调用存储过程时,将没有类型检查,设为字符串类型,并且所有的参数设为 in 类型,但是在调用 registerOutParameter 时,不抛出异常。
  • 存储过程的查询结果无法使用 getXXX(String parameterName) 的形式获取,只能通过 getXXX(int parameterIndex) 的方式获取。

更好的方式是:给 MySQL 普通用户授予相应的权限。

grant select on mysql.proc to 'user'@%;

useSSL

MySQL高版本支持是否使用 useSSL,缺省为 true。

useSSL=true

allowMultiQueries

缺省为 false。

  1. 可以在 SQL 语句后携带分号,实现多语句执行。
  2. 可以执行批处理,同时发出多个 SQL 语句。
allowMultiQueries=true

zeroDateTimeBehavior

datetime 字段的值全部为 0 时的处理方式。

zeroDateTimeBehavior=convertToNull
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Flink中更新MySQL参数设置主要包括以下几个方面: 1. JDBC连接参数设置:通过设置JDBC连接参数,可以控制Flink任务与MySQL数据库连接方式、连接池大小、连接超时时间等。常见的JDBC连接参数包括url、driverClassName、username、password、maxTotal、maxIdle、maxWaitMillis等。 2. 批量提交参数设置:在向MySQL数据库中批量提交数据时,可以通过设置batchSize和batchInterval参数来控制每次提交的数据量和提交的时间间隔,从而平衡任务性能和数据一致性。 3. 事务参数设置:在更新MySQL数据库时,建议使用事务来保证数据的一致性和完整性。可以通过设置autoCommit、transactionIsolation等参数来控制事务的行为。 4. 数据库连接参数设置:在使用连接连接MySQL数据库时,需要设置连接池的相关参数,如maxActive、maxIdle等,以控制连接池的大小和空闲连接的回收策略。 下面是一个示例代码片段,演示了如何在Flink中更新MySQL参数设置: ```java public class FlinkUpdateMysqlDemo { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 设置JDBC连接参数 Properties props = new Properties(); props.setProperty("url", "jdbc:mysql://localhost:3306/test"); props.setProperty("username", "root"); props.setProperty("password", "123456"); props.setProperty("maxTotal", "10"); props.setProperty("maxIdle", "5"); props.setProperty("maxWaitMillis", "10000"); // 设置批量提交参数 JdbcOutputFormat.Builder builder = JdbcOutputFormat.buildJdbcOutputFormat() .setDBUrl(props.getProperty("url")) .setDrivername("com.mysql.jdbc.Driver") .setUsername(props.getProperty("username")) .setPassword(props.getProperty("password")) .setBatchInterval(5000) .setBatchSize(100); // 设置事务参数 builder.setBatchFlushOnCheckpoint(true) .setAutoCommit(false) .setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); // 设置连接参数 BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl(props.getProperty("url")); dataSource.setUsername(props.getProperty("username")); dataSource.setPassword(props.getProperty("password")); dataSource.setMaxTotal(Integer.parseInt(props.getProperty("maxTotal"))); dataSource.setMaxIdle(Integer.parseInt(props.getProperty("maxIdle"))); dataSource.setMaxWaitMillis(Long.parseLong(props.getProperty("maxWaitMillis"))); builder.setDataSource(dataSource); // 读取数据流并更新MySQL DataStream<Tuple2<String, Integer>> input = env.fromElements(Tuple2.of("A", 1), Tuple2.of("B", 2), Tuple2.of("C", 3)); input.addSink(JdbcOutputFormat.buildJdbcOutputFormat() .setDBUrl(props.getProperty("url")) .setDrivername("com.mysql.jdbc.Driver") .setUsername(props.getProperty("username")) .setPassword(props.getProperty("password")) .setQuery("INSERT INTO test.table1 (col1, col2) VALUES (?, ?) ON DUPLICATE KEY UPDATE col2 = VALUES(col2)") .setBatchSize(100) .finish()); env.execute("FlinkUpdateMysqlDemo"); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值