在上面的输出中,可以重点关注如下字段信息,说明db转换映射成功
$ MYSQL_PWD=greatsql mysql -ugreatsql -h127.0.0.1 -P3309 -e 'show replica status G'| grep -wE 'Replica_IO_Running|Replica_SQL_Running|Replicate_Rewrite_DB|Channel_Name'Replica_IO_Running: YesReplica_SQL_Running: YesReplicate_Rewrite_DB: (test_rep1,test_rep)Channel_Name: channel_3306Replica_IO_Running: YesReplica_SQL_Running: YesReplicate_Rewrite_DB: (test_rep2,test_rep)Channel_Name: channel_3307Replica_IO_Running: YesReplica_SQL_Running: YesReplicate_Rewrite_DB: (test_rep3,test_rep)Channel_Name: channel_3308在3309实例中,查询replica_skip_errors,确认复制异常跳过的错误码,设置为ddl_exist_errors会自动转换为如下错误码
greatsql> select @@replica_skip_errors;+---------------------------------------------------+| @@replica_skip_errors|+---------------------------------------------------+| 1007,1008,1050,1051,1054,1060,1061,1068,1091,1146 |+---------------------------------------------------+1 row in set (0.00 sec)5.数据同步验证
- 在3309库中,创建database test_rep
- 在3306库中,创建database test_rep1,并且创建tab1表
$ mysql -ugreatsql -h127.0.0.1 -p -P3306 -sgreatsql> create database test_rep1;greatsql> use test_rep1;greatsql> create table tab1(id int primary key auto_increment, cname varchar(10), age int);- 在3307库中,创建database test_rep2,并且创建tab1表
$ mysql -ugreatsql -h127.0.0.1 -p -P3307 -sgreatsql> create database test_rep2;greatsql> use test_rep2;greatsql> create table tab1(id int primary key auto_increment, cname varchar(10), age int);- 在3308库中,创建database test_rep3,并且创建tab1表
$ mysql -ugreatsql -h127.0.0.1 -p -P3308 -sgreatsql> create database test_rep3;greatsql> use test_rep3;greatsql> create table tab1(id int primary key auto_increment, cname varchar(10), age int);- 在3309中确认database及表的同步
$ mysql -ugreatsql -h127.0.0.1 -p -P3309 -sgreatsql> show databases;Databaseinformation_schemamysqlperformance_schemasystest_dbtest_reptest_rep1test_rep2test_rep3greatsql> show tables from test_rep;Tables_in_test_reptab1greatsql> show tables from test_rep1;greatsql> show tables from test_rep2;greatsql> show tables from test_rep3;从上面的信息可以看出 , 在3309中,3306、3307、3308中创建的库均按照原有的名字进行了同步,但是表只同步在了3309映射的库test_rep中 。- 分别在3306、3307、3308中插入一条记录
3306 : insert into test_rep1.tab1 values(1,'a',10);3307 : insert into test_rep2.tab1 values(2,'b',20);3308 : insert into test_rep3.tab1 values(3,'c',30);【MyCat分库分表实时同步到GreatSQL】然后在各自节点查询数据插入情况$ mysql -ugreatsql -h127.0.0.1 -p -P3306 -s test_rep1 -e 'select * from tab1'idcnameage1a10$ mysql -ugreatsql -h127.0.0.1 -p -P3307 -s test_rep2 -e 'select * from tab1'idcnameage2b20$ mysql -ugreatsql -h127.0.0.1 -p -P3308 -s test_rep3 -e 'select * from tab1'idcnameage3c30$ mysql -ugreatsql -h127.0.0.1 -p -P3309 -s test_rep -e 'select * from tab1'idcnameage1a102b203c30$ mysql -ugreatsql -h127.0.0.1 -p -P3309 -s test_rep1 -e 'select * from tab1'ERROR 1146 (42S02) at line 1: Table 'test_rep1.tab1' doesn't exist$ mysql -ugreatsql -h127.0.0.1 -p -P3309 -s test_rep2 -e 'select * from tab1'ERROR 1146 (42S02) at line 1: Table 'test_rep2.tab1' doesn't exist$ mysql -ugreatsql -h127.0.0.1 -p -P3309 -s test_rep3 -e 'select * from tab1'ERROR 1146 (42S02) at line 1: Table 'test_rep3.tab1' doesn't exist从上面的查询情况可以看出,3306、3307、3308节点中只有一条记录,并且记录都被同步到了3309的test_rep.tab1表中,而且在3309的test_rep1、test_rep2、test_rep3中是没有表存在的 。- 分别在3306、3307、3308给表tab创建一个索引
greatsql> alter table tab1 add index idx_cname(cname);