|
-- ===============================================================
-- 检查2个不同ip数据库服务器上同一库的表结构的是否一致
-- ===============================================================
1 先将A库中的information_schema.COLUMNS表录入临时表里面,create table test.COLUMNS select * from
information_schema.COLUMNS;
2, 然后通过mysqldump当下test.COLUMNS表到本地B库中。
3,写如下sql进行比较,table_schema='fdp'为库名字段,比较fdp库的结构,不一致的列会查询出来,然后自己单独去查看。
select table_schema, table_name, column_name, ORDINAL_POSITION, COLUMN_DEFAULT,IS_NULLABLE,
data_type,CHARACTER_MAXIMUM_LENGTH,CHARACTER_OCTET_LENGTH,
NUMERIC_PRECISION,NUMERIC_SCALE,CHARACTER_SET_NAME,COLLATION_NAME,COLUMN_TYPE from information_schema.COLUMNS
c1
where table_schema='fdp'
and not exists
(
select table_schema, table_name, column_name, ORDINAL_POSITION, COLUMN_DEFAULT,IS_NULLABLE,
data_type,CHARACTER_MAXIMUM_LENGTH,CHARACTER_OCTET_LENGTH,
NUMERIC_PRECISION,NUMERIC_SCALE,CHARACTER_SET_NAME,COLLATION_NAME,COLUMN_TYPE
from test.COLUMNS c2
where table_schema='fdp'
and c1.TABLE_CATALOG=c2.TABLE_CATALOG
and c1.TABLE_SCHEMA=c2.TABLE_SCHEMA
and c1.TABLE_NAME=c2.TABLE_NAME
and c1.COLUMN_NAME=c2.COLUMN_NAME
and ifnull(c1.ORDINAL_POSITION,'')=ifnull(c2.ORDINAL_POSITION,'')
and ifnull(c1.COLUMN_DEFAULT,'')=ifnull(c2.COLUMN_DEFAULT,'')
and ifnull(c1.IS_NULLABLE,'')=ifnull(c2.IS_NULLABLE,'')
and ifnull(c1.DATA_TYPE,'')=ifnull(c2.DATA_TYPE,'')
and ifnull(c1.CHARACTER_MAXIMUM_LENGTH,'')=ifnull(c2.CHARACTER_MAXIMUM_LENGTH,'')
and ifnull(c1.CHARACTER_OCTET_LENGTH,'')=ifnull(c2.CHARACTER_OCTET_LENGTH,'')
and ifnull(c1.NUMERIC_PRECISION,'')=ifnull(c2.NUMERIC_PRECISION,'')
and ifnull(c1.NUMERIC_SCALE,'')=ifnull(c2.NUMERIC_SCALE,'')
and ifnull(c1.CHARACTER_SET_NAME,'')=ifnull(c2.CHARACTER_SET_NAME,'')
and ifnull(c1.COLLATION_NAME,'')=ifnull(c2.COLLATION_NAME,'')
and ifnull(c1.COLUMN_TYPE,'')=ifnull(c2.COLUMN_TYPE,'')
) limit 100000;
4,写如下sql比较2个库web_cdp的视图
-- 视图 check VIEW web_cdp
select table_schema, table_name, column_name, ORDINAL_POSITION, COLUMN_DEFAULT,IS_NULLABLE,
data_type,CHARACTER_MAXIMUM_LENGTH,CHARACTER_OCTET_LENGTH,
NUMERIC_PRECISION,NUMERIC_SCALE,CHARACTER_SET_NAME,COLLATION_NAME,COLUMN_TYPE from information_schema.COLUMNS
c1
where table_schema='web_cdp'
and not exists
(
select table_schema, table_name, column_name, ORDINAL_POSITION, COLUMN_DEFAULT,IS_NULLABLE,
data_type,CHARACTER_MAXIMUM_LENGTH,CHARACTER_OCTET_LENGTH,
NUMERIC_PRECISION,NUMERIC_SCALE,CHARACTER_SET_NAME,COLLATION_NAME,COLUMN_TYPE
from test.COLUMNS c2
where table_schema='web_cdp'
and c1.TABLE_CATALOG=c2.TABLE_CATALOG
and c1.TABLE_SCHEMA=c2.TABLE_SCHEMA
and c1.TABLE_NAME=c2.TABLE_NAME
and c1.COLUMN_NAME=c2.COLUMN_NAME
and ifnull(c1.ORDINAL_POSITION,'')=ifnull(c2.ORDINAL_POSITION,'')
and ifnull(c1.COLUMN_DEFAULT,'')=ifnull(c2.COLUMN_DEFAULT,'')
and ifnull(c1.IS_NULLABLE,'')=ifnull(c2.IS_NULLABLE,'')
and ifnull(c1.DATA_TYPE,'')=ifnull(c2.DATA_TYPE,'')
and ifnull(c1.CHARACTER_MAXIMUM_LENGTH,'')=ifnull(c2.CHARACTER_MAXIMUM_LENGTH,'')
and ifnull(c1.CHARACTER_OCTET_LENGTH,'')=ifnull(c2.CHARACTER_OCTET_LENGTH,'')
and ifnull(c1.NUMERIC_PRECISION,'')=ifnull(c2.NUMERIC_PRECISION,'')
and ifnull(c1.NUMERIC_SCALE,'')=ifnull(c2.NUMERIC_SCALE,'')
and ifnull(c1.CHARACTER_SET_NAME,'')=ifnull(c2.CHARACTER_SET_NAME,'')
and ifnull(c1.COLLATION_NAME,'')=ifnull(c2.COLLATION_NAME,'')
and ifnull(c1.COLUMN_TYPE,'')=ifnull(c2.COLUMN_TYPE,'')
) limit 100000;
|
|