一、数据库表损坏
现象
mysql数据库非正常停止,导致所有数据库(除自身数据库信息)信息表名正常显示,但打开表提示:表不存在,数据库数据存放路径信息显示占用大小正常,证明数据没有丢失,数据库启动报错如下信息:
| 1 | 2019-01-25 13:46:19 13621 [Note] Server socket created on IP: '::'. | 
上述日志获取到: InnoDB: Cannot open table mysql/slave_worker_info from the internal data dictionary of InnoDB though the .frm file for the table exists. 尽管表“slave_worker_info”已经存在,但是获取不到信息。而且报大量类似表的错误信息
解决
根据错误提示及尝试打开表操作证明数据没有丢失,只是表丢失而已,把表删除,新建表结构,重新挂在数据节点即可:
- 备份原始表数据(例如:这里操作auth_user表) - 1 
 2
 3
 4
 5- ls dataDir 
 auth_user.frm
 auth_user.ibd
- 删除表 - 1 - DROP TABLE IF EXISTS `auth_user 
- 删除ibd文件 - 1 - rm -rf push_user_question_record.ibd 
- 重新创建表 - 1 - CREATE TABLE `auth_user 
- 丢弃新建表的表空间 - 1 - ALTER TABLE auth_user DISCARD TABLESPACE; 
- 复制备份的数据信息 - 1 - \cp /BACKUPDIR/auth_user.* MYSQLDATA/DATABASES/ 
- 授权 - 1 - chown -R mysql.mysql base_area.* 
- 挂载数据 - 1 - ALTER TABLE auth_user IMPORT TABLESPACE; 
二、用户添加索引权限
mysql给用户添加索引权限:
| 1 | grant index on *.* to username@'%' | 
注意:
这里只是给用户赋予了添加和删除索引的权限,如果想要修改的话,用户\<username>还需要有alter权限,否则会报如下错误:
| 1 | 1142 - ALTER command denied to user 'xxxx'@'xx.xx.xx.xx' tor table 'TABLE_NAME' | 
添加alter权限:
| 1 | grant alter on xx.xx to username@'xx' | 
三、停止执行过长的sql
| 1 | show processlist; |