當(dāng)DBA換工作到新環(huán)境時(shí),肯定需要大概了解下各臺(tái)機(jī)器有什么庫表,如下sql就能打印這臺(tái)機(jī)器上所有非系統(tǒng)自帶的庫名和表名:
select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_SCHEMA not in ('mysql','information_schema','performance_schema');
但有這樣一種情況--機(jī)器因?yàn)榉謳旆直黼m然有幾十個(gè)庫和成百上千的表,但大部分庫表類型其實(shí)是相同的,如下所示:
+--------------+-------------------+
| db_a01 | tab_c01 |
| db_a02 | tab_c02 |
............
............
| db_b10 | tab_d09 |
| db_b10 | tab_d10 |
+--------------+-------------------+
上訴表格雖然有20個(gè)庫(db_a01db_a10宣鄙、db_b01db_b10)色建、每個(gè)庫有20個(gè)表(tab_c01tab_c10、tab_d01tab_d10),一共400張表,直接這么看很眼花,但其實(shí)只有兩類數(shù)據(jù)庫--db_a和db_b,兩類表--tab_c和tab_d;使用pt-find找出機(jī)器上所有庫表然后通過q做合并就能簡化顯示結(jié)果:
pt-find -h IP -u USER -p PASSWORD --noquote --dbregex "[^(mysql\. | performance_schema\. | information_schema\.)]" | q -d '.' "select distinct(rtrim(c1,'0|1|2|3|4|5|6|7|8|9') || '.' || rtrim(c2,'0|1|2|3|4|5|6|7|8|9')) from -"
最終400個(gè)表簡化成4種類型的庫.表:
+--------------+-------------------+
| db_a.tab_c |
| db_a.tab_d |
| db_b.tab_c |
| db_b.tab_d |
+--------------+-------------------+
因?yàn)閝基于SQLite,不像MariaDB支持REGEXP_REPLACE()函數(shù)用正則匹配數(shù)字,否則上述命令能更簡潔~