Skip to content

Mysql数据库报错修复方法总结

2014-01-07 22:58:52   来源:华军科技数据恢复

MySQL数据库

        一般在数据库在突然断电,强行关闭数据库软件,存储过程异常等等情况下,数据库很容易出现报错,也是计算机维护员很头疼的事。今天笔者同大家分享关于Mysql数据库报错故障和数据库修复的方法总结。

1. phpMyAdmin连接mysql出现错误

使用phpMyAdmin 连接MySql数据库时出现如下错误:#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
错误原因:原因是因为你使用的mysql服务器版本中使用了新的密码验证机制,这需要客户端的版本要在4.0以上,原来的密码函数被改为old_password ();,这样使用Password()生成的密码在旧的版本上的客户端就不好使了,而PHP中的MYSQL客户端都是3.23的(当然,mysqli的扩展除外),问题就在这了。这种问题只在Mysql 4.1.x以上的版本才会出现的。
修复办法:a) 升级mysql  客户端的版本;b) 也可以在服务器上用old_password函数,将用户的密码重新设置一下,具体的方法是:mysql>set password for 'root'@'localhost'=old_password('123');   然后就可以用旧版本的客户端来连接了。
 
2. mysql 启动指定my.cnf文件路径
 
要使用指定的my.cnf文件,而不用默认的/etc/my.cnf文件,可以在启动时,在mysqld_safe 后加上参数--defaults-file=/usr/local/server/mysql2/etc/my.cnf,但是要注意的是,主参数必需紧接着mysqld_safe 后面,如果做第二个以后的参数加入时,则会出现如下错误:/usr/local/server/mysql/libexec/mysqld: unknown variable 'defaults-file=/usr/local/server/mysql2/etc/my.cnf' 且服务器启不来。
 
3. 当启动innodb错误
 
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
100204 15:24:39 [ERROR] Plugin 'InnoDB' init function returned error.
出现这个错误的原因是$datadir下的ibdata1和ib_logfile*文件的大小与my.cnf指定的大小不一至造的,可以将这几个文件删除掉,然后重启mysql,让其重新生成这些文件。
 
4. mysql建立,查看和删除自定义函数
 
查看:SHOW FUNCTION STATUS;可以列出某个数据库所弄有的自定义函数   show create function 函数名; 查出自定义函数的内容;
建立:set global log_bin_trust_function_creators=1  设置上述的变量值为1,否则在建立时会出现如下错误:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
   这是因为我们启用了bin-log日志的的原因
   Delimiter $$设置语句的分隔符,也就是一个语句的结束符,因为默认情况下,mysql 的语句结束符是; 而我们在建立自定义函数,可能要使用这个;号,所以我们需要将分隔符换成其它们的。,这里换成$$ CREATE DEFINER=`root`@`` FUNCTION `sseq`(seq_name VARCHAR(50)) RETURNS int(11) BEGIN DECLARE value INTEGER; SET value = 0; SELECT current_value INTO value FROM sequence WHERE name = seq_name; RETURN value; END $$ ,建立一个自定义的函数 sseq
执行:要执行上述函数,可以使用下列方法 select sseq('poi_seq');
删除:drop function sseq ;
 
5. mysql建立,查看和删除过程
 
建立:delimiter $$
create procedure insert_last(out cnt int) 
begin 
declare maxid int; 
select max(id)+1 into maxid from account; 
insert into account(id,name) values(maxid,'hello'); 
select count(id) into cnt from account; 
END$$
查看:show procedure status ;
show create procedure insert_last;
执行: call insert_last(@a)
删除: drop procedure insert_last;
 
6. 当出现ERROR 1449错误
 
现象:当在系统中执行查询时,特别是执行自定义函数或过程时,出现如下错误:ERROR 1449 (HY000): The user specified as a definer ('root'@'') does not exist
原因:系统中不存在root@用户,而执行上述命令时,使用的刚好是root@用户,所以就报上述错误;
修复:执行下列语句,建立对应的用户即可: grant all on *.* to root@% identified by 'admin8*';
 
7. mysql 指定监听指定的IP地址
 
默认的情况,mysql 在启动时会监听本机的所有的IP地址的3306端口,当为满足某些要求时,可以指定mysql 在启动时监听指的IP,方法是:在my.cnf文件里的mysqld段里添加bind-address    = 122.224.72.119,这样就可以只监听指定的一个IP了。目前mysql 还不能做做监听多个指定的IP 地址 
 
8. 关于mysql的版本号
 
以下是关于mysql版本号的含义,例如mysql-5.1.42版本的,其中5 :表示主版本号和文件格式。所有mysql 5系列的都具有相同的文件格式;第二个数字1:表示发布的版本号。主版本号和发布版本号联合起来组成发布序列号;第三个数字42:表示某个发布序列里的版本号。这个版本号会随着每次版本的发布而增加。通常应该选择序列里的最近的版本进行使用。每次较小的更新,版本序列号中的最后一个数字会增加。当有大的新特性或者更新内容与前面一个版本不兼容时,第二个数字会增加的。而当文件格式改变的时候,第一个数字会增加的。
   版本名称中还可能包含一个后缀来表示发布版本的稳定性的。在发布的系列版本中有一套后缀来表示稳定性改进,这些后缀包括:
Alpha:表示这个版本仅是一个演示版本。已知的bug已经被记录了。大多数的alpha版本都添加了新的命令和扩展。
Beta:表示这个版本可以用在开发环境中。在测试版中,特性和兼容性问题可能已经被解决了,但是测试版本中可能会存未标识的bug。且这个版本中的所有API,扩展的结构,SQL语法在beta版本的后续版本中都不会被改变。
Rc: 表示待发行版。待发行版确信是稳定的版本,而且在MySQL内部进行的测试都通过了,同时,所有已知的运行期的重大Bug都被修正了。然而,这个版本并没有经过长期大范围的使用,以确认所有的bug都被标识了。
没有任何后缀:表示这个版本是通用版本(GA)或者产品版本。GA版是稳定的版本,并且成功的进行前面几个版本的过程,而且确信是可靠的,没有紧急的bug,同时适合应用于生产环境中。
 
9. 关于mysql编译与性能的关系
 
1. 在linux平台上,如果编译成动态连接的(即没有使用-static选项),那么要慢13%。但是要注意:为满足客户应用的需要,可能还是需要编译动态连接的;
2. 对于服务器和客户端在同一台机器上的连接,如果使用TCP/IP连接要比使用socket连接性能低7.5%(在unix平台上,如果连接的主机名用localhost,MySQL默认使用socket文件来连接);
3. 如果使用TCP/IP连接,客户端和服务器端不在同一台机器上要比在同一台机器上慢8%-10%,即使用网卡的速度高于100Mb/s;
4. 使用安全连接(所有数据使用内部SSL支持的加密)性能要比非安全连接低55%;
5. 在Sun UltraSPARC 平台上,使用Forte5.0来编译要比使用gcc3.2编译后的快4%;
6. 在Sun UltraSPARC平台上,使用Forte5.0编译成32模式要比编译成64模式快4%;
7. 在Linux X86平台上,使用不带gcc的框架指针(即不使用-fomit-frame-pointer 或 –fomit-frame-pointer –ffixed-ebp),将会使用mysqld快1%-4%;
 
10. 设置最大连接数
 
1)入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查max_connections=100 修改为 max_connections=1000 服务里重起MYSQL即可;
2)MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword设置新的最大连接数为200:mysql> set GLOBAL max_connections=200
 
        以上是关于常见Mysql数据库报错故障和数据库修复的方法总结,希望对网友有点帮助!
Back To Top
Search