SELECT table_schema database_name, table_name, engine FROM information_schema.tables WHERE table_schema NOT IN ('mysql','information_schema','performance_schema','sys') AND engine <> 'InnoDB';
SELECT CONCAT('ALTER TABLE ', table_schema, '.', table_name, ' ENGINE=InnoDB;') sql_text FROM information_schema.tables WHERE table_schema NOT IN ('mysql','information_schema','performance_schema','sys') AND engine <> 'InnoDB';
# 如返回结果如下例,可复制下述SQL并执行: +---------------------------------------+ | sql_text | +---------------------------------------+ | ALTER TABLE db1.user ENGINE=InnoDB; | | ALTER TABLE db1.order ENGINE=InnoDB; | | ALTER TABLE db6.log ENGINE=InnoDB; | | ALTER TABLE db2.table1 ENGINE=InnoDB; | +---------------------------------------+ 4 rows inset (0.04 sec)
$ cat update_engine.sh #!/bin/sh #Write by lyc at 2018-08-05 MYUSER="root" MYPWD="" PORT="" IP="" MYCMD="/usr/bin/mysql -u$MYUSER -p$MYPWD -h$IP -P$PORT --default-character-set=utf8" LIST_FILE="/root/update_engine/list_myisam.txt" RUN_LOG="/root/update_engine/update_engine.log" CMD1="SELECT table_schema database_name, table_name, engine FROM information_schema.tables WHERE table_schema NOT IN ('mysql','information_schema','performance_schema','sys') AND engine <> 'InnoDB';" CMD2="SELECT CONCAT('ALTER TABLE ', table_schema, '.', table_name, ' ENGINE=InnoDB;') sql_text FROM information_schema.tables WHERE table_schema NOT IN ('mysql','information_schema','performance_schema','sys') AND engine <> 'InnoDB';"
functionechoColor(){ case"$1"in [rR][eE][dD]) echo -e "\033[35m --- `date +%Y-%m-%d[%T]` \033[0m" | tee -a ${RUN_LOG} echo -e "\033[31m Error: $2 \033[0m" | tee -a ${RUN_LOG} ;; [gG][rR][eE][eE][nN]) echo -e "\033[35m --- `date +%Y-%m-%d[%T]` \033[0m" | tee -a ${RUN_LOG} echo -e "\033[32m OK: $2 \033[0m" | tee -a ${RUN_LOG} ;; [yY][eE][lL][lL][oO][wW]) echo -e "\033[35m --- `date +%Y-%m-%d[%T]` \033[0m" | tee -a ${RUN_LOG} echo -e "\033[33m Warn: $2 \033[0m" | tee -a ${RUN_LOG} ;; [bB][lL][uU][eE]) echo -e "\033[35m --- `date +%Y-%m-%d[%T]` \033[0m" | tee -a ${RUN_LOG} echo -e "\033[34m $2 \033[0m" | tee -a ${RUN_LOG} ;; esac }
functionmain(){ flag=`$MYCMD -e "$CMD1" | wc -l` echo"myISAM is $flag" if [ $flag -ne 0 ];then $MYCMD -e "$CMD2" | sed '1d' > $LIST_FILE cat $LIST_FILE|whileread line do $MYCMD -e "$line" if [ $? -eq 0 ];then echoColor green "update $line is ok" else echoColor red "update $line is false" fi done else echoColor green "all table is innodb" fi }