mysql 基本使用 问题排查
一、host '' is not allowed to connect to this Mysql server
原因:没有打开远程访问
1、远程链接服务器,在服务器内mysql系统目录下的/bin文件下执行./mysql -u root -p;输入密码登入mysql;
2、在mysql中执行use mysql命令,进入系统数据库
3、在mysql数据库中执行 update user set host = '%' where user = 'root';;如果返回结果如下图:
该结果表示是由于当前的root用户限制在当前的内网ip内访问的,需要修改他的访问域。
4、在mysql数据库中执行 update user set host = ‘%’ where user = ‘root’;
5、FLUSH PRIVILEGES; 这个命令是刷新MySQL的权限相关表
二、解决另一台机器连接
1.防火墙中给端口3306设置一个特定的开放端口(创建入站规则)
2.配置文件 [ysqld] 部分增加内容:
有配置文件名:my.cnf,有些叫my.ini
#将bind-address参数的值修改为0.0.0.0或者服务器的IP地址 bind-address = 0.0.0.0
3.上面的那个%权限
二、调用 SSPI 失败,请参见内部异常。
原因分析:
据查此问题因mysql数据库没有安装ssl证书导致。
解决分析:
连接字符串中加上“SslMode=none”;。
string connectStr = "server=127.0.0.1; User Id=root; password=123456; Database=studentdb;SslMode=none;Charset=utf8";
三、调用 SSPI 失败,请参见内部异常。
字符集 创建库指定字符集:
create database database_name default charset utf8;
其他处理:
https://blog.csdn.net/YSTWD_WY/article/details/124193675
四、给定关键字不在字典中 The given key was not present in the dictionary.
解决方法:
https://www.cnblogs.com/xbding/p/12680490.html
五、Client does not support authentication protocol requested by server; consider upgrading MySQL client
参见:https://zhuanlan.zhihu.com/p/433298885
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,所以可以升级navcat的版本或者改变mysql的加密规则
我是用的将mysql的加密规则给改了,觉得navcat升级有点麻烦,还要破解。
步骤: 先登录mysql,mysql -u root -p"123456"
1 查看mysql的版本发现是8以后的,所以加密规则会变
select version();
2 修改加密方式 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
这里的password是你正在使用的密码
注意!!!(这破地方我给忽略了,找了好一会才发现这错了)我的localhost权限是% 所以我执行的是>ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
下面同样注意localhost
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
这是更新一下用户的密码这里的password为你修改的新密码。 如果提示密码unsafe ,就是密码格式不对,多试试。
然后
FLUSH PRIVILEGES;
刷新权限,让修改生效。
再次使用navcat连接 成功!!!记得密码是刚才设置的新密码!
六、ASCII '\0' appeared in the statement
登入的时候加--binary-mode=1
mysql --binary-mode=1 -hlocalhost -P3306 -uroot -padmin jvmi<D:\myWork\jtc\jvmi_20220731.sql
七、at line 161: Unknown command '\''.
mysql --binary-mode=1 -hlocalhost -P3306 -uroot -p1qaZxsw2 --default-character-set=utf8 jwmshk<D:\jwmshk_20220907.sql
八、有时候发现有些视图在其他地方好的,导入到本地发现运行报错了。
原因:MySQL 5.7.5和up实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(在默认情况下是这样),那么MySQL就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们。(在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。关于前5.7.5行为的描述,请参阅MySQL 5.6参考手册。)
查看:查看当前sql模式
select @@sql_mode;
解决:使用如下脚本,或用上面代码查看没问题的机器模式,将值改成与没有问题机器相同即可
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
重启后被恢复:
windows环境。只需要在my.ini中加入
[mysqld]
sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION