散列MySQL数据库模式
我想对MySQL数据库模式(没有数据)进行哈希/签名,以便对其进行校验和,以确保其他人不会修改它散列MySQL数据库模式,mysql,checksum,Mysql,Checksum,我想对MySQL数据库模式(没有数据)进行哈希/签名,以便对其进行校验和,以确保其他人不会修改它 我该如何实现它?据我所知,您需要表校验和: checksum table `table` 所以,只要对一个空表进行校验和,我想整个模式(所有表)如何?是的,它包含数据。您需要一份空表的副本。我要做的是mysqldump-d数据库-这将转储整个数据库,然后创建测试数据库,创建所有表(它们将是空的,因为-d标志---无数据),并进行校验和。是的,我不认为有一个简单的方法来做你想做的事。对不起,我不明白
我该如何实现它?据我所知,您需要表校验和:
checksum table `table`
所以,只要对一个空表进行校验和,我想整个模式(所有表)如何?是的,它包含数据。您需要一份空表的副本。我要做的是
mysqldump-d数据库
-这将转储整个数据库,然后创建测试数据库,创建所有表(它们将是空的,因为-d
标志---无数据
),并进行校验和。是的,我不认为有一个简单的方法来做你想做的事。对不起,我不明白这个问题。你想检查是否没有人改变桌子。在这种情况下,我可能会使用showcreatetable'table'
检查所有表,并为所有表设置初始结构进行比较。这对我来说比较简单,然后进行转储,然后使用校验和检查所有表。。。我没有想到:)这种方法还可以,但是mysqldump
包含了关于它的版本和mysql服务器版本的信息。如果您升级/降级mysql服务器或mysql客户端(这将导致mysqldump的升级/降级),您生成的文件的签名将明显不同,尽管模式没有更改。为了避免这种情况,请使用mysqldump的--compact
选项如下:mysqldump--compact-u root--password=root--host=127.0.0.1 test | md5sum
。对不起,如果空表的校验和表“table”
始终为0,那么无论表结构是什么,这个答案怎么正确呢?(MySQL 5.5)谢谢你的回答,你能解释一下你的答案吗?
SELECT HEX( CRC32 ( SUM( CRC32( CONCAT(
COALESCE(TABLE_NAME,''),
COALESCE(COLUMN_NAME,''),
COALESCE(ORDINAL_POSITION,''),
COALESCE(COLUMN_DEFAULT,''),
COALESCE(IS_NULLABLE,''),
COALESCE(DATA_TYPE,''),
COALESCE(CHARACTER_MAXIMUM_LENGTH,''),
COALESCE(CHARACTER_OCTET_LENGTH,''),
COALESCE(NUMERIC_PRECISION,''),
COALESCE(NUMERIC_SCALE,''),
COALESCE(CHARACTER_SET_NAME,''),
COALESCE(COLLATION_NAME,''),
COALESCE(COLLATION_NAME,''),
COALESCE(COLUMN_TYPE,''),
COALESCE(COLUMN_KEY,'')
) ) ) ) ) AS 'hash'
FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'database_name';