MySql常见报错记录 && 解决方案
# ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that correspond
语法由于Mysql版本不匹配造成的
**出现情况:修改mysql密码的时候用的
update user set password=password("123456") where user="root"; |
解决方案:**
5.6版本
update mysql.user set password=password('123456') where User="root" and Host = "localhost"; set password for root@localhost = password('123456'); |
5.7版本
update mysql.user set authentication_string=password('123456') |
8.0版本
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; |
最后:flush privileges;
ERROR 1396 (HY000): Operation DROP USER failed
- 检查删除的用户名称和host作用域是否正确
- 尝试再次删除
ERROR 2003 (HY000): Can’t connect to MySQL server
- 检查目标主机是否可以连接
- 检查MySql服务器防火墙是否放行端口
- 检查MySql配置文件:
/etc/mysql/mysql.conf.d/mysqld.cnf
中的bind-addree
是否关闭
# message from server: “Host is not allowed to connect to this MySQL server”
查看自己数据库的访问权限:
use mysql; |
查看host的权限是否是’%’(任意地方可以访问)
不是就执行:update user set host = '%' where user = 'root';
刷新:FLUSH RIVILEGES
再次尝试登陆:mysql -u root -p
设置权限错误 — 解决
新版MySQL8.0.12中,添加用户并设定权限
MySQL8.0之前在添加用户的时候可以直接设置用户权限如:
GRANT ALL ON *.* TO `zqj`@`ip` IDENTIFIED BY 'passowrd' WITH GRANT OPTION; |
但是在新版MySQL中这样就会报错,必须分开开,先创建用户,然后才能设置权限如下:
CREATE USER `zqj`@`ip` IDENTIFIED BY 'zqj' [PASSWORD EXPIRE INTERVAL 90 DAY];GRANT ALL ON *.* TO `zqj`@`127.0.0.1` WITH GRANT OPTION; |
解决:
- 创建新用户
CREATE USER 'user1'@'%' IDENTIFIED BY '07fa533360d9'; 如CREATE USER 'yunwei01'@'%' IDENTIFIED BY 'yunwei01'; |
‘%’ - 所有情况都能访问 ‘localhost’ - 本机才能访问 ‘111.222.33.44’ - 指定 ip 才能访问
注:修改密码
update mysql.user set password=password('新密码') where user='user1'; |
- 给该用户添加权限
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:
$> mysql --max_allowed_packet=32M |
这会将数据包大小设置为 32MB。
服务器的默认max_allowed_packet
值为 64MB. 如果服务器需要处理大 查询(例如,如果您正在使用大型 BLOB
列)。例如,到 将变量设置为 128MB,像这样启动服务器:
$> mysqld --max_allowed_packet=128M |
您还可以使用选项文件来设置max_allowed_packet
。为 例如,要将服务器的大小设置为 128MB,请添加 选项文件中的以下行:
[mysqld] |
增加此变量的值是安全的,因为 仅在需要时分配额外的内存。例如,mysqld 仅在以下情况下分配更多内存 发出长查询或当 mysqld 必须时 返回一个大的结果行。的较小默认值 变量是捕获错误数据包的预防措施 客户端和服务器,还要确保你不运行 意外使用大数据包导致内存不足。
如果您遇到大数据包的奇怪问题,如果您 正在使用较大的 BLOB
值,但 没有给 mysqld 足够的访问权限 用于处理查询的内存。如果您怀疑是这种情况, 尝试将 ulimit -d 256000 添加到 mysqld_safe脚本的开头和 重新启动 Mysqld。