国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

shell批量修改MySQL存儲(chǔ)引擎類型2種方法

2024-07-24 12:39:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

存儲(chǔ)引擎是每一個(gè)mysql數(shù)據(jù)庫(kù)必須有的一個(gè)類型,不同的類型是不一樣的的,特別是對(duì)不同數(shù)據(jù)存儲(chǔ)有一些不同了,下面我們來(lái)看看shell批量修改MySQL存儲(chǔ)引擎類型2種方法.

MySQL存儲(chǔ)引擎類型有哪些

MyISAM管理非事務(wù)表,提供高速檢索,以及全文搜索能力。

Memory存儲(chǔ)引擎提供”內(nèi)存中”表,MERGE存儲(chǔ)引擎允許集合將被樹立統(tǒng)一的MyISAM表做為一個(gè)單表。非事務(wù)表。可把多個(gè)myisam表構(gòu)建為一個(gè)虛擬表,使得對(duì)這些表的查詢仿佛在一個(gè)表上進(jìn)行,提高了查詢速度和修復(fù)效率,并節(jié)省了磁盤空間。

InnoDB,BDB存儲(chǔ)引擎提供事務(wù)安全表

EXAMPLE存儲(chǔ)引擎是一個(gè)”存根”引擎,它不做什么。可以用這個(gè)引擎創(chuàng)建表,但沒(méi)有數(shù)據(jù)被存儲(chǔ)其中或從其中檢索,這個(gè)引擎的目的是服務(wù)。針對(duì)開發(fā)人員。

NDB Cluster是被Mysql Cluster用來(lái)實(shí)現(xiàn)分割多臺(tái)計(jì)算機(jī)上的表的存儲(chǔ)引擎,只被LINUX,SOLARIS,Mac os支持.

ARCHIVE存儲(chǔ)引起被用來(lái)無(wú)索引地,非常小的覆蓋存儲(chǔ)的大量數(shù)據(jù).

CSV存儲(chǔ)引擎把數(shù)據(jù)以逗號(hào)的格式存儲(chǔ)在文本文件中。

BLACKHOLE存儲(chǔ)引擎把數(shù)據(jù)存在遠(yuǎn)程數(shù)據(jù)庫(kù)中,在5.1中他只和Mysql一起工作,使用Mysql C client API,在未來(lái)的分發(fā)版中,我們想要讓它使用其他驅(qū)動(dòng)器或客戶端連接方法里連接到另外的數(shù)據(jù)源.

MyISAM類型的表在磁盤上存儲(chǔ)成三個(gè)文件

*.frm文件存儲(chǔ)表定義

*.MYD(mydata)文件存儲(chǔ)表中數(shù)據(jù)

*.MYI(myindex)文件存儲(chǔ)表上建立的索引。

InnoDB類型的表提供提交,回滾,崩潰恢復(fù)能力的存儲(chǔ)引擎,行級(jí)鎖,可以與其他Mysql表混合起來(lái),甚至在同一個(gè)查詢中也可以混用.

為處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì).

批量修改MySQL存儲(chǔ)引擎類型方法

一、shell腳本實(shí)現(xiàn)法,代碼如下:

  1. #/bin/bash 
  2. DB=test 
  3. USER=root 
  4. PASSWD=test 
  5. HOST=192.168.0.11 
  6. MYSQL_BIN=/usr/local/mysql/bin 
  7. S_ENGINE=MyISAM 
  8. D_ENGINE=DBDcluster 
  9. #echo "Enter MySQL bin path:" 
  10. #read MYSQL_BIN 
  11. #echo "Enter Host:" 
  12. #read HOST 
  13. #echo "Enter Uesr:" 
  14. #read USER 
  15. #echo "Enter Password:" 
  16. #read PASSWD 
  17. #echo "Enter DB name :" 
  18. #read DB 
  19. #echo "Enter the original engine:" 
  20. #read S_ENGINE 
  21. #echo "Enter the new engine:" 
  22. #read D_ENGINE 
  23. $MYSQL_BIN/mysql -h$HOST -u$USER -p$PASSWD $DB -e "select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='"$DB"' and ENGINE='"$S_ENGINE"';" | grep -v "TABLE_NAME" >tables.txt 
  24. for t_name in `cat tables.txt` 
  25. do 
  26.     echo "Starting convert table $t_name......" 
  27.     sleep 1 
  28.     $MYSQL_BIN/mysql -h$HOST -u$USER -p$PASSWD $DB -e "alter table $t_name engine='"$D_ENGINE"'" 
  29.     if [ $? -eq 0 ]  --Vevb.com 
  30.     then 
  31.         echo "Convert table $t_name ended." >>con_table.log 
  32.         sleep 1 
  33.     else 
  34.         echo "Convert failed!" >> con_table.log 
  35.     fi 
  36. done 

喜歡交互式的就把echo 、read那段的注釋去掉,可以根據(jù)提示進(jìn)行更改。也可以根據(jù)自己的需要把DB、user、password、host等信息修改后直接運(yùn)行。該方法的原理就是循環(huán)調(diào)用alter table 表名 engine=NDBcluster的語(yǔ)句。該方法還有一個(gè)變種:

首先利用mysql內(nèi)部的系統(tǒng)表得出要執(zhí)行的sql語(yǔ)句:

SELECT CONCAT('ALTER TABLE ',table_name,' ENGINE=InnoDB;') FROM information_schema.tables WHERE table_schema="db_name" AND ENGINE="myisam";

將以上結(jié)果輸出到文件,然后執(zhí)行該SQL語(yǔ)句的文件,執(zhí)行完后,可以通過(guò)下面的語(yǔ)句確認(rèn)下:

SELECT CONCAT(table_name,'  ', engine) FROM information_schema.tables WHERE table_schema="db_name";

方法二、利用存儲(chǔ)過(guò)程批量修改,代碼如下:

  1. DELIMITER $$ 
  2. DROP PROCEDURE IF EXISTS `t_girl`.`sp_alter_db_engine`$$ 
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_alter_db_engine`( 
  4.  IN f_db_name varchar(255), IN f_engine_name varchar(255)) 
  5. BEGIN 
  6.   -- Get the total number of tables. 
  7.   declare cnt1 int default 0; 
  8.   declare i int
  9.   set i = 0; 
  10.   select count(1) from information_schema.tables where table_schema = f_db_name into cnt1; 
  11.   while i < cnt1 
  12.     do 
  13.       set @stmt = concat('select @tbname:=table_name from information_schema.tables where table_schema=''',f_db_name,''' order by table_name desc limit ',i,',1 into @tbname'); 
  14.       prepare s1 from @stmt; --Vevb.com 
  15.       execute s1; 
  16.       deallocate prepare s1; 
  17.       set @stmt = ''
  18.       set @tbname = concat(f_db_name,'.',@tbname); 
  19.       call sp_alter_table_engine(@tbname,f_engine_name); 
  20.       set i = i + 1; 
  21.   end while; 
  22. END$$ 
  23. DELIMITER ; 

調(diào)用方法如下代碼:

call sp_alter_db_engine('baigan_cs','innodb');

前表一個(gè)是庫(kù)名,后面是要改成的引擎類型.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 突泉县| 庄浪县| 武陟县| 陆良县| 镇安县| 铁力市| 聂拉木县| 绥芬河市| 台山市| 洱源县| 萨嘎县| 山阳县| 栖霞市| 泰安市| 莆田市| 昭平县| 双牌县| 门头沟区| 灵山县| 嘉义县| 古田县| 民丰县| 曲阜市| 丹巴县| 西青区| 林西县| 崇明县| 呼玛县| 肥乡县| 清徐县| 兖州市| 通州区| 禄丰县| 宁城县| 东兴市| 龙江县| 南漳县| 万州区| 扶风县| 南部县| 浠水县|