MYSQL常见错误及其解决方式

时间:2022-04-25
本文章向大家介绍MYSQL常见错误及其解决方式,主要内容包括ERROR 1130: Host 10.0.0.1 is not allowed to connect to this MySQL server、ERROR 1044 (42000):Access denied for user、Error: 1265 SQLSTATE: 01000 (WARN_DATA_TRUNCATED、error while loading shared libraries: libtinfo.so.5、No curses/termcap library found、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

ERROR 1130: Host 10.0.0.1 is not allowed to connect to this MySQL server

在用远程连接MySQL服务器的数据库,不管怎么弄都是连接不到,错误代码是1130,ERROR 1130: Host 10.0.0.1 is not allowed to connect to this MySQL server 猜想是无法给远程连接的用户权限问题。结果这样子操作MySQL库,即可解决。在本机登入MySQL后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称'%'。

mysql -u root -p
use mysql; 
select `Host`, `User` from `user` where `User` = 'root';
update user set host = '%' where user ='root'; 
flush privileges; 
select `Host`, `User` from `user` where `User` = 'root';

第一句是以权限用户root登录;第二句:选择mysql库;第三句:查看mysql库中的user表的host值;第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址;第五句:刷新MySQL的系统权限相关表;第六句:再重新查看user表时。重启mysql服务即可完成。

ERROR 1044 (42000):Access denied for user

这个问题主要是因为授权用户本身的权限不足引起的。我们以root用户为例,需要注意到地方有以下几个方面:

  • MySQL的user表很重要。必须保证root用户在user表里面有两条记录,也就是 root localhost …….. root 127.0.0.1 …….
  • 保证root用户拥有所有权限,也就是user表里面的所有字段里面对应的内容是Y
  • 在my.ini后者my.cnf里面有这个配置项的时候 bind-address=localhost 启用这个配置项可以保证安全

Error: 1265 SQLSTATE: 01000 (WARN_DATA_TRUNCATED

  • 字符长度太短;
  • 乱码,更改统一的字符类型,比如更改字符类型为utf8;
  • 如果是 Enum,则可能是添加的字符不在enum类型范围内;
  • 另一可能是在alter table更改列设置时,影响原来存入的值,这时可将原值update为需要的类型值或删除这些原值再alter table

error while loading shared libraries: libtinfo.so.5

ncurses包(ncurses-libs-5.6)已经安装,运行mysql时仍然提示:

mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

此时只需要创建软连接即可,创建命令如下:

ln -s /usr/lib/libncurses.so.5 /lib/libtinfo.so.5

其中libncurses.so.5到底在哪个目录,不同的OS可能有所不同(比如SUSE X64就是在/lib64目录下),可以尝试使用ldd mysql命令查看mysql依赖的其它库在哪个目录,然后在对应目录查找是否有libncurses.so.5

No curses/termcap library found

源码安装MySQL 5.1.30,在./configure阶段报错如下:

checking for tgetent in -lncurses... no
checking for tgetent in -lcurses... no
checking for tgetent in -ltermcap... no
checking for tgetent in -ltinfo... no
checking for termcap functions library... configure: error: No curses/termcap library found

原因是缺少ncurses的相关库,按照下面方式安装ncurses即可:

# RedHat系列
yum list|grep ncurses
yum -y install ncurses-devel
yum install ncurses-devel

# Debian系列
apt-cache search ncurses
apt-get install libncurses5-dev