关于表空间:故障分析-数据库表空间被-rm-后怎么处理

作者:肖亚洲 爱可生 DBA 团队成员,负责我的项目中数据库故障与平台问题解决,对数据库高可用与分布式技术情有独钟。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 背景介绍客户生产环境因为运维人员误操作,将 MySQL 数据库中,某个业务表 ibd 文件给 rm 掉了。因为历史起因该环境没有可用从库。针对这种状况,咱们怎么解决呢? 情景复现在单实例中,将表 sbtest1 的数据文件 rm 删掉后,观测数据库的运行状态【文件复原前不要重启 mysql 】。 前提条件筹备数据库与测试表数据 创立一个 MySQL-5.7.28 的单实例数据库,并用 sysbench 筹备1张100w的测试表。[root@localhost ~]# sysbench --mysql-host=10.186.65.84 --mysql-port=8484 --mysql-user=xiao --mysql-password=xiao --mysql-db=test --db-driver=mysql --mysql_storage_engine=innodb --db-ps-mode=disable --test=/usr/local/sysbench1.0/share/sysbench/oltp_insert.lua --table_size=1000000 --threads=1 --tables=1 --db-ps-mode=disable --percentile=95 --report-interval=1 --time=1 prepareWARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)Creating table 'sbtest1'...Inserting 1000000 records into 'sbtest1'Creating a secondary index on 'sbtest1'...[root@localhost ~]#查看数据库中数据:[root@localhost ~]# mysql -uroot -p -S /data/mysql/data/8484/mysqld.sockEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.7.28-log MySQL Community Server (GPL)Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use test;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select count(*) from sbtest1;+----------+| count(*) |+----------+| 1000000 |+----------+1 row in set (0.21 sec)查看sbtest1表的ibd文件:[root@localhost test]# ll -h /data/mysql/data/8484/test/total 241M-rw-r----- 1 actiontech-mysql actiontech-mysql 60 Jun 7 07:55 db.opt-rw-r----- 1 actiontech-mysql actiontech-mysql 8.5K Jun 7 07:57 sbtest1.frm-rw-r----- 1 actiontech-mysql actiontech-mysql 240M Jun 7 07:57 sbtest1.ibd发展测试通过 sysbench 对数据库发展读写测试,继续5分钟,期间对 sbtest1.ibd 文件进行 rm 操作,观测数据库运行状态: ...

July 14, 2021 · 5 min · jiezi

关于表空间:技术分享-MySQL-表空间碎片整理方法

作者:姚远 MySQL ACE,华为云 MVP ,专一于 Oracle、MySQL 数据库多年,Oracle 10G 和 12C OCM,MySQL 5.6,5.7,8.0 OCP。当初鼎甲科技任技术顾问,为共事和客户提供数据库培训和技术支持服务。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 MySQL 的表在进行了屡次 delete 、update 和 insert 后,表空间会呈现碎片。定期进行表空间整顿,打消碎片能够进步拜访表空间的性能。 检查表空间碎片上面这个试验用于验证进行表空间整顿后对性能的影响,首先查看这个有100万记录表的大小: mysql> analyze table sbtest1;+----------------+---------+----------+-----------------------------+| Table | Op | Msg_type | Msg_text |+----------------+---------+----------+-----------------------------+| sbtest.sbtest1 | analyze | status | Table is already up to date |+----------------+---------+----------+-----------------------------+1 row in set (0.06 sec)mysql> show table status like 'sbtest1'\G*************************** 1. row *************************** Name: sbtest1 Engine: MyISAM Version: 10 Row_format: Fixed Rows: 1000000 Avg_row_length: 729 Data_length: 729000000Max_data_length: 205195258022068223 Index_length: 20457472 Data_free: 0 Auto_increment: 1000001 Create_time: 2021-05-31 18:54:22 Update_time: 2021-05-31 18:54:43 Check_time: 2021-05-31 18:55:05 Collation: utf8mb4_0900_ai_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)mysql> system ls -l /var/lib/mysql/sbtest/sbtest1.*-rw-r----- 1 mysql mysql 729000000 May 31 08:24 /var/lib/mysql/sbtest/sbtest1.MYD-rw-r----- 1 mysql mysql 20457472 May 31 08:25 /var/lib/mysql/sbtest/sbtest1.MYI命令 show table status 和从 OS 层看到的数据文件大小统一,这时的 Data_free 为零。 ...

June 28, 2021 · 3 min · jiezi