MySQL系统表故障探究

  ,,,,,经过排查,发现是mysql的几张系统表不见了,到底是那几张呢?               <>以前mysql>从information_schema选择table_name。表table_schema=mysql和引擎=InnoDB的;   + - - - - - - - - - - - - - - - - - - - - - - - +   | table_name |   + - - - - - - - - - - - - - - - - - - - - - - - +   | innodb_index_stats |   | innodb_table_stats |   | slave_master_info |   | slave_relay_log_info |   | slave_worker_info |   + - - - - - - - - - - - - - - - - - - - - - - - +   5行集(0.00秒)   之前      由上述统计可以看的到,在mysql5.6中,除了增加了上述5张表,还添加了general_log, slow_log表,并且将5.5中的主机表合到中了5.6的用户表中。
  ,,,,,,,在错误日志中追溯原因,发现是在一次故障迁移中,删除过ibdata1文件,在重启之后,自动创建的ibdata1文件,但这几张innodb系统表并没加载到表空间中。这些错误虽然并不影响业务,但很影响备份,在错误日志中大量出现,也是很烦的。         
        那么对于这样的错误,我们该如何处理?,
           2,删除上述系统表                  
  
  
  
  
        3,删除相关的.frm与.ibd文件
                 
        4,重新创建上述系统表
  
      <李>   从其他机器上,将这几张表的表结构备份出来,放到该机器上重新执行,备份脚本如下:   
     # !/bin/sh
      TABLELIST=" innodb_index_stats "
      TABLELIST=" $ {TABLELIST} innodb_table_stats”
      TABLELIST=" $ {TABLELIST} slave_master_info”
      TABLELIST=" $ {TABLELIST} slave_relay_log_info”
      TABLELIST=" $ {TABLELIST} slave_worker_info”
      mysql, mysqldump -uroot - p $ {TABLELIST}祝辞mysql_innodb_tables.sql
      之前
      李
      <李>
      将mysql_innodb_tables.sql拷贝到出现坏表错误的那台数据库机器,并将其导入到系统库mysql库中。
      
     # mysql -uroot mysql - p & lt;mysql_innodb_tables.sql
      之前
      李
      <李>
      运行刷新表(可选)
      李
      
     不要轻易删除ibdata1文件,在不同的版本,不同的分支,系统表都有可能不太一样,如mysql 5.6与10.0 MariaDB的系统表,mysql5.5与mysql 5.6的系统表等等,在做迁移或升级时,很容易忽略掉这些细节,所以在做之前,一定要备份,不要任性而为。
  

MySQL系统表故障探究