@@ -37,6 +37,26 @@ def create_mysql(mysql_version: str) -> MySql:
3737 return MySql (version = mysql_version )
3838
3939
40+ def create_mysql_pre_8_0_1 (version : str = "5.7.44" ) -> MySql :
41+ """
42+ Create a MySQL instance for a version older than 8.0.1.
43+ The --binlog-row-metadata flag did not exist before 8.0.1, so it must be
44+ omitted from the server args.
45+ """
46+ return MySql (
47+ version = version ,
48+ additional_args = [
49+ "--log-bin=mysql-bin" ,
50+ "--gtid_mode=ON" ,
51+ "--enforce_gtid_consistency=ON" ,
52+ "--binlog-format=row" ,
53+ "--binlog-row-image=full" ,
54+ "--server-id=1" ,
55+ "--max-connections=500" ,
56+ ],
57+ )
58+
59+
4060def create_mysql_replica (mysql_version : str ) -> MySql :
4161 return MySql (
4262 name = "mysql-replica" ,
@@ -368,3 +388,19 @@ def workflow_source_timeouts(c: Composition, parser: WorkflowArgumentParser) ->
368388 f"--var=mysql-root-password={ MySql .DEFAULT_ROOT_PASSWORD } " ,
369389 "proxied/*.td" ,
370390 )
391+
392+
393+ def workflow_mysql_version_compat (
394+ c : Composition , _parser : WorkflowArgumentParser
395+ ) -> None :
396+ """
397+ Validates that CREATE TABLE FROM SOURCE fails when connected to a MySQL
398+ server older than version 8.0.1, which does not support the
399+ binlog_row_metadata system variable required for full row metadata.
400+ """
401+ with c .override (create_mysql_pre_8_0_1 ()):
402+ c .up ("materialized" , "mysql" )
403+ c .run_testdrive_files (
404+ f"--var=mysql-root-password={ MySql .DEFAULT_ROOT_PASSWORD } " ,
405+ "mysql-version-compat/version-check.td" ,
406+ )
0 commit comments