MySql常见报错记录 && 解决方案

# ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that correspond

语法由于Mysql版本不匹配造成的

**出现情况:修改mysql密码的时候用的

1
update user set password=password("123456") where user="root";

解决方案:**

5.6版本

1
update mysql.user set password=password('123456') where User="root" and Host = "localhost"; set password for root@localhost = password('123456');

5.7版本

1
2
update mysql.user set authentication_string=password('123456') 
where User="root" and Host="localhost";

8.0版本

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

最后:flush privileges;

ERROR 1396 (HY000): Operation DROP USER failed

  1. 检查删除的用户名称host作用域是否正确
  2. 尝试再次删除

ERROR 2003 (HY000): Can’t connect to MySQL server

  1. 检查目标主机是否可以连接
  2. 检查MySql服务器防火墙是否放行端口
  3. 检查MySql配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-addree是否关闭

# message from server: “Host is not allowed to connect to this MySQL server”

查看自己数据库的访问权限:

1
2
use mysql;
select host,user from mysql.user;

查看host的权限是否是’%’(任意地方可以访问)
不是就执行:update user set host = '%' where user = 'root';
刷新:FLUSH RIVILEGES
再次尝试登陆:mysql -u root -p

设置权限错误 — 解决

新版MySQL8.0.12中,添加用户并设定权限

MySQL8.0之前在添加用户的时候可以直接设置用户权限如:

1
GRANT ALL ON *.* TO `zqj`@`ip` IDENTIFIED BY 'passowrd' WITH GRANT OPTION;

但是在新版MySQL中这样就会报错,必须分开开,先创建用户,然后才能设置权限如下:

1
CREATE USER `zqj`@`ip` IDENTIFIED BY 'zqj' [PASSWORD EXPIRE INTERVAL 90 DAY];GRANT ALL ON *.* TO `zqj`@`127.0.0.1` WITH GRANT OPTION;

解决:

  1. 创建新用户
1
CREATE USER 'user1'@'%' IDENTIFIED BY '07fa533360d9'; 如CREATE USER 'yunwei01'@'%' IDENTIFIED BY 'yunwei01';

‘%’ - 所有情况都能访问 ‘localhost’ - 本机才能访问 ‘111.222.33.44’ - 指定 ip 才能访问

注:修改密码

1
update mysql.user set password=password('新密码') where user='user1';
  1. 给该用户添加权限
1
grant all privileges on 想授权的数据库.* to 'user1'@'%';如:GRANT all PRIVILEGES on zldc.* to 'yunwei01'@'%'; flush privileges;

Packet for query is too large (5,526,600 > 65,535). You can change this value on the server by setting the ‘max_allowed_packet’ variable.

MySQL :: MySQL 8.0 参考手册 :: B.3.2.8 数据包太大
mysql - How to change max_allowed_packet size - Stack Overflow

通信数据包是发送到 MySQL 服务器、发送到客户端的单行或 从复制源服务器发送到 复制品。

可以传输到或从中传输的最大数据包 MySQL 8.0服务器或客户端为1GB。

当 MySQL 客户端或 mysqld 服务器 接收大于 max_allowed_packet 字节的数据包,它 发出ER_NET_PACKET_TOO_LARGE错误 并关闭连接。对于某些客户,您可能还会得到 如果通信数据包太错误 大。Lost connection to MySQL server during query

客户端和服务器都有自己的max_allowed_packet变量, 所以如果你想处理大数据包,你必须增加这个 变量在客户端和服务器中。

如果您使用的是 mysql 客户端程序, 其默认max_allowed_packet变量 为 16MB。要设置更大的值,请像这样启动 mysql

1
$> mysql --max_allowed_packet=32M

这会将数据包大小设置为 32MB。

服务器的默认max_allowed_packet值为 64MB. 如果服务器需要处理大 查询(例如,如果您正在使用大型 BLOB 列)。例如,到 将变量设置为 128MB,像这样启动服务器:

1
$> mysqld --max_allowed_packet=128M

您还可以使用选项文件来设置max_allowed_packet。为 例如,要将服务器的大小设置为 128MB,请添加 选项文件中的以下行:

1
2
[mysqld]
max_allowed_packet=128M

增加此变量的值是安全的,因为 仅在需要时分配额外的内存。例如,mysqld 仅在以下情况下分配更多内存 发出长查询或当 mysqld 必须时 返回一个大的结果行。的较小默认值 变量是捕获错误数据包的预防措施 客户端和服务器,还要确保你不运行 意外使用大数据包导致内存不足。

如果您遇到大数据包的奇怪问题,如果您 正在使用较大的 BLOB 值,但 没有给 mysqld 足够的访问权限 用于处理查询的内存。如果您怀疑是这种情况, 尝试将 ulimit -d 256000 添加到 mysqld_safe脚本的开头和 重新启动 Mysqld