查看 MySQL 错误代码列表
访问远程被拒绝
场景复现: 新增的数据库,Navicat 远程无法登陆,但远程主机中可以正常使用。
提示信息: Error no. 1251: "Client does not support authentication..."
常见原因: 默认用户未配置远程访问
已确认Linux 对应3306 端口防火墙已打开 /sbin/iptables -I INPUT -p tcp –dport 3306-j ACCEPT #添加端口3306 /etc/rc.d/init.d/iptables save #保存设置 /etc/rc.d/init.d/iptables status #查看防火墙状态
解决:
-- 连接远程主机
mysql -u root -ppassword
use mysql;
show tables;
-- 查看用户信息
select host,user,plugin,authentication_string from mysql.user;
Host
列指定了允许用户登录所使用的IP, localhost
(不同于127.0.0.1)表示本机使用通过 UNIX socket 连接,%
表示允许任何通过 TCP/IP 连接过来的主机访问,类似 mysql -h 172.16.0.3
。
caching_sha2_password
是MySQL 8.0 的默认身份验证插件, 旧版本是 mysql_native_password
。 Why we change it.
-- 修改账号密码
ALTER USER 'root'@'%' IDENTIFIED BY "newpassword";
-- 修改IP限制
UPDATE USER SET host="%" WHERE user = "root";
flush privileges;
接下来就可以正常使用 Navicat 远程访问了。
MyBatis动态sql
order by 字段,在用动态sql时会出现问题
需要了解 #{} 和 ${} 区别:
- #{} 将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。可以很大程度防止sql注入。
- ${} 将传入的数据直接显示生成在sql中。无法防止sql注入。
- ${} 方式一般用于传入数据库对象,例如传入表名。