Mysql处理未被适当关闭的表的问题

每个MyISAM索引文件(.MYI)在头有一个计数器,它可以被用来检查一个表是否被恰当地关闭。如果你从CHECK TABLE或myisamchk得到下列警告,意味着这个计数器已经不同步了:

clients are using or haven't closed the table proPerly

这个警告并不是完全意味着表已被破坏,但你至少应该检查表。

计数器的工作方式如下:

· 表在MySQL中第一次被更新,索引文件头的计数器加一。

· 在未来的更新中,计数器不被改变。

· 当表的最后实例被关闭(因为一个操作FLUSH TABLE或因为在表缓冲区中没有空间)之时,若表已经在任何点被更新,则计数器减一。

· 当你修理或检查表并且发现表完好之时,计数器被重置为零。

· 要避免与其它可能检查表的进程进行事务的问题,若计数器为零,在关闭时计数器不减一。

换句话来说,计数器只有在下列情况会不同步:

· MyISAM表不随第一次发出的LOCK TABLES和FLUSH TABLES被复制。

· MySQL在一次更新和最后关闭之间崩溃(注意,表可能依然完好,因为MySQL总是在每个语句之间为每件事发出写操作)。

· 一个表被myisamchk --recover或myisamchk --update-state修改,同时被mysqld使用。

· 多个mysqld服务器正使用表,并且一个服务器在一个表上执行REPAIR TABLE或CHECK TABLE,同时该表也被另一个服务器使用。在这个结构中,使用CHECK TABLE是安全的,虽然你可能从其它服务器上得到警告。尽管如此,REPAIR TABLE应该被避免,因为当一个服务器用一个新的数据文件替代旧的之时,这并没有发送信号到其它服务器上。

总的来说,在多服务器之间分享一个数据目录是一个坏主意。

时间: 2024-11-02 03:27:54

Mysql处理未被适当关闭的表的问题的相关文章

mysql 查询慢-mysql 近5万条数据的表 使用联表查询 出现服务器CPU占用过多

问题描述 mysql 近5万条数据的表 使用联表查询 出现服务器CPU占用过多 mysql 近5万条数据的表 使用联表查询 出现服务器CPU占用过多,贴大神代码求优化指点!!!!!有两张表分别为:lu_yccdd 和 lu_taizhang使用的联表查询代码:SELECT distinct(t.sc_time) sc_timecount(distinct(y.id)) totalcount(distinct(t.cdd_id)) tjjg(count(distinct(y.id))-count(

mysql使用MRG_MyISAM(MERGE)实现水平分表

在MySql中数据的优化尤其是大数据量的优化是一门很大的学问,当然其它数据库也是如此,即使你不是DBA,做为一名程序员掌握一些基本的优化信息,也可以让你在自己的程序开发中受益匪浅.当然数据库的优化有很多的方方面面,本篇主要讲,Mysql的水平分表技术,也可以说是其技术的其中之一. 在使用水平分表时,首先问下自己几个问题. 第一.为什么要水平分表? 第二.什么时候需要水平分表? 第三.怎样实现水平分表? 一.为什么要水平分表? 简而言之,当单表数据量过大时,无法对其进行有效的维护,以及查询速度严重

求助mysql查询语句,实现三张表数据统计

问题描述 求助mysql查询语句,实现三张表数据统计 temp_instore . temp_outstore . temp_stock三张表,以temp_stock表数据为主,统计与mate_id.sd_price两个字段值在另外两张表中相等的记录,主要查询出mate_id.sd_price.(sd_quantity + os_quantity - is_quantity) as quantity 就是sd_price与os_price.is_price比较,三者相等按上述进行加减运算,若os

用的本地服务器wampserver,mysql确实已启动,数据库、表都建了,就是查不到任何数据!

问题描述 用的本地服务器wampserver,mysql确实已启动,数据库.表都建了,就是查不到任何数据! 这是怎么回事呢?用的本地服务器wampserver老是出现这种问题,mysql确实已启动,数据库.表都建了,就是查不到任何数据! 解决方案 看不出什么错,还是再检查一下数据库吧. 解决方案二: wampserver默认是不能用空密码链接的,所以第一步请给你的mysql设置密码,第二步,修改apache的http.conf文件,使它allow所有的链接方式!

mysql根据多个数据库的订单表统计用户数量

问题描述 mysql根据多个数据库的订单表统计用户数量 假设db_amazon.tbl_order,db_jd.tbl_order,db_taobao.tbl_order这三张表中都存在(date, user_id)这两个字段. 同一个用户在各个表中的user_id相同 每个用户每天下单数量不限,amazon.jd.taobao也任选 amazon.jd.taobao的日下单量假设在1000W级别 求教:从执行效率的角度,如何计算出今天下过单的用户一共有多少

ubuntu-mysqldump出的数据库sql文件在另一机器的mysql中source导入结果不一致,表丢失

问题描述 mysqldump出的数据库sql文件在另一机器的mysql中source导入结果不一致,表丢失 求指导.用mysqldump导出一张有128张表的数据库sql文件,在另一台机器的mysql中source导入,只剩下84张表.重复多次,也是同样的表丢失.请问这是什么原因啊?系统都是linux ubuntu14.04,mysql5.5 解决方案 没碰到过这样的问题,按理应该source以后是一致的.数据库是不是有什么配置问题 解决方案二: 还有一个现象是,我迁移到windows下的mys

MySQL入门教程(五)之表的创建、修改和删除_Mysql

MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成. 表是DB存储数据的基本单位,一个表包含若干个字段或记录.表的操作包括创建.修改和删除. 1.创建表 创建表即在已存在的数据库中创立新表.在使用USE语句选择具体数据库后,可以使用它SQL语句创建表 其中,属性名指表中字段的名称,数据类型即对应字段的数据类型,完整性约束条件指

MySQL 数据库的启动与关闭

    MySQL数据库服务器通常指的的是mysqld,而命令行mysql则是mysql客户端程序,这两个概念通常容易混淆.通常启动mysql服务器即是启动mysqld进程,mysqld启动后,可以通过mysql连接到mysql服务器.本文主要描述了mysql服务器的几种启动方式以及如何关闭mysql服务器.   1.直接使用mysqld启动   mysqld 即是mysql服务器,可以调用该命令直接启动mysql服务器  mysqld 从配置文件中读取[mysqld]以及[server]选项组

实现MySQL定时批量检查表repair和优化表optimize table的shell脚本_linux shell

本文介绍mysql定时批量检查表repair和优化表optimize table的shell脚本,对于MySQL数据库的定期维护相当有用!如下所示: #!/bin/bash host_name=192.168.0.123 user_name=jincon.com user_pwd=jincon.com database=my_db_name need_optmize_table=true tables=$(mysql -h$host_name -u$user_name -p$user_pwd $