mysql多層元資訊與查詢實踐

o煙雨瀟瀟o發表於2017-07-18
                                                                          mysql多層元資訊與查詢實踐
                                                                                                                  --劉春雷
歡迎轉載,請註明出處,謝謝
作者:劉春雷
歡迎評論,感謝~                                    
------------------------------------------------------
概要:
如果你想規範化管理資料庫
如果你想方便擴充套件元資訊
如果你想明確mysql邏輯結構
如果你瞭解元資訊的重要性
如果你想有快速顯示資訊的工具,那麼此篇文章適合你~
                                                                    --劉春雷
-------------------------------------------------------------------

一、元資訊重要性

1.1、什麼是mysql元資訊

   mysql元資訊是指記錄mysql的基本資訊,例如伺服器資訊,IP資訊,例項資訊,叢集資訊,資料庫資訊,資料庫使用者資訊,域名資訊,域名與例項關係資訊,備份任務資訊,備份結果資訊等

1.2、mysql元資訊作用

<1>規範化
為了規範化mysql的基本資訊
<2>自動化
可以很方便被shell、python指令碼呼叫,獲取資訊方便
<3>邏輯化
可以清晰mysql各邏輯情況,例如例項,伺服器,叢集等

二、元資訊架構

mysql多層元資訊與查詢實踐
 


1、伺服器(my_server)
功能簡述:管理伺服器資訊
2、叢集(my_cluster)
功能簡述:管理叢集資訊
3、例項(my_db)
功能簡述:管理例項資訊
4、資料庫(my_database)
功能簡述:管理資料庫資訊
5、使用者(my_database_user)
功能簡述:管理資料庫使用者資訊
6、域名(my_domain)
功能簡述:管理域名資訊
7、資料庫備份任務(my_backup_task)
功能簡述:管理備份任務
8、資料庫備份記錄(my_backup_info)
功能簡述:管理備份記錄資訊


三、建表SQL詳細

3.1、伺服器資訊表
注:因1臺機器有2個IP,所以有ip,ip2

 CREATE TABLE `my_server` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` char(15) NOT NULL COMMENT 'IP地址',
  `ip2` char(15) NOT NULL COMMENT 'ip2',
  `hostname` varchar(50) DEFAULT NULL COMMENT '主機名',
  `valid` varchar(1) NOT NULL COMMENT '是否有效,1有效,0無效',
  `idc` varchar(32) DEFAULT NULL COMMENT '機房資訊',
  `create_time` datetime DEFAULT NULL COMMENT '機器新增時間',
  `machine_type` varchar(50) DEFAULT NULL COMMENT '機器套餐',
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_ip` (`ip`),
  UNIQUE KEY `ux_ip2` (`ip2`),
  UNIQUE KEY `ux_hostname` (`hostname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='mysql機器資訊表' 

功能:用於記錄伺服器資訊的表

3.2、IP資訊

CREATE TABLE `my_ip` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` char(15) NOT NULL COMMENT 'IP地址',
  `hostname` varchar(50) DEFAULT NULL COMMENT '主機名',
  `valid` varchar(1) NOT NULL COMMENT '是否有效,1有效,0無效',
  `idc` varchar(32) DEFAULT NULL COMMENT '機房資訊',
  `create_time` datetime DEFAULT NULL COMMENT '機器新增時間',
  `machine_type` varchar(50) DEFAULT NULL COMMENT '機器套餐',
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_ip` (`ip`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='IP資訊表' 

功能:用於記錄mysql相關IP的資訊,用於給my_db選擇IP
關聯關係 ip管理my_server的ip/ip2

3.3、叢集表

功能:用於記錄一個叢集的相關資訊
 CREATE TABLE `my_cluster` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cluster_name` varchar(256) NOT NULL COMMENT '叢集名',
  `cluster_port` int(11) DEFAULT NULL COMMENT '叢集埠',
  `business_info` varchar(256) NOT NULL COMMENT '資料庫歸屬業務',
  `cluster_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:online,1:develop,2:test',
  `add_user_id` int(11) DEFAULT NULL COMMENT '建立者,負責此叢集的dba',
  `add_time` datetime DEFAULT NULL COMMENT '新增時間',
  `modify_time` datetime DEFAULT NULL COMMENT '修改時間',
  `valid` varchar(1) NOT NULL DEFAULT '1' COMMENT '叢集是否有效、下線,1有效,0無效、下線',
  `data_init_size` int(11) NOT NULL DEFAULT '0' COMMENT '叢集初始資料量',
  `data_increase` varchar(100) NOT NULL DEFAULT '0' COMMENT '叢集增長情況',
  `version` varchar(20) NOT NULL DEFAULT '5.5.27' COMMENT 'mysql版本,5.5.27,5.6.21,5.7.15',
  `mha_seton` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:set off,1:set on',
  `backup_flag` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否備份,1備份,0不備份',
   cluster_desc varchar(500) not null default '' COMMENT '描述',
  PRIMARY KEY (`id`),
UNIQUE KEY `ux_clustername` (`cluster_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='mysql叢集資訊表'

3.4、例項表

功能:記錄mysql的叢集例項的相關資訊

CREATE TABLE `my_db` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cluster_id` int(11) NOT NULL COMMENT '叢集號',
  `host` char(15) NOT NULL COMMENT '例項IP',
  `port` varchar(8) NOT NULL COMMENT '例項埠號',
  `add_user_id` int(11) DEFAULT NULL COMMENT '新增的使用者',
  `add_time` datetime DEFAULT NULL COMMENT '新增的時間',
  `modify_time` datetime DEFAULT NULL COMMENT '修改的時間',
  `valid` tinyint(1) NOT NULL DEFAULT '1' COMMENT '例項是否有效,1有效,0無效',
  `service` varchar(32) NOT NULL COMMENT '例項讀寫情況,Write&Read,Read,Bakup,Out-of-service',
  `role` varchar(80) NOT NULL COMMENT 'db role',
  `xtrabackup_flag` tinyint(4) NOT NULL DEFAULT '0',
  `candidate_master` tinyint(4) DEFAULT '0' COMMENT '是否優先可切為master,1優先,0不優先',
  `no_master` tinyint(4) DEFAULT '0',
  `mha_write_into_conf` tinyint(4) DEFAULT '1' COMMENT 'mha_write_into_conf,1write;0,not write',
  `binlog_dir` varchar(100) DEFAULT NULL COMMENT 'binlog_dir',
  `innodb_buffer` varchar(30) NOT NULL DEFAULT '1G' COMMENT 'innodb_buffer_pool set',
  `db_version` varchar(10) NOT NULL DEFAULT '' COMMENT 'db_version,5.5.27,5.7.15',
  `init_db` varchar(60) DEFAULT NULL COMMENT '初始化db',
  `job_status` varchar(100) NOT NULL COMMENT '例項狀態',  
  db_desc varchar(500) not null default ''  COMMENT '描述',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_hostportservicename` (`host`,`port`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='mysql例項資訊表' 

關聯關係
cluster_id與叢集表my_cluster的叢集號id對應
host與機器表my_ip的IP對應

3.5、資料庫表

功能:記錄資料庫的資訊(schema) 
 CREATE TABLE `my_database` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cluster_id` int(11) NOT NULL COMMENT '叢集id號',
  `db_name` varchar(220) NOT NULL COMMENT 'db name',
  `service_name` varchar(100) NOT NULL COMMENT 'service name',
  `db_owners` varchar(128) NOT NULL DEFAULT '' COMMENT 'RD負責人',
  `add_user_id` int(11) DEFAULT NULL COMMENT '新增庫的dba',
  `valid` varchar(1) NOT NULL DEFAULT '1' COMMENT '庫是否有效,1有效,0無效',
  `add_time` timestamp NOT NULL DEFAULT '2017-01-01 00:00:00' COMMENT '建立時間',
  `modify_time` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '修改時間',
  `db_department` varchar(32) NOT NULL DEFAULT '' COMMENT '業務部門',
   db_business varchar(32) NOT NULL DEFAULT '' COMMENT '所屬組',
  `job_status` varchar(100) NOT NULL COMMENT '資料庫狀態',  
  database_desc varchar(500) not null default '' COMMENT '描述',  
PRIMARY KEY (`id`),
  UNIQUE KEY `ux_clusteriddb` (`db_name`,`cluster_id`),
  KEY `ix_cluster_id` (`cluster_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='資料庫schema資訊表' 

關聯關係
cluster_id與叢集表my_cluster的叢集號id對應


3.6、例項與域名關係表

功能:記錄資料庫例項與域名關係表

CREATE TABLE `my_db_domain` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `db_id` int(11) NOT NULL COMMENT 'my_db表的例項號',
  `domain_id` int(11) NOT NULL COMMENT '域名id號',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_db_id` (`db_id`,`domain_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='資料庫例項與域名id關係表' 


關聯關係
domain_id與my_domain的例項id號對應
db_id與例項表my_db的例項id對應

3.7、域名資訊表

功能:記錄域名資訊
CREATE TABLE `my_domain` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cluster_id` int(11) NOT NULL DEFAULT '0' COMMENT '域名所屬叢集id',
  `domain_flag` int(11) NOT NULL COMMENT '域名讀寫標識,1,只讀,0,讀寫',
  `domain_name` varchar(64) NOT NULL COMMENT '域名',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_domain_name` (`domain_name`),
  KEY `ix_clusterid` (`cluster_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='域名資訊表'

關聯關係
cluster_id為叢集表my_cluster的id號,需要選擇
domain_flag 為了區分域名讀寫的屬性,也可以在域名起名的環節制定規則,來區分讀寫域名,例如  domainname_w 為寫域名,domainname_r為讀域名


3.8、使用者表

CREATE TABLE `my_database_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL  COMMENT '使用者名稱',
  `userhost` varchar(60) NOT NULL  COMMENT '許可權,可來源的IP',
  `userpwd` varchar(30) NOT NULL COMMENT '密碼',
  `privs` varchar(2000) NOT NULL  COMMENT '許可權',
  `add_user_id` int(11) NOT NULL  COMMENT '新增的DBA',
  `add_time` datetime(6) NOT NULL  COMMENT '新增時間' ,
  `valid` int(11) NOT NULL COMMENT '是否有效,1有效,0無效',
  `modify_time` datetime(6) NOT NULL COMMENT '修改時間' ,
  `database_id` int(11) NOT NULL COMMENT '資料庫schema的id',
  PRIMARY KEY (`id`),
  UNIQUE KEY `un_database_user_host` (`database_id`,`username`,`userhost`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8  COMMENT='使用者資訊表' 


關聯關係:
database_id與資料庫表my_database 的id號對應

3.9、備份任務表

 CREATE TABLE `my_backup_task` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `db_names` varchar(20) DEFAULT NULL  COMMENT '包含庫名',
  `backup_type` int(11) NOT NULL default 0  COMMENT '備份型別(0,'HOTBAK'),(1,'DUMP')',
  `backup_weektime` varchar(50) NOT NULL COMMENT '備份日期',
  `backup_crontime` varchar(30) NOT NULL COMMENT '備份crontab時間',
  `backup_dir` varchar(150) NOT NULL COMMENT '備份地址',
  `expire_counts` int(11) NOT NULL COMMENT '備份保留個數',
  `isvalid` int(11) NOT NULL default 1 COMMENT '是否有效,1有效0無效,預設1有效',
  `modify_time` datetime(6) DEFAULT NULL COMMENT '修改時間‘,
  `last_start_time` datetime(6) DEFAULT NULL COMMENT '最近備份開始時間',
  `last_end_time` datetime(6) DEFAULT NULL COMMENT '最近備份結束時間',
  `last_size` double DEFAULT NULL COMMENT '上次備份檔案大小(M)',
  `cluster_id` int(11) NOT NULL COMMENT '叢集號',
  `db_id` int(11) NOT NULL COMMENT '例項號',
  `cost_time` int(11) NOT NULL COMMENT '備份耗時(分)',
  `last_status` int(11) NOT NULL  default 1 COMMENT '最近一次備份結果,0failed,1succeed,2succeed with warning',
  PRIMARY KEY (`id`),
  UNIQUE KEY `un_clusterid_backup` (`cluster_id`,`backup_type`),
) ENGINE=InnoDB AUTO_INCREMENT=4633 DEFAULT CHARSET=utf8

關聯關係
cluster_id與叢集表my_cluster的id號對應
db_id與例項表my_db的id對應

3.10、備份資訊記錄表

CREATE TABLE `my_backup_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `db_names` varchar(20) DEFAULT NULL COMMENT '包含庫',
  `backup_type` int(11) NOT NULL default 0 COMMENT '備份方式,0xtra,1dump',
  `backup_dir` varchar(150) DEFAULT NULL COMMENT '備份最終結果',
  `start_time` datetime(6) DEFAULT NULL COMMENT '備份開始時間',
  `end_time` datetime(6) DEFAULT NULL COMMENT '備份結束時間',
  `size` double DEFAULT NULL COMMENT '份檔案大小(M)',
  `status` int(11) NOT NULL COMMENT '備份結果,0,failed,1succeed,2succeed with warning ',
  `message` varchar(256) DEFAULT NULL COMMENT '備份詳細資訊',
  `cluster_id` int(11) NOT NULL COMMENT '叢集號',
  `db_id` int(11) NOT NULL COMMENT '例項號',
  `cost_time` int(11) NOT NULL COMMENT '備份耗時(分)',
  PRIMARY KEY (`id`),
  KEY `ix_cluster_id` (`cluster_id`),
  KEY `ix_db_id` (`db_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
關聯關係
cluster_id與叢集表的id號對應
db_id與例項表my_db的id對應



四、元資訊最佳使用實踐

4.1、qmysql工具

4.1.1、qmysql工具功能

程式碼:python開發,用於方便DBA查詢叢集、例項的相關資訊,方便使用
原理:即利用多表元資訊關聯查詢,查詢出相關的資訊
優點:
查詢叢集拓撲情況,快速展示
快速登入例項
快速登入機器

4.1.2、qmysql功能 彙總

mysql多層元資訊與查詢實踐

4.1.3、qmysql功能--按叢集號查詢叢集拓撲

mysql多層元資訊與查詢實踐 

4.1.4、qmysql功能--按叢集名查詢叢集拓撲

mysql多層元資訊與查詢實踐
 
 

4.1.5、qmysql功能--按庫名查詢叢集拓撲

mysql多層元資訊與查詢實踐
 

4.1.6、qmysql功能--按服務名查詢叢集拓撲

 

4.1.7、登入例項

mysql.例項號,即可登入指定例項
mysql多層元資訊與查詢實踐

4.1.8、遠端登入機器

ssh.例項號
即可遠端登入機器
mysql多層元資訊與查詢實踐

注:程式碼就不分享出來了,大家按照多表關聯查詢即可做出此工具




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28823725/viewspace-2142234/,如需轉載,請註明出處,否則將追究法律責任。

相關文章