MySQL
Backup & Recovery
innobackupex 2.4
MyFlash
Xtrabackup 8.0
secure_file_priv
MySQL Shell
MySQL Utilities — mysqlfrm
使用 sql_thread 进行数据恢复
binlog2sql
MySQL Binlog Server
mysqldump
备份脚本
Docs
01.MySQL
02.安装MySQL
03.MySQL的启动过程
04.用户管理
05.sql_safe_updates
06.mysql的体系结构
07.InnoDB undo log
08.mysql 日志
0801.mysqlbinlog
0803.binlog & relay log
0802.binlog
09.MySQL Replication
0902.Mysql 8.0 Replication
0901.Mysql 5.7 Replication
0903.Replication 主要配置
0904.如何彻底清除从库(slave)设置?
0905.CHANGE MASTER TO
0906.fast semi-sync Replication
10.mysql事务和锁
11.MySQL temp tables
12.Multi-Threaded-Slave
13.多源复制(多主一从)
slow query
Overview of MySQL 8.0 Programs
17.OPTIMIZE TABLE
16.GTID
MySQL 8.0.0 持久化全局参数
15.升级MySQL
18.存储引擎
14.MySQL Tablespace
REPAIR TABLE
High availability
MariaDB Galera Cluster
MySQL Group Replication-MGR
基于 Consul + MySQL 高可用
使用 RPM 安装 PXC
Galera Cluster for MySQL 监控状态说明
replication managerfor
Master High Availability
Orchestrator
Percona XtraDB Cluster
MySQL NDB Cluster
FQ
Could not increase number of max_open_files
MY-010055
ERROR 1118
index column size too large. the maximum column size is 767 bytes
ERROR 1064 (42000)
更新丢失
flush-hosts
GDB调试MySQL
extra_port
lower_case_table_names
MySQL主从复制中断
SQL错误(1075)
Porxy
proxysql
03.ProxySQL 实现主从读写分离
09.ProxySQL集群
08.禁止多路路由
07.链式规则( flagIN 和 flagOUT )
06.读写分离方法
05.ProxySQL的查询缓存功能
04.SQL语句的重写规则
02.ProxySQL的路由规则
01.管理后端节点
10.ProxySQL+组复制前言
DBLE
Mysql route
Shardingsphere
Performance Tuning and Optimization
AWR
压力测试
Mysql并发参数调整
mysql 中数据表 DATA_LENGTH & INDEX_LENGTH
01.MySQL体系结构
02.多实例管理(mysqld_multi)
03.MySQL内存结构
mysql 单机性能调整
tools
mysql utilities
percona-toolkit
pt-online-schema-change
pt-summary
gh-ost
windows 环境下 mysql 初始化
mysql主从同步检测脚本
本文档使用 MrDoc 发布
-
+
home page
REPAIR TABLE
# 1.REPAIR TABLE REPAIR TABLE 用于修复被破坏的表。默认情况下,REPAIR TABLE与myisamchk --recover tbl_name具有相同的效果。REPAIR TABLE对MyISAM和ARCHIVE表起作用。 通过修改相关参数,提高repair table的效率: ``` [mysqld] myisam_sort_buffer_size=1G key_buffer_size=1G myisam_max_sort_file_size=100G ``` - myisam_sort_buffer_size 在REPAIR TABLE过程中,或通过CREATE INDEX/ALTER TABLE为MyISAM表添加索引时为了对索引排序所能够使用的缓冲空间大小。最小值为4,32位系统上所能够使用的最大值为4294967295,即4G;64位系统上可以使用更大的空间。作用范围为全局或会话级别,可用于配置文件,属动态变量。 - myisam_max_sort_file_size 设定在MySQL在使用REPARE TABLE、ALTER TABLE或LOAD DATA INFILE命令时为MyISAM表重新创建索引所能够使用的临时文件的体积上限,单位是字节。如果临时文件的大小大过了此上限值,则mysqld会使用key cache创建索引。默认值是2G,而如果MyISAM索引文件本身大过此值且其所在的文件系统有足够的空闲空间,增大此值会提升MySQL性能。作用范围为全局级别,可用于配置文件,属动态变量。 ``` root@localhost : barrel103:41:03> REPAIR TABLE alarm_record quick; +----------------------+--------+----------+---------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +----------------------+--------+----------+---------------------------------------------------------+ | barrel1.alarm_record | repair | note | The storage engine for the table doesn't support repair | +----------------------+--------+----------+---------------------------------------------------------+ 1 row in set (0.00 sec) ``` “ The storage engine for the table doesn't support repair “的意思是:“该表的存储引擎不支持修复”,通过表设计查看,可以看到该表的引擎是InnoDB。 InnoDB支持外键参照完整性,具备故障恢复能力,所以不需要修复! InnoDB损坏表的几率非常小,因为InnoDB是先写入日志,再写入数据库,因此InnoDB引擎比MyISAM健壮很多,而且他有自我修复能力,一般情况一旦InnoDB的数据文件损坏,只能找备份恢复。 # 2.维护表 mysql 提供了分析表 检查表 和优化表的语句,分析表主要是分析关键字的分部,检查表主要是检查表是否存在错误, 优化表则是消除删除或更新造成的空间浪费 ## 2.1.分析表 analyze table mysql 提供了 analyze table语句分析表,analyze table 语句基本语法如下: ``` analyze [local | no_write_to_binlog] table table_name [,table_name] ``` local 关键字是 no_write_to_binlog 的别名,二者都是执行过程不写入二进制日志,这里表名可以有多个, 注意使用analyze table分析表的过程中,数据库系统会对表添加只读锁, 也就是在分析过程中只能读取表中记录,而不能更新和插入记录,该操作能分析 InnoDB,BDB,和 MyISAM表。 ``` analyze local table out_crm_user_day; ``` 分析表其实真正要做的是对表的cardinality(散列程度)进行统计更新,因为它决定是否走索引,如果cardinality和实际数据严重不符,会导致索引失效。 ``` show index from out_crm_user_day ``` 分析表其实就是让上图中的cardinality比较准确 ## 2.2.检查表check table 数据库经常可能遇到错误,比如数据写入磁盘时发生错误,或是索引没有同步更新,或者数据库未关闭mysql就停止了。遇到这些情况,数据库有可能发生错误: ``` incorrect key file for table:''. try to repair it ``` 此时我们可以使用 check table来检查表及其对应的索引, check table语句能够检查InnoDB和MyISAM类型的表,对于MyISAM类型的表,check table语句还会更新关键字统计信息,而且check table也可以检查视图的错误,比如在视图中定义的表不存在了 ``` check table table_name [,table_name] [option] ``` option={quick | fast | medium | extended | changed } quick: 不扫描行,不检查错误的连接 fast: 只检查没有正确关闭的表 changed: 只检查上次检查后的被更改的表和没有正确关闭的表 medium: 扫描行,以验证被删除的连接是有效的,也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。 extended: 对每行的所有关键字进行一个全面的关键字查找,可以确保表是100%一致的,但花费时间较长。 注意: option 只对MyISAM类型表有效,对InnoDB表无效,而且check table在执行过程中也会给表添加只读锁 ## 2.3.优化表 optimize table mysql使用optimize table 语句来优化表,该语句对InnoDB和MyISAM类型的表都有效,但是该语句只能优化表中的varchar, blob或text类型的字段 ``` optimize [local | no_write_to_binlog] table table_name ``` local是 no_write_to_binlog的同义词,意思是不写入二进制日志,该操作也会读表添加只读锁。 注意: 一个表使用了text或者blob类型的数据,如果已经删除了表的一大部分,或者对函可变长度的表进行了更新,则应使用 optimize table指令来从新利用未使用的空间,并整理数据文件碎片,在多少设置中,根本不需要运行该指令,即使对可变长度进行了大量的更新,也不需要经常运行,每周 或每月运行一次即可,并且只对需要的表进行优化即可 ``` root@localhost : barrel107:20:28> OPTIMIZE TABLE alarm_record; +----------------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +----------------------+----------+----------+-------------------------------------------------------------------+ | barrel1.alarm_record | optimize | note | Table does not support optimize, doing recreate + analyze instead | | barrel1.alarm_record | optimize | status | OK | +----------------------+----------+----------+-------------------------------------------------------------------+ 2 rows in set (1.92 sec) root@localhost : barrel107:20:42> ``` # 3.InnoDB引擎 InnoDB是一个事务型的存储引擎,支持回滚,设计目标是处理大数量数据时提供高性能的服务,它在运行时会在内存中建立缓冲池,用于缓冲数据和索引。 InnoDB引擎优点 1. 支持事务处理、ACID事务特性; 2. 实现了SQL标准的四种隔离级别; 3. 支持行级锁和外键约束; 4. 可以利用事务日志进行数据恢复。 5. 锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大。 6. 索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。 InnoDB引擎缺点 因为它没有保存表的行数,当使用COUNT统计时会扫描全表。 MyISAM引擎优点 1. 高性能读取; 2. 因为它保存了表的行数,当使用COUNT统计时不会扫描全表; # 4.MyISAM引擎 MyISAM 是 MySQL 5.5.5 之前的默认引擎,它的设计目标是快速读取。 MyISAM引擎优点 1. 高性能读取; 2. 因为它保存了表的行数,当使用COUNT统计时不会扫描全表; MyISAM引擎缺点 1. 锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。 2. 此引擎不支持事务,也不支持外键。 3. INSERT和UPDATE操作需要锁定整个表; 4. 它存储表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。 适用场景 MyISAM适合:(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。 InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。
Seven
Nov. 9, 2022, 7:33 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password