mysql失效怎么解决,mysql服务无效

mysql服务器无效怎么解决

1.遇到这个问题先不要重新安装MySQL数据库,解决方法需要清理下WIndows的缓存目录就可以了。

创新互联是一家专业从事成都网站制作、做网站、外贸营销网站建设的网络公司。作为专业的建站公司,创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、全网整合营销推广及网站设计开发服务!

2.按“windows键+R”打开运行对话框,输入命令“cmd”,回车打开DOS窗口。

3.输入“del c:windowstemp*.* /s /q”,等待文件删除完,MySQL自然会恢复正常。

二,配置文件配置错误(mysql启动错误1067的解决 )

问题一

删除%windows%/my.ini 删除其它地方的my.ini 在mysql安装目录下把my-small.ini复制为my.ini 在my.ini

最后一行插入: CODE: [mysqld] #设置basedir指向mysql的安装路径

basedir=C:mysql-5.1.11-beta-win32 datadir=C:mysql-5.1.11-beta-win32data

重新启动。。。

C:mysql-5.1.11-beta-win32innet start mysql MySQL

服务正在启动 . MySQL 服务无法启动。 系统出错。

发生系统错误 1067。 进程意外终止。

C:mysql-5.1.11-beta-win32inmysqld-nt --remove Service successfully removed.

C:mysql-5.1.11-beta-win32inmysqld-nt --install Service successfully installed.

C:mysql-5.1.11-beta-win32innet start mysql MySQL 服务正在启动 . MySQL 服务已经启动成功。 C:mysql-5.1.11-beta-win32innet stop mysql MySQL 服务正在停止.. MySQL 服务已成功停止。

问题二

Mysql装好后,重启电脑第二次发现服务无法启动。提示如下:

------------------------

MySQL 服务无法启动。

系统出错。

发生系统错误 1067。

进程意外终止。

------------------

查看了F:ProgramDataMySQLMySQL Server 5.5data 这个目录中的错误日志,显示如下内容:

130825 20:47:50 [Note] Plugin 'FEDERATED' is disabled.

130825 20:47:50 InnoDB: The InnoDB memory heap is disabled

130825 20:47:50 InnoDB: Mutexes and rw_locks use Windows interlocked functions

130825 20:47:50 InnoDB: Compressed tables use zlib 1.2.3

130825 20:47:50 InnoDB: Error: unable to create temporary file; errno: 2

130825 20:47:50 [ERROR] Plugin 'InnoDB' init function returned error.

130825 20:47:50 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

130825 20:47:50 [ERROR] Unknown/unsupported storage engine: INNODB

130825 20:47:50 [ERROR] Aborting

其中核心提示是这句,临时文件无法创建:

130825 20:47:50 InnoDB: Error: unable to create temporary file; errno: 2

因此查看my.ini

[mysqld]区段内加入:

#自己指定的临时文件目录

tmpdir="临时目录"

mysql order by无效问题

1,发现mysql查询时,某个字段order by排序比较乱,并不是按照我写的sql排序方式

2,事实是按照第一位数字排序,如下图所示:

3,查看val字段类型,发现val是varchar类型的。虽然值是数字,但mysql排序是按照设置的字段类型来排序的,varchar就会自动按照字符串第一位排序。

4,解决办法:1,把字段类型修改为int。2,或者在使用sql查询的时候,使用cast(val as UNSIGNED INTEGER)来转换一下类型。

Mysql高级(五) 索引失效

1.全值匹配

2.最佳左前缀法则

3.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

4.存储引擎不能使用索引中范围条件右边的列

5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一直)),减少select *

6.mysql在使用不等于(!=或者)的时候无法使用索引会导致全表扫描

7.is null, is not null也无法使用索引

8.like以通配符开头(‘%abc...’)mysql索引失效会变成全表扫描的操作

9.字符串不加单引号索引失效

10.少用or,用它来连接时索引会失效

mysql 避免索引失效

where条件==order by 条件==group by 条件 按顺序遵守 最佳左前缀法则

假设创建了复合索引:a,b,c

不在索引列上做任何的操作(计算、函数、显式或隐式的类型转换),否则会导致索引失效而转向全表扫描

1、字符不加单引号会导致索引失效

name字段为varchar类型

这条sql发生了隐式的类型转换:数值==字符串。所以导致了全表扫描,索引失效

应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

mysql中的范围条件有:in/not in、 like、 、BETWEEN AND ;

后面的索引失效

in会导致索引全部失效!!!

BETWEEN AND 范围条件不会导致索引失效!!!

尽量让索引列和查询列一致;减少select * 的使用

1、查询表结构

2、查询表的索引结构

联合索引:name,age,post;说明add_time字段没有添加索引

3、查看select * 的执行计划

4、查看 select name,age,pos的执行计划

5、如果select只用一部分索引

like以通配符开头(’%abc…’)mysql索引失效会变成全表扫描的操作。

解决:可以使用 覆盖索引 来解决这个问题!

1、先查看表上的索引

id、name、age、pos 四个字段上都有索引; 注意:name是联合索引中的第一个,带头大哥!

2、查看表结构

有个add_time字段没有用到索引

3、查看执行计划

使用UNION ALL

假设创建了联合索引 x(a,b,c)

ps:like虽然也是范围查询但是区别于、,%用在最前面就只用到索引a了;%用在最后面可以用到a+b+c!

下面的sql几乎违背了上面的所有原则,索引依然全部生效。因为select是索引覆盖的,select里不包含没有建立索引的字段。因此总是用到索引的。可以看出来索引覆盖在sql优化中的作用性

mysql 索引失效总结

首先我们还是先把表结构说下:用户表tb_user结构如下:

1、 不要在索引列上进行运算操作, 索引将失效。

手机号phone字段有唯一索引,当根据phone字段进行函数运算操作之后,索引失效:

2、 字符串类型字段使用时,不加引号,索引将失效。

如果字符串不加单引号,对于查询结果,没什么影响,但是数 据库存在隐式类型转换,索引将失效。

3、 如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

接下来,我们来看一下这三条SQL语句的执行效果,查看一下其执行计划:

由于下面查询语句中,都是根据profession(专业)字段查询,profession字段是一个普通的索引, 我们主要看一下,模糊查询时,%加在关键字之前,和加在关键字之后的影响。

经过上述的测试,我们发现,在like模糊查询中,在关键字后面加%,索引可以生效。而如果在关键字 前面加了%,索引将会失效。

4、 用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会 被用到。

由于age没有索引,所以即使id有索引,索引也会失效。所以需要针对于age也要建立索引。

5、 数据分布影响:如果MySQL评估使用索引比全表更慢,则不使用索引。

mysql utf8_encoding无效解决方案

服务器端

修改数据库配置文件/etc/my.cnf

character-set-server=utf8mb4

collation_server=utf8mb4_unicode_ci

重启MySQL(按照官方文档,这两个选项都是可以动态设置的,但是实际的经验是Server必须重启一下)

已有的表修改编码为utf8mb4

ALTER TABLE

tbl_name

CONVERT TO CHARACTER SET

charset_name;

使用下面这个语句只是修改了表的default编码

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

客户端

jdbc的连接字符串不支持utf8mb4,这个 这种方式 来解决的,如果服务器端设置了character_set_server=utf8mb4,则客户端会自动将传过去的utf-8视作utf8mb4。

Connector/J did not support utf8mb4 for servers 5.5.2 and newer.

Connector/J now auto-detects servers configured with character_set_server=utf8mb4 or treats the Java encoding utf-8 passed using characterEncoding=... as utf8mb4 in the SET NAMES= calls it makes when establishing the connection. (Bug #54175)

其他的client端,比如php、python需要看下client是否支持,如果不能在连接字符串中指定的话,可以在获取连接之后,执行”set names utf8mb4″来解决这个问题;

因为utf8mb4是utf8的超集,理论上即使client修改字符集为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。


分享名称:mysql失效怎么解决,mysql服务无效
URL标题:http://hbruida.cn/article/hecced.html