在hive和MySQL的各种报错下弄了好久。。。。。可谓一步一坑
1。 刚进MySQL时show tables;报错:
只有选中一个数据库才可以查看该数据库内的tables。eg:use mysql;
简单来说select user,password,host from user;这个命令必须是针对某个具体的数据库而言的。
2。查看到用户和密码报错。出现ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’
select host,user,password from mysql.user;//即可查看到用户和密码的命令
但因为mysql数据库下已经没有password这个字段了,password字段改成了
authentication_string
所以只需要将password改成authentication_string就好。
改为 select host,user,authentication_string from mysql.user;
4。
3。show databases;报错:
出现报错:Ignoring query to other database
是因为登录的时候少打了一个u。
4。
创建hive用户,设置的密码报错:
这个其实与validate_password_policy的值有关。
所以只需要设置下validate_password_policy就可以了。
mysql>set global validate_password_policy=0;
mysql> set global validate_password_length=1;
这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。
然后进行密码设置,就不会报错
5。MySQL打错符号怎么退出:
输入 '/Ctrl+c 可以结束当前错误语句。
6。 使用命令 schematool -initSchema -dbType mysql; 初始化mysql报错:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago
上述问题是由mysql5数据库的配置引起的。mysql5将其连接的等待时间(wait_timeout)缺省为8小时。在其客户程序中可以这样来查看其值:
mysql﹥ show global variables like ‘wait_timeout’;
±--------------±--------+
| Variable_name | Value |
±--------------±--------+
| wait_timeout | 28800 |
±--------------±--------+
1 row in set (0.00 sec)
28800 seconds,也就是8小时。
如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。
解决:
直接用sql命令行修改 mysql> set global wait_timeout=604800;
除了wait_timeout,还有一个’interactive_timeout’
同样可以执行SHOW GLOBAL VARIABLES LIKE 'interactive_timeout’来查询
执行set global interactive_timeout=604800; 来设置 。
7。然后初始化继续报错,原因是hive-site.xml里面JDBC的链接需要加入SSL=false。
javax.jdo.option.ConnectionURL
jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false&
8。继续错:
Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Access denied for user ‘hive’@’%’ to database ‘hive’
SQL Error code: 1044
使用命令 select host,user,authentication_string,Grant_priv,Super_priv from mysql.user;查看权限,发现用户’hive’@’%'的权限都是关闭的。
可以看到授权的权限没有打开: Grant_priv is set to N for root@%. 修复下:
mysql> UPDATE mysql.user SET Grant_priv=‘Y’, Super_priv=‘Y’ WHERE User=‘hive’;
mysql> flush privileges;
9。还是报1044错误,
终于找到原因,一口老血。
在hive-site.xml里面,
因为是在本地搭的mysql和hive。
然后就不报错了。
10。启动hive,能顺利启动,但show databases;又报错:(原因也出在hive-site.xml上,只要配置好了就不出错了)这里我是因为和问题9的一样,9解决了10也没问题了。所以有问题的话还是要多多查看配置文件,不然搞死人 T^T.
另外再记一些解决问题过程中的小知识。
netstat -antup | grep mysql 查看MySQL端口号。