cloudera manage 4.8.6作hive元數據庫主從同步後

背景:目前線上一直在跑的hadoop集羣使用的是cdh4.7.1版本,之因此版本這麼低是由於運行的時間比較久遠了,而後由於各類緣由也沒有升過級。mysql

集羣中使用的是mysql來存儲hive的元數據,但很好笑的是以前一直沒有對mysql作過主從或是按期dump操做來備份數據,不過幸運的是這臺mysql服務足夠的堅挺,一直沒有出現過問題。sql

但隨着業務量的不斷增長,本人決定鋌而走險,先作一個主歷來確保元數據沒有問題,而後再找時間來升級整個集羣。
理論上作一個mysql的主從服務,對集羣應該沒有什麼影響,最多就是重啓一下mysql,也就是一瞬間的事。沒想到的是mysql的ibdata1文件居然已經跑到了100+GB,只好先把它變小,具體作法:數據庫

1. 備份數據庫
a. 首先要保證數據沒有寫入,能夠限制一下端口
b. 爲了防止操做失誤出現數據有問題,因此最好換一個mysql的本地路徑,若是出了問題直接切換回去就行了
c. 備份操做:mysqldump -q -umysql -ppassword --add-drop-table --all-databases > /xxx/all.sql

2. 中止數據庫
service mysqld stop

3. 刪除ibdata1文件
rm /var/lib/mysql/var/ibdata1

4. 修改my.cnf文件
[mysqld]下增長下面配置
innodb_file_per_table=1
驗證配置是否生效,能夠重啓mysql後,執行
show variables like '%per_table%'
看看innodb_file_per_table變量是否爲ON

5. 重啓mysql,並導入數據
service mysqld start
mysql -uusername -pyourpassword < /xxx/all.sql

而後開始作主從服務,此處暫略
當mysql正常運行後,啓動集羣及cm各項服務,發現Service Monitor、Activity Monitor、Host Monitor 三個服務均啓動失敗,查看日誌bootstrap

ERROR main:com.cloudera.enterprise.dbutil.DbUtil: InnoDB engine not found. Show engines reported: [MRG_MYISAM, CSV, MyISAM, MEMORY]
ERROR main:com.cloudera.server.cmf.bootstrap.EntityManagerFactoryBean: InnoDb engine isn’t present or enabled. SCM requires InnoDb MySQL db engine

意思是:部分數據表須要InnoDB,但實際是MyISAM或其餘。
想要解決這個問題,只能修改mysql數據表的引擎,要麼修改my.cnf配置 default-storage-engine=InnoDB 這樣全部的表就都變成InnoDB了,不過前提是要先dump數據,修改引擎,而後再導入數據。app

這個操做比較麻煩了。並且其餘的數據表也不須要修改爲InnoDB,因此決定修改單表的存儲引擎,具體操做以下:oop

  1. 停掉mysql服務,刪除/var/lib/mysql/文件夾下的ibdata一、ib_logfile0、ib_logfile1三個文件,從新啓動mysqlui

  2. 重啓Service Monitor、Activity Monitor、Host Monitor三個服務觀察日誌,報錯變成了:日誌

    ERROR com.cloudera.enterprise.dbutil.DatabaseManager: Tables have unsupported engine type [MyISAM]. InnoDB is required. Table mapping: {MyISAM=[CMON_LL_DP_2017_03_26_22, CMON_LL_DP_2017_03_26_23, CMON_LL_DP_2017_03_28_21, CMON_LL_DP_2017_03_28_20, CMON_LL_DP_2017_03_28_23, CMON_LL_DP_2017_03_28_22, CMON_LL_DP_2017_03_26_21, CMON_LL_DP_2017_03_26_20
  3. 如今要作的是逐一修改三個服務對應的數據庫中的每一張表的存儲引擎:alter table xxxx engine=innodb; 或者 像上面說的,dump數據,修改引擎而後從新導入數據,我選擇的是逐一修改,但後來發現,這些表僅是用來記錄監控數據,因此直接暴利刪除,留下有用的數據表修改引擎便可code

  4. 作完操做後發現Service Monitor、Activity Monitor、Host Monitor三個服務已啓動正常。而後發現,新建的數據表引擎也已經變成了InnoDB。server

相關文章
相關標籤/搜索