Ubuntu18.04 hive初始化MySQL報(bào)錯(cuò)

錯(cuò)誤信息

org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
Underlying cause: java.sql.SQLException : Access denied for user 'sfpql'@'localhost'
SQL Error code: 1698
Use --verbose for detailed stacktrace.


錯(cuò)誤

原因

一般報(bào)Failed to get schema version是連接不上MySQL的原因
排查點(diǎn):

  1. 看MySQL的驅(qū)動(dòng)是否添加到hive的lib目錄下,并且jar包版本要符合MySQL版本
  2. 看hive的hive-site.xml文件是否編寫正確
    • connect首字母大寫


      connect首字母大寫
    • 用戶名密碼檢查


      用戶名密碼

解決

我的錯(cuò)誤是報(bào)SQL Error code: 1698

原因是因?yàn)樵谧罱腢buntu安裝(當(dāng)然也可能是其他安裝)中,MySQL默認(rèn)使用了UNIX auth_socket plugin插件。

簡(jiǎn)單來(lái)說(shuō)這意味著當(dāng)db_users使用數(shù)據(jù)庫(kù)時(shí),將會(huì)通過(guò)系統(tǒng)用戶認(rèn)證表進(jìn)行認(rèn)證。你可以通過(guò)下面的命令看看你的root用戶是否設(shè)置成了這樣:

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+

就像你在查詢語(yǔ)句中看到的那樣,root用戶在使用auth_socket插件。有兩種方法來(lái)解決這個(gè)問(wèn)題:
1. 你可以設(shè)置你的root用戶使用mysql_native_password插件 2. 你可以創(chuàng)建一個(gè)與你的系統(tǒng)用戶一致的新的數(shù)據(jù)庫(kù)用戶(推薦)

(筆者注:方法2即滿足auth_socket插件的要求)

選擇1:

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

選擇2( 用你的操作系統(tǒng)用戶名代替YOUR_SYSTEM_USER) :

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
# 別忘了設(shè)置密碼
mysql> alter user 'YOUR_SYSTEM_USER'@localhost identified by 'password';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

記住如果你選擇使用方法2,你應(yīng)該通過(guò)使用你的操作系統(tǒng)用戶名來(lái)連接到MySQL(mysql -u YOUR_SYSTEM_USER)。

注意:在一些操作系統(tǒng)中(例如Debian系)‘a(chǎn)uth_socket’插件被叫做’unix_socket’,所以相應(yīng)的SQL命令語(yǔ)句應(yīng)該為UPDATE user SET plugin=‘unix_socket’ WHERE User=‘YOUR_SYSTEM_USER’。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容