Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4174170
  • 博文数量: 291
  • 博客积分: 8003
  • 博客等级: 大校
  • 技术积分: 4275
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 18:28
文章分类

全部博文(291)

文章存档

2017年(1)

2013年(47)

2012年(115)

2011年(121)

2010年(7)

分类: Mysql/postgreSQL

2012-02-23 13:32:29

昨天晚上做完把mysql从DB01复制到DB02
之前做数据库迁移时出现一个问题,innodb某个数据库里的某个表损坏了,导致数据库每隔一段时间自动重启,估计是读到那个坏表所致。
昨天的数据库复制也是使用把mysql所有文件拷贝过去这种方法,而不是用mysqldump所有数据库到sql文件,在新服务器上安装新mysql,再把sql文件导入的正常流程。
拷贝mysql比正常流程要节省好多时间,但是这种方法不太安全,因此我需要对所有的表进行扫描一次。
我没有新服务器的ssh帐号,因此只能用mysql帐号。
我检查的过程如下
1.获取所有表名
  1. select TABLE_SCHEMA,TABLE_NAME from information_schema.TABLES;
导出到excel
2.构建测试sql语句
测试表是否损坏需要做到
1.必须扫描全表,所以不能用索引。
2.由于表名是动态,每个表的列不一样,所以必须用*查所有列
3.由于表是动态,所以不能加where条件
因此我写了一条通用的语句
  1. select SQL_CALC_FOUND_ROWS * from test_db.test_tb where 1=1 limit 1;
如下图所示,这条语句没有用索引而且是全表查询(SQL_CALC_FOUND_ROWS
3.产生批量测试SQL
用excel公式:
  1. =CONCATENATE("select SQL_CALC_FOUND_ROWS *"," from ",A70,".",B70," where 1=1 limit 1;")
4.把这些SQL语句保存到sql文件中
mysql -uroot -ppassword test < test.sql
执行
在执行之前先登录mysql客户端
若是中间出现失去连接情况,表示某个表有损坏
5.我用这种方法发现了有个View有问题
  1. ERROR 1356 (HY000): View 'test.testabc' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
出现这种情况注意是数据库的ip变了,这个得重新创建view
end

阅读(1657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~