MySQL常见问题和应用技巧

前言

在MySQL日常开发或者是维护中,有一些问题或是故障往往是难以避免的,如丢失密码、表损坏。在此总结一下常见的问题,以备今后所需。

忘记MySQL的root密码

解决办法:

1.登录数据库所在服务器,手动kill掉Mysql进程

关闭进程的命令为:kill 进程号(linux下)

关闭进程的命令为:taskkill 进程号(win下)

怎么查看进程号呢?

我们都知道MySQL的进程号一般都会保存在Mysql数据目录下的,它记录了Mysql的服务进程号。文件名为hostname.pid,如下,其中YEGZT8JOIIU2LKY为主机名。

linux下查看进程通过使用ps命令;在win下,我们也可以通过tasklist查看进程号,

打开该文件,可以看到,里面仅仅记录着进程好

现在为了方便,我主要演示win下操作,不准备打开虚拟机在测试了。如果我们不熟悉taskkill命令,可以通过taskkill /?来查看命令。

2.使用–skip-grant-tables选项重启MySQL服务

linux下

语法:./bin/mysqld_safe –skip-grant-tables

其中–skip-grant-tables选项代表启动mysql

(注意win下安装的Mysql,我使用mysqld –skip-grant-tables )

3.使用空密码的root用户连接MySQL,并修改root口令

修改如下

因为使用–skip-grant-tables启动,故使用set password命令失败。

使用update语句,直接更新mysql数据库中user表。

4.更新权限

5.重新登录

退出后,发现在此使用mysql -uroot登录,会登陆不成功,只能使用密码登陆。

处理MyISAM存储引擎的表损坏

在使用MySQL,可能会遇到过MyISAM存储引擎的表损坏的情况。如以下情况:

  • .frm被锁定不能修改
  • 找不到.myi文件(索引文件)
  • 我呢间意外结束
  • 记录文件被毁坏
  • 从表处理器得到错误nnn

    解决办法1

    使用MySQL自带的myisamchk工具进行修复

    打开bin目录,可以看到该工具

    命令如下

    myisamchk -r tablename

    r代表recover

    myisamchk -o tablename

    -o参数代表–safe-recover 可以进行更安全的修复

    解决办法2

    使用MySQL的CHECK table和repair table命令进行修复

    check table用来检查表是否有损坏,repair table用来对坏表进行修复。

MyISAM表过大,无法访问问题

首先我们可以通过myisamchk命令来查看MyISAM表的情况。如下图,我查看admin表

datefile length代表当前文件大小

keyfile length代表索引文件大小

max datefile length 最大文件大小

max keyfile length 最大索引大小

可以通过如下命令来进行扩展数据文件大小

alter table table_name MAX_ROWS=88888888 AVG_ROW_LE=66666

数据目录磁盘空间不足的问题

针对MyISAM存储引擎

可以将数据目录和索引目录存储到不同的磁盘空间。

针对InnoDB存储引擎

对于InnoDB存储引擎的表,因为数据文件和索引文件时存放在一起的。所以无法将他们分离。当磁盘空间出现不足时候,可以增加一个新的数据文件,这个文件放在有充足空间的磁盘上。具体实现是通过InnoDB_data_file_path中增加此文件。

innodb_data_file_path=/home/mysql/data:10000M;/user/mysql/data:10000M:autoextend

参数修改之后,需要重启服务器,才可以生效。

同一台主机上安装多个Mysql

除了每个Mysql安装目录不能相同外,还需要的是port和socket不能一样。

mysql.sock就是客户端连接与mysql间通信用的。socket文件,只能本机使用,远程连接要通过tcp/ip了。

总结

时隔一个月了,方将《MySQL数据库开发、优化与管理维护》阅读完。感觉这本书还是相当不错的,挺适合像我这样的初学者。在阅读过程中,感觉受益颇多。

时间: 2024-12-19 18:53:01

MySQL常见问题和应用技巧的相关文章

101个MySQL的调优技巧(1)

MySQL是一个功能强大的开源数据库. 随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限. 这里是101条调节和优化MySQL安装的技巧. 一些技巧是针对特定的安装环境的,但这些思路是通用的. 我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧. MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中--在内存中访问文件时的速度要比在硬盘中访问时快的多. 2. 不惜一切代价避免使用Swap交换分区 – 交换时是

mysql常见问题集锦

首先你应该试着找出问题mysqld守护进程是否死掉或你的问题是否与你的客户有关.你可以用mysqladmin version检查你的mysqld服务器正常执行了多长时间,如果mysqld死了,你可以在文件“mysql-data- directory/’hostname’.err”中找到其原因. 使用MySQL时的一些常见错误 MySQL server has gone away 常见的原因是服务器超时了并且关闭了连接.缺省地,如果没有事情发生,服务器在 8个小时后关闭连接.你可在启动mysqld

mysql最好的优化技巧

mysql最好的优化技巧 发表于 2012-04-12 - 浏览:979 评论:0 收藏 0 1.选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小.例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可

mysql写Shell小技巧

今天终于在表哥的帮助下解决了文件导入/出这个问题了.(很菜逼的一个问题),然后将最近看到的文章都自己测试了下,顺便奉上记录.1.Mysql数据库支持union的时候写文件小技巧: 采用常规的union写入,可以看到前面的字段占位数肯定也会被写入,替换成null也是一样的结果,这个对于写shell没啥大碍,但是如果用来写bat,mof,vbs等文件就会出问题了,那么怎么去掉这个只写入我们需要的内容呢?采用hex编码就好了. 将我们要写入的内容使用hex编码在分段写在每个字段位上,这样就可以只写入我

MySQL十大优化技巧详解

1.优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高速查询缓存.让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一.当同一个查询被执行多次时,如果结果是从缓存中提取,那是相当快的. 但主要的问题是,它是那么容易被隐藏起来以至于我们大多数程序员会忽略它.在有些处理任务中,我们实际上是可以阻止查询缓存工作的. // query cache does NOT work $r = mysql_query("SELECT username FROM user WHERE signu

【转】101个MySQL调试和优化技巧

MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思路是通用的.我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧. MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多. 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读

NHibernate+MySql常见问题

版本: NHibernate :NHibernate 4.0.1GA MySql:MySql 5.0.1 常见问题一: "NHibernate.HibernateException"类型的未经处理的异常在 NHibernate.dll 中发生 其他信息: Could not create the driver from NHibernate.Driver.MySqlDataDriver. 解决方案: 把MySql.Data.dll程序集引入到项目中,这个问题就解决了.原因在于找不到驱动

MySQL常见问题概览

最近看了江承尧老师的<MySQL技术内幕:sql编程>,同时结合自己工作中遇到的一些问题,从工程性能以及MySQL本身实际应用出发,总结了一些通过子查询解决的常见问题 1  行号 MySQL数据库在行号方面的支持并不是十分友好,没有像其他数据库一样提供类似row_number解决方案 demo1:select  empid ,(select count(1) from sales AS t2 where  t2.empid<=t1.empid) as rownum from salas

MySQL False注入及技巧总结

0x01 False Injection 引子 首先我们常见的注入 1=1 0<1 ''='' 这些都是基于1=1这样的值得比较的普通注入,下面来说说关于False注入,利用False我们可以绕过一些特定的WAF以及一些未来不确定的因素,其中有些姿势之前了解但是没有去深入,这次做一个归纳总结. 首先抛出这么一个问题 为什么username=0会导致返回数据呢? 这就是一个基于false注入的例子,下面在举一个例子 和上面是同一个表,但是为什么这里只返回了两组数据呢?说到这里不得不说一说有关于MY