一、数据库信息:
数据库版本:5.7.21-log
某银行测试数据库,APP业务库内有一个含有大量(几百个)分区表的大表test_app。DROP该分区表的大表后导致无法重建该分区表。
二、问题描述:
客户使用“drop table test_app;”
时,显示表删除成功。当重新执行该表的建表语句时,报错“Table 'app.test_app /* Partition p0 */' already exists”
三、问题分析:
3.1> 原因是GreatSQL 5.7数据库DDL没有原子性,drop表的删除动作没有执行完成;
3.2> 进入数据库“show tables”
查看test_app表已不存在;
3.3> 进入数据库所在的目录下,查看test_app表的相关文件。test_app.frm文件已不存在,但是有大量的"test_app#P***.ibd"
分区表文件存在。关闭数据库,移除这些分区表文件到其他目录,启动数据库;数据库无法启动,报“无法找到这些分区表文件”的错误;
3.4> 重新创建test_app表时,报“table already exists”
错。
3.5> 感觉进入了死胡同,最先想到的直截了当方法是备份APP业务库内除这张表的其他表,删除该数据库后,进行APP业务数据库的恢复,该方法没有测试,觉得太麻烦。
四、问题处理(方法一,测试步骤):
4.1> 新建一个临时库test,依据app库目录里的数据文件名称,修改建表语句后,执行test_app表的建表SQL语句,生成test_app.frm文件;
4.2> 关闭数据库,修改数据库配置文件my.cnf文件的参数为“innodb_file_per_table=OFF”;
4.3> 把临时库test目录下的test_app.frm文件拷贝到业务数据库app目录下,启动数据库;
4.4> 进入业务数据库APP,可以看到test_app表;
4.5> 执行“drop table test_app;”
语句,成功删除了表。关闭数据库;
4.6> 进入业务数据库app对应的目录下,test_app.frm文件已不存在,但是有个test_app#P***.ibd
分区表文件存在。手工删除该ibd文件。
4.7>修改数据库配置文件my.cnf文件的参数为“innodb_file_per_table=ON”;
启动数据库。
4.8> 重新执行test_app表的建表SQL语句。即可成功创建表。
五、问题处理(方法二,客户执行步骤):
5.1> 设置innodb_file_per_table=OFF:set global innodb_file_per_table='OFF';
5.2> 执行test_app表的建表语句,建表成功。
5.3> 删除test_app表drop table test_app;
5.4> 重启数据库。
5.5> 再执行test_app表的建表语句,建表成功。
Enjoy GreatSQL
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。
相关链接: GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区:
社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html
技术交流群:
微信:扫码添加
GreatSQL社区助手
微信好友,发送验证信息加群
。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容