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! >>>>>>"