github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/sql_mode/run.sh (about) 1 #!/bin/bash 2 3 set -eu 4 5 cur=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) 6 source $cur/../_utils/test_prepare 7 WORK_DIR=$TEST_DIR/$TEST_NAME 8 9 function run() { 10 11 run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml 12 check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT 13 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 14 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 15 run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml 16 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT 17 18 # operate mysql config to worker 19 cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml 20 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml 21 dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1 22 cp $cur/conf/source2.yaml $WORK_DIR/source2.yaml 23 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker2/relay_log" $WORK_DIR/source2.yaml 24 dmctl_operate_source create $WORK_DIR/source2.yaml $SOURCE_ID2 25 26 # init full data in different timezone and sql mode 27 run_sql_source1 "SET @@GLOBAL.SQL_MODE='PIPES_AS_CONCAT,IGNORE_SPACE,ONLY_FULL_GROUP_BY,NO_UNSIGNED_SUBTRACTION,NO_DIR_IN_CREATE,NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,HIGH_NOT_PRECEDENCE,NO_ENGINE_SUBSTITUTION,REAL_AS_FLOAT'" 28 run_sql_source2 "SET @@GLOBAL.SQL_MODE=''" 29 30 run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 31 run_sql_file $cur/data/db2.prepare.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 32 33 # start DM task only 34 dmctl_start_task $cur/conf/dm-task.yaml 35 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 36 37 # change timezone and incr data 38 run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 39 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 40 run_sql_file $cur/data/db2.increment.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 41 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 42 43 run_sql_file $cur/data/timezone.Asia-Shanghai.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 44 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 45 run_sql_file $cur/data/timezone.America-Phoenix.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 46 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 47 48 run_sql_source2 "SET @@GLOBAL.SQL_MODE='NO_BACKSLASH_ESCAPES'" 49 run_sql_source2 'create table sql_mode.t0(id bigint primary key, a text,b text as ((regexp_replace(a, "^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$","aaaaa"))), c text as ((regexp_substr(a, "^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$"))), d text as ((regexp_like(a, "^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$"))), e text as ((regexp_instr(a, "^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$"))));' 50 run_sql_tidb_with_retry "show create table sql_mode.t0" $'CREATE TABLE `t0` ( 51 `id` bigint(20) NOT NULL, 52 `a` text DEFAULT NULL, 53 `b` text GENERATED ALWAYS AS ((regexp_replace(`a`, _utf8mb4\'^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\\\.[x|X][m|M][l|L]$\', _utf8mb4\'aaaaa\'))) VIRTUAL, 54 `c` text GENERATED ALWAYS AS ((regexp_substr(`a`, _utf8mb4\'^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\\\.[x|X][m|M][l|L]$\'))) VIRTUAL, 55 `d` text GENERATED ALWAYS AS ((regexp_like(`a`, _utf8mb4\'^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\\\.[x|X][m|M][l|L]$\'))) VIRTUAL, 56 `e` text GENERATED ALWAYS AS ((regexp_instr(`a`, _utf8mb4\'^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\\\.[x|X][m|M][l|L]$\'))) VIRTUAL, 57 PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */ 58 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin' 59 } 60 61 cleanup_data $TEST_NAME 62 # also cleanup dm processes in case of last run failed 63 cleanup_process 64 run 65 cleanup_process 66 67 echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"