假设你管理着一堆的数据库服务器,数千的数据库对象。需要查找出某个对象,可能只知道某一部分等等,也可能需要检查下是否存在。无论如何,通过搜索所有的数据库对象来匹配某个模式将需要很长的时间。幸运的是,我们可以使用mysqlmetagrep 工具来完成这项任务。
实例
查找包含‘cost’的所有对象。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlmetagrep-practical-application/
shell> mysqlmetagrep --server=root:root@localhost --body --pattern='%cost%' +------------------------+--------------+--------------+----------+-------------+------------------+ | Connection | Object Type | Object Name | Database | Field Type | Matches | +------------------------+--------------+--------------+----------+-------------+------------------+ | root:*@localhost:3306 | FUNCTION | adjust_cost | griots | ROUTINE | adjust_cost | | root:*@localhost:3306 | TABLE | supplies | griots | COLUMN | cost | | root:*@localhost:3306 | TABLE | film | sakila | COLUMN | replacement_cost | +------------------------+--------------+--------------+-----------------+-------------+-------------+
shell> mysql -uroot -proot -e "SHOW CREATE FUNCTION griots.adjust_cost \G" *************************** 1. row *************************** Function: adjust_cost sql_mode: Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `adjust_cost`(cost double) RETURNS double DETERMINISTIC return cost * 1.10 character_set_client: latin1 collation_connection: latin1_swedish_ci Database Collation: latin1_swedish_ci
在这个实例中,我们使用到数据库模式'%cost%'来查找所有符合‘cost’的对象。同时,使用--body选项来查找存储对象和函数。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlmetagrep-practical-application/
我们查找到一个函数adjust_cost,通过SHOW CREATE FUNCTION命令来查看函数体。因此,不仅仅可以查找对象名称包含cost,也可以查找任何逻辑里面可能包含cost。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlmetagrep-practical-application/
权限
用户必须有对mysql数据库的SELECT权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlmetagrep-practical-application/
小技巧
如果使用正则表达式,可以指定--regexp选项来使用正则表达式,而不是数据库模式。如上面的例子可以写成:--pattern='^.*cost.*' --basic-regex。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlmetagrep-practical-application/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqlmetagrep-practical-application/

评论