1-MySQL - 问题集
- about
- ERROR:ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '?-'.
- 在Windows的命令行中,启动
net start mysql
失败 - Ignoring query to other database
- SQLyog无法连接MySQL服务器
- ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
- ERROR 1055 (42000): Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'text.book.title' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
about
本篇收集学习MySQL时,遇到的问题及解决。
由于大家的环境不、版本等都各有千秋,导致产生问题的原因也不一样,所以,本篇仅供参考!
ERROR:ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '?-'.
MySQL5.7 + win10
现象,在导入sql文件时报错:
C:\Users\Anthony>mysql -uroot -p123 <C:\Users\Anthony\Downloads\blog\db1.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '?'.
整体过程是这样的,在A电脑的PyCharm的Terminal终端中执行了如下导出命令:
mysqldump -uroot -p123 -B blog >db1.sql
然后再B电脑的cmd中通过下面两种方式导入时均发生上面截图中的报错:
-- 报错
C:\Users\Anthony>mysql -uroot -p123 <db1.sql
-- 登录进去使用source命令导入也报错
C:\Users\Anthony>mysql -uroot -p123
source db1.sql
怀疑点,A、B两台电脑在导入导出时的编码环境不一致(terminal、cmd的编码也不一定一致)。
最后无脑的解决方案是这样的,即在导入导出时,统一字符集。
-- 导出
mysqldump -uroot -p123 --default-character-set=utf8 -B blog >db1.sql
--导入
mysql -uroot -p123 --default-character-set=utf8 <db1.sql
参考:https://www.iteye.com/blog/kobe-hz-2207155
在Windows的命令行中,启动net start mysql
失败
当在Windows中的命令行中,使用命令net start mysql
提示:
C:\WINDOWS\system32>net start mysql
服务名无效。
请键入 NET HELPMSG 2185 以获得更多的帮助
这种情况一般是安装MySQL
后,没有执行初始化和添加到windows服务这两个步骤引起的。解决办法:
- 必要的检查,查看
MySQL
的MySQL\bin
目录是否添加到windows的环境变量中。 - 如果上一步正常,打开一个新的命令行窗口(管理员权限),输入:
mysql --initialize # 执行初始化
mysql -- install # 将mysql服务添加到windows的服务中去
net start mysql # 启动mysql服务
此时,你如果打开Windows的服务,就可以看到MySQL
的服务器在运行了。你可以执行:
net stop mysql # 关闭mysql服务
关闭MySQL
服务。现在应该能正常的登录了。
Ignoring query to other database
这个问题,绝对是粗心造成的:
解决办法不用说了吧!
参考:Mysql错误:Ignoring query to other database解决方法
SQLyog无法连接MySQL服务器
可能的原因:
- 确保服务器的IP和MySQL服务和端口都是正常的
- MySQL的用户中没有相关权限,比如没有可以支持远程连接的用户
- 有的MySQL部署在VMware中,当服务器的IP地址变更,导致出现上面说的用户的问题
解决办法是登录到服务器中,查看用户情况:
mysql> select user,host from mysql.user;
+---------------+--------------+
| user | host |
+---------------+--------------+
| root | 192.168.85.% |
| zhangkai | 192.168.85.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| zhangkai | localhost |
+---------------+--------------+
如上,这两个192.168.85.%
host用户,在我服务器的IP变更之后,就没有合适远程连接的用户了,导致我用SQLyog无论如何都连接不上,我就新建了一个远程连接用户:
-- create user root@"%" identified by '123';
grant all on *.* to root@"%" identified by '123' with grant option;
参考:用户管理
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
在使用INTO OUTFILE /tmp/xxxx
导出脚本时,该/tmp
路径必须是在MySQL配置文件中配置的安全路径,不然报错,就像我下面这样的:
mysql> SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' engine=innodb')
-> FROM information_schema.tables
-> WHERE table_schema IN ("world", "tt") AND ENGINE='myisam'
-> INTO OUTFILE '/home/check_engine.sql'; -- 因为我的安全路径是 /tmp 而不是 /home 所以报错了
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
而配置文件中安全路径的配置,是这样的,修改/etc/my.cnf
配置文件,添加如下字段:
[mysqld]
secure-file-priv=/tmp
然后重启MySQL。我这里是将/home
替换为/tmp
。
参考:https://www.cnblogs.com/Neeo/articles/13597433.html#3687790531
ERROR 1055 (42000): Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'text.book.title' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql5.7 + win10
关于only_full_group_by
的更多细节,可以参考这篇博客,这里不再展开,只是告诉你怎么解决:
1. 临时解决,直接在终端中执行下面两行SQL语句即可
-- 去掉ONLY_FULL_GROUP_BY 重新设置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';
-- 上面是改变了全局sql_mode 对于新建的数据库有效, 对于已存在的数据库,则需要在对应的数据下执行:
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
以上方式临时解决没有问题的,数据库重启就需要重新设置。
2. 配置文件中配置,一劳永逸
[mysqld]
# 在mysqld节点中,添加下面一行
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启MySQL即可。
参考:
- https://blog.csdn.net/weixin_43064185/article/details/99646535
- https://www.jianshu.com/p/fa29515b1ef8
- https://zhuanlan.zhihu.com/p/368440685
欢迎斧正,that's all