Skip to content

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文件时报错: 1832670159597207552.png

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服务这两个步骤引起的。解决办法:

  • 必要的检查,查看MySQLMySQL\bin目录是否添加到windows的环境变量中。
  • 如果上一步正常,打开一个新的命令行窗口(管理员权限),输入:
mysql --initialize	# 执行初始化
mysql -- install	# 将mysql服务添加到windows的服务中去
net start mysql		# 启动mysql服务

此时,你如果打开Windows的服务,就可以看到MySQL的服务器在运行了。你可以执行:

net stop mysql		# 关闭mysql服务

关闭MySQL服务。现在应该能正常的登录了。

Ignoring query to other database

这个问题,绝对是粗心造成的: 1832670159802728448.png 解决办法不用说了吧! 参考:Mysql错误:Ignoring query to other database解决方法

SQLyog无法连接MySQL服务器

可能的原因:

  • 确保服务器的IP和MySQL服务和端口都是正常的
  • MySQL的用户中没有相关权限,比如没有可以支持远程连接的用户
  • 有的MySQL部署在VMware中,当服务器的IP地址变更,导致出现上面说的用户的问题

解决办法是登录到服务器中,查看用户情况:

sql
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无论如何都连接不上,我就新建了一个远程连接用户:

sql
-- 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配置文件中配置的安全路径,不然报错,就像我下面这样的:

sql
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配置文件,添加如下字段:

sql
[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语句即可

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. 配置文件中配置,一劳永逸

ini
[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即可。 参考:


欢迎斧正,that's all