mysql报错集_Mysql报错合集

Mysql报错合集

一.链接报错

客户端连接mysql出错

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

解答:

因为开启了使用sock的登陆

mysql -u root --socket=/ops/data/mysql/mysqld.sock -p

链接客户端出错

ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)

账号密码正确的,但是你用了localhost登陆,记录中test没有配置localhost的,所以要在mysql中创建一个 test@'localhost'的账户

ERROR 1045 (28000): Access denied for user 'maxscale'@'web1' (using password: YES)

这次是提示用web1登陆的,因为我加-h然后ip,就要在mysql中创建一个 test@'web1'的账户

交互登陆mysql出现warning警告Using a password

Warning: Using a password on the command line interface can be insecure.

解答:

使用

mysql_config_editor set --login-path=local --host=192.168.1.190 --user=zabbix --password

然后输入zabbix用户的密码

登陆时使用:

mysql --login-path=local -e "show databases;"

有sockfang方式登陆使用:

mysql --login-path=local --socket=/ops/data/mysql/mysqld.sock -e "show databases;"

删除

mysql_config_editor remove --login-path=remote

mysql_config_editor print --all

导入数据到数据库报错ERROR 1050

ERROR 1050 (42S01) at line 1: Table 'users' already exists

解答:

导入的数据在数据库中存在了,有可能是重复导入。

登陆数据库提示-bash: !@: event not found

-bash: !@: event not found

解答:

密码中带 !@ 需要 -p'123!@' 就好了

ACCess Denied for user(using password:YES)

解答:

没有你所输入的账户,可以跳过密码验证后创建一个账户再登陆

5.登陆mysql

Access denied for user 'qpolar'@'localhost' (using password: YES)

解答:

1.可能没这个用户,还有可能这个用户授权的是%,所以需要加 -h指定当前机器的ip

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

一种情况 mysql没启动

第二种 mysql连接默认为必须sock登陆,所以登陆需要添加--socket=xxx,或者更改/etc/my.cnf

Too many connections

这是因为mysql链接数太多了,使用mysql客户端命令或者图形化链接,一个就是一个链接数,如果有程序链接后没有关闭链接(close),将会导致占用一个连接数,大量的话将会沾满。不过会保留1个链接用于root登陆

用root登陆mysql后用如下命令查看,可以看到Command哪里有大量sleep,并且翻到最后,可以看到链接数有200多,已经满了。

show processlist

87800497fab04709bd532a6e6cc13cd3.png

这种情况下,全是sleep(没有任何操作,但是占用一个链接),那就在my.cnf中添加如下,设置链接10秒没有动作将清理掉。

wait_timeout=10

如果不是大量sleep,而是正常的Query,那就证明连接数不够了

8523c55f92c68803317450bbf596c868.png

在my.cnf中添加如下,扩大链接数,不过最大也就1.6万多

max_connections=10000

Starting MySQL... ERROR! The server quit without updating PID file (/ops/logs/mysql/mysql.pid).

问题:

描述是mysql在没更新pid文件的情况下异常退出。意思是mysql异常退出了,并没有启动进程

查看日志发现如下:

130216 16:11:33 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address

130216 16:11:33 [ERROR] Do you already have another mysqld server running on port: 3306 ?

130216 16:11:33 [ERROR] Aborting

意思是3306端口被占用,你可以netstat -unltp | grep :3306查看是否被占用。

如果没有呗占用,可以netstat -anptu | grep :3306,一把可以看到有进程还在使用3306端口链接中,这个应该是一个长链接,一直不释放

a42130e470930565df987ea3e837d117.png

可以看到后面显示时一个java程序再链接3306端口。pid号为12461,那就ps -aux | grep 12461,终止这个程序,不终止无法释放

停止程序后,过一会再netstat -anptu | grep :3306,就可以看到端口释放了,再启动mysql就行了

远程连接ERROR 2003 (HY000)

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.xxx.xxx' (113)

解答:

1.需要开放mysql为0.0.0.0,然后建立可远程账号%

2.查看/etc/my.cnf

注释bind_address=127.0.0.1或者skip_networking

3.

systemctl disable firewalld 开机不自启

systemctl stop firewalld 关闭防火墙

二.日志报错

ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

错误描述:MySQL开启GTID后不支持此类语法,原因是弱事务,ddl和dml放一起了,无法保证事务的原子性。

解决办法:(1)将gtid关闭。(2)create table select语句拆成create table t like t1;insert into t select * from t1;

ERROR 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

问题描述:max_binlog_cache_size配置值太小,导致更新失败。

解决办法:加大max_binlog_cache_size的配置,或者将隔离级别改成rr且将binlog format改成mixed。

如果是rc模式,mixed的话也会记录成row,原因是和gap lock有关,如果innodb_locks_unsafe_for_binlog参数设置为1就不会了(关闭gap lock,但是是read only属性,即要重启mysqld)

ERROR 1118 (42000): Row size too large (> 4030). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

问题描述:创建表异常,原因是char/varchar字段的总长度超过4030。

解决办法:关闭严谨的检查机制。set global innodb_strict_mode=0;但是不建议这么做,最好还是遵循提示建议,将char或者varchar改成text或者blog,或者将大字段拆解成独立表

从MySQL5.5.X版本开始,你可以开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里。

三.其它报错

二.使用select * from 表名 group 字段名时出现ERROR 1055

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userdb.stu_info.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

修改/etc/my.cnf

添加一项代码

sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"

重启服务 systemctl restart mysqld

忘记了密码怎么做

vim /etc/my.cnf

添加

skip-grant-tables=1

重启服务

systemctl restart mysqld

使用MySQL -uroot 回车登陆mysql。

导入提示data too long for column ..

修改字段类型大小(估计字段超了,建议调大一点;例子vartchar(48)改成varchar(100))

格式:alter table 表 modify 字段名 类型...

导出报错

可能没有w权限

chmod mysql /目录/

mysql关闭后启动失败

查看日志,

2016-01-20T10:00:19.935795Z 0 [ERROR] Can't start server: can't create PID file: No such file or directory

160120 18:00:20 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

这说明mysql想创建pid文件,但是没有权限 所以无法启动

Mysql binlog 安全删除

如果你的 Mysql 搭建了主从同步 , 或者数据库开启了 log-bin 日志 , 那么随着时间的推移 , 你的数据库 data 目录下会产生大量的日志文件。

mysql-bin.000001、mysql- bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志 文件中,还包括每个语句执行的时间,也会记录进去的

下面来介绍几种解决方法:

如果你的数据库没有搭建主从同步这样的服务 , binlog 日志也不用的情况下 , 你可以将 /etc/my.cnf 文件下面行删除或注释掉

log-bin=mysql-bin

binlog_format=mixed

如果你需要这样的文件 , 那么建议你在主配置文件 /etc/my.cnf 中添加如下行 , 来限制 binlog 日志文件存在时间 , 过期自动删除

expire_logs_days = 7 # 只保留 7 天的日志文件

如果你直接得到一台服务器 , 上面的 binlog 日志已经影响到了磁盘空间 , 那么你将使用下面命令清除(登录mysql上执行)

mysql> reset master; # 清空所有 binlog 文件

如果你的得到的服务器 , mysql 还做了主从同步 , 那么上面的命令就不适合你了 , 因为 binlog 文件删除过多的话 , 会导致数据不同步

mysql> show slave status; # 你首先要来 slave 上查看从库读 binlog 到 了哪里

Master_Log_File: mysql-bin.000009 # 我们可以看到是 mysql-bin.000009

mysql> purge master logs to 'mysql-bin.000009'; # 我们可以在 master 中执行这条指令 , 将 binlog 文件删除至 mysql-bin.000009 前

mysql> purge master logs before '2014-11-18 00:00:00'; # 将 binlog 文件删除至此日期前

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值