背景:目前线上一直在跑的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
停掉mysql服务,删除/var/lib/mysql/文件夹下的ibdata一、ib_logfile0、ib_logfile1三个文件,从新启动mysqlui
重启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
如今要作的是逐一修改三个服务对应的数据库中的每一张表的存储引擎:alter table xxxx engine=innodb; 或者 像上面说的,dump数据,修改引擎而后从新导入数据,我选择的是逐一修改,但后来发现,这些表仅是用来记录监控数据,因此直接暴利删除,留下有用的数据表修改引擎便可code
作完操做后发现Service Monitor、Activity Monitor、Host Monitor三个服务已启动正常。而后发现,新建的数据表引擎也已经变成了InnoDB。server