Hum*_*get 7 mysql schema mysqldump backup
我正在尝试比较两个 MySQL 转储文件。一个是通过全新安装的 Web 应用程序制作的,另一个是来自同一 Web 应用程序的转储,该应用程序已从先前版本升级到与全新安装相同的版本号。
基本上我想确保升级脚本正常工作,并且所有正确的列和约束都在升级版本中,就像它们在全新安装中一样。我认为一个简单的 diff/sdiff 就足够了,但我遇到了问题:列顺序。
全新安装和升级之间的列顺序不同,导致许多误报“差异”。在查看输出时很容易看出同一列只是在不同的位置,但是对于数百个表,检查和识别这些误报需要很长时间。
是否有更好的方法来比较这两个将忽略列顺序的转储(或强制转储具有按字母顺序或类似顺序排列的列的方法)或一种更好的完全不同的方法。无可否认,我对 MySQL 还是很陌生,并且正在学习,所以任何帮助都将不胜感激。
谢谢。
不幸的是,您不能强制 mysqldump 中的列排序。但是,您可以使用该表INFORMATION_SCHEMA.COLUMNS。您将需要以下内容:
考虑到此设置,您需要执行以下操作:
这是查询:
SELECT CONCAT(table_schema,'.',table_name),
GROUP_CONCAT(column_name ORDER BY column_name)
FROM information_schema.columns WHERE table_schema NOT IN
('information_schema','performance_schema')
GROUP BY table_schema,table_name;
Run Code Online (Sandbox Code Playgroud)
这将为您提供每个表,后跟按字母顺序排序的列的 CSV 列表
IPADDR_OLD=10.1.20.30
IPADDR_NEW=10.1.20.40
SQLSTMT="SELECT CONCAT(table_schema,'.',table_name),"
SQLSTMT="${SQLSTMT} GROUP_CONCAT(column_name ORDER BY column_name)"
SQLSTMT="${SQLSTMT} FROM information_schema.columns WHERE table_schema NOT IN"
SQLSTMT="${SQLSTMT} ('information_schema','performance_schema')"
SQLSTMT="${SQLSTMT} GROUP BY table_schema,table_name"
mysql -u... -p... -h${IPADDR_OLD} -ANe"${SQLSTMT}" > column_listing1.txt
mysql -u... -p... -h${IPADDR_NEW} -ANe"${SQLSTMT}" >> column_listing2.txt
cat column_listing1.txt > column_listing.txt
cat column_listing2.txt >> column_listing.txt
Run Code Online (Sandbox Code Playgroud)
运行列查询并收集结果column_listing.txt
sort -u < column_listing.txt > column_listing.unq
UNQ_LINES=`wc -l < column_listing.unq`
TXT_LINES=`wc -l < column_listing.txt`
(( DIF_LINES = (UNQ_LINES + UNQ_LINES - TXT_LINES) / 2))
echo ${DIF_LINES}
Run Code Online (Sandbox Code Playgroud)
如果一切都相同,DIF_LINES则应为 0。否则,存在重复项。
diff column_listing1.txt column_listing2.txt
Run Code Online (Sandbox Code Playgroud)
试一试 !!!
您还可以检查其他元数据表,例如
mysql> desc TABLE_CONSTRAINTS;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| CONSTRAINT_CATALOG | varchar(512) | NO | | | |
| CONSTRAINT_SCHEMA | varchar(64) | NO | | | |
| CONSTRAINT_NAME | varchar(64) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| CONSTRAINT_TYPE | varchar(64) | NO | | | |
+--------------------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
mysql> desc STATISTICS;
+---------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| NON_UNIQUE | bigint(1) | NO | | 0 | |
| INDEX_SCHEMA | varchar(64) | NO | | | |
| INDEX_NAME | varchar(64) | NO | | | |
| SEQ_IN_INDEX | bigint(2) | NO | | 0 | |
| COLUMN_NAME | varchar(64) | NO | | | |
| COLLATION | varchar(1) | YES | | NULL | |
| CARDINALITY | bigint(21) | YES | | NULL | |
| SUB_PART | bigint(3) | YES | | NULL | |
| PACKED | varchar(10) | YES | | NULL | |
| NULLABLE | varchar(3) | NO | | | |
| INDEX_TYPE | varchar(16) | NO | | | |
| COMMENT | varchar(16) | YES | | NULL | |
| INDEX_COMMENT | varchar(1024) | NO | | | |
+---------------+---------------+------+-----+---------+-------+
16 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
mysql> desc REFERENTIAL_CONSTRAINTS;
+---------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+--------------+------+-----+---------+-------+
| CONSTRAINT_CATALOG | varchar(512) | NO | | | |
| CONSTRAINT_SCHEMA | varchar(64) | NO | | | |
| CONSTRAINT_NAME | varchar(64) | NO | | | |
| UNIQUE_CONSTRAINT_CATALOG | varchar(512) | NO | | | |
| UNIQUE_CONSTRAINT_SCHEMA | varchar(64) | NO | | | |
| UNIQUE_CONSTRAINT_NAME | varchar(64) | YES | | NULL | |
| MATCH_OPTION | varchar(64) | NO | | | |
| UPDATE_RULE | varchar(64) | NO | | | |
| DELETE_RULE | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| REFERENCED_TABLE_NAME | varchar(64) | NO | | | |
+---------------------------+--------------+------+-----+---------+-------+
11 rows in set (0.01 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
设置执行相同样式比较的查询
| 归档时间: |
|
| 查看次数: |
5191 次 |
| 最近记录: |