shellスクリプトmysqlデータベースにprimary keyがないすべてのテーブルを取得

5228 ワード

1.mkdir -p/root/scripts/
2. cd/root/scripts/
vim query.sql、コードは以下の通りです.
SELECT CONCAT(t.table_schema,".",t.table_name) as table_name   

FROM information_schema.TABLES t   

LEFT JOIN information_schema.TABLE_CONSTRAINTS tc   

ON t.table_schema = tc.table_schema   

AND t.table_name = tc.table_name   

AND tc.constraint_type = 'PRIMARY KEY'  

WHERE tc.constraint_name IS NULL   

AND t.table_type = 'BASE TABLE'

AND t.table_schema not in ('information_schema','mysql','performance_schema','test');

vim no_primarykey.shコードは以下の通りである.
#!/bin/bash

db_ip=192.168.56.$1

db_port=$2

db_user='xx'

db_password='xxxxx'

script_dir=/root/scripts

db_login="mysql -u${db_user} -p${db_password} -h${db_ip} -P${db_port}"

echo ${db_login}

for tname in `${db_login} -N -s -e "source $script_dir/query.sql"` 

do

echo "=======================$tname=====================">>$script_dir/${db_port}_table.log

$db_login -N -s -e "show create table $tname \G;">>$script_dir/${db_port}_table.log

done 

3、スクリプトを実行し、ディレクトリの下で結果を生産する
#chmod +x no_primarykey.sh 
#./no_primarykey.sh 13 3306(うち13はDB SERVERの最後のIPビットである$1、3306はDB PORTである$2)
結果は次のとおりです.
#cat 3306_table.log

=======================db1.t1=====================

*************************** 1. row ***************************

t1

CREATE TABLE `t1` (

  `deviceid` varchar(64) NOT NULL,

  `uid` int(11) DEFAULT NULL,

  `city` varchar(40) DEFAULT NULL,

  `ktvcity` varchar(40) DEFAULT NULL,

  `regsrc` int(11) DEFAULT NULL,

  `status` int(11) DEFAULT NULL,

  `clienttype` int(11) DEFAULT NULL,

  `pushtoken` varchar(64) DEFAULT NULL,

  `apntoken` varchar(64) DEFAULT NULL,

  KEY `uid` (`uid`),

  KEY `deviceid` (`deviceid`),

  KEY `status` (`status`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4