window 环境测试flink cdc,mysql Time zone 报错

本文详细阐述了MySQL时区配置中出现的报错,包括错误原因和两种常见解决方案:一是通过命令行临时设置,二是永久修改my.ini配置。确保时区支持在Debezium JDBC连接中正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql Time zone 配置

1. 报错详情

2. 解决方案

报错详情

mysql time zone 时区配置报错:

Caused by: java.sql.SQLException: 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.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
	at io.debezium.jdbc.JdbcConnection.lambda$patternBasedFactory$1(JdbcConnection.java:230)
	at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:871)
	at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:866)
	at io.debezium.jdbc.JdbcConnection.connect(JdbcConnection.java:412)
	at io.debezium.connector.mysql.MySqlJdbcContext.querySystemVariables(MySqlJdbcContext.java:328)
	... 11 more

解决方案
  • 方案一在mysql的命令行设置。但是当主机重启之后就会失效。
  set global time_zone = '+8:00';  ##修改mysql全局时区为北京时间,即我们所在的东8区
  set time_zone = '+8:00';  ##修改当前会话时区
  flush privileges;   ##立即生效
  • 方案二
    修改mysql的配置文件my.ini
 default-time_zone = '+8:00'

重启window下面的mysql服务。

net start mysql
### 使用 Flink CDC 实现 MySQLMySQL 的数据同步 为了实现从一个 MySQL 数据库到另一个 MySQL 数据库的数据同步,可以采用类似于其他目标系统的方案,即利用 Flink CDC 来捕捉源端 MySQL 中的变化并传输这些变化至目的端 MySQL。具体过程如下: #### 创建 Flink 应用程序 构建一个新的 Flink 应用项目,在此过程中会涉及到使用 Flink Table API 或者 Flink SQL 去定义源表以及目标表。对于本案例而言,两个表都将对应于不同的 MySQL 实例。 ```sql CREATE TABLE source_table ( id BIGINT, name STRING, age INT, PRIMARY KEY(id) NOT ENFORCED ) WITH ( 'connector' = 'mysql-cdc', 'hostname' = 'source-mysql-hostname', 'port' = '3306', 'username' = 'your-username', 'password' = 'your-password', 'database-name' = 'your-database', 'table-name' = 'your-table' ); ``` 上述代码展示了如何设置来自源 MySQL 表的连接器[^1]。 接着设定目的地 MySQL 表: ```sql CREATE TABLE sink_table ( id BIGINT, name STRING, age INT, PRIMARY KEY(id) NOT ENFORCED ) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:mysql://target-mysql-hostname:3306/your-target-db?useSSL=false&serverTimezone=UTC', 'table-name' = 'your-target-table', 'driver' = 'com.mysql.cj.jdbc.Driver', 'username' = 'your-username', 'password' = 'your-password' ); ``` 这里指定了通往目标 MySQL 数据库的 JDBC 连接参数,并特别注意到了时区配置以避免潜在的时间戳解析错误[^3]。 #### 配置 MySQL 服务器 确保两台 MySQL 服务都已经启用了 binlog 功能以便支持变更数据捕获(CDC),这对于源端尤其重要因为这是变更记录产生的地方。此外,还需确认两端都安装有必要的驱动和支持包用于与 Flink 和对方数据库交互。 #### 执行数据流作业 一旦所有的准备工作完成之后就可以启动实际的数据流转移工作了。这一步骤通常涉及编写一段简单的查询语句来指定要复制哪些字段或整个表格的内容。 ```sql INSERT INTO sink_table SELECT * FROM source_table; ``` 这条命令指示 Flink 将 `source_table` 中的所有更新推送到 `sink_table` 中去。 #### 测试和验证 如同任何重要的迁移活动一样,建议先在一个测试环境中进行全面的功能性和性能上的检验再推广到生产环境当中。可以通过向源数据库添加一些新条目或者修改现有条目来看看它们能否被及时准确无误地反映在目标位置上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值