UCenter info: MySQL Query Error
SQL: SELECT value FROM [Table]vars WHERE name='noteexists2'
Error: SELECT command denied to user 'dbuser'@'IP' for table 'pre_ucenter_vars'
Errno: 1142
典型場景:Discuz!/UCenter 遷移、換庫、換 IP 後前台/後台無法登錄,報數據庫權限錯誤。
config_ucenter.php 中 UC_DBTABLEPRE 仍為舊庫名SELECT 權限# 文件:uc_server/data/config.inc.php / config/config_ucenter.php
# 關鍵配置
define('UC_DBNAME', 'new_dbname'); // 新數據庫名
define('UC_DBPW', 'new_password'); // 新密碼
define('UC_DBUSER', 'new_user'); // 新用戶
define('UC_DBTABLEPRE', '`new_dbname`.pre_ucenter_'); // 關鍵:帶庫名前綴!
注意:UC_DBTABLEPRE 必須包含反引號包裹的庫名 + 表前綴,格式:`dbname`.pre_ucenter_,否則跨庫查詢失敗。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER
ON `new_dbname`.* TO 'new_user'@'%' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
mysql -u new_user -p new_dbname -e "SHOW TABLES LIKE 'pre_ucenter_%';"
# 應包含:pre_ucenter_vars, pre_ucenter_apps, pre_ucenter_members 等
# 刪除 UCenter 緩存目錄
rm -rf uc_server/data/cache/*
# 刪除 Discuz 緩存
rm -rf data/cache/*
# 重新訪問前台/後台測試
| 配置文件 | 關鍵參數 | 常見錯誤 |
|---|---|---|
| uc_server/data/config.inc.php | UC_DBNAME, UC_DBPW, UC_DBUSER, UC_DBTABLEPRE | DBTABLEPRE 缺庫名前綴 |
| config/config_global.php | dbname, dbpw, dbuser, tablepre | tablepre 與實際表前綴不符 |
| config/config_ucenter.php | UC_DBNAME, UC_DBPW, UC_DBUSER, UC_DBTABLEPRE | 同 config.inc.php 需保持一致 |
-- 檢查用戶權限
SHOW GRANTS FOR 'new_user'@'%';
-- 檢查表是否存在
SELECT TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'new_dbname' AND TABLE_NAME LIKE 'pre_ucenter_%';
-- 模擬報錯查詢
SELECT value FROM `new_dbname`.pre_ucenter_vars WHERE name='noteexists2';
config.inc.php 與 config_ucenter.php 的 UC_* 參數必須完全一致UC_DBTABLEPRE 值必須為 `dbname`.pre_ucenter_ 格式@'%' 或具體應用服務器 IP,避免 @'localhost' 導致遠程連不上data/cache/ 及 uc_server/data/cache/核心修復點:配置文件 UC_DBTABLEPRE 加上反引號庫名前綴 + 授予用戶完整權限 + 雙配置同步 + 徹底清緩存,即可解決 99% UCenter 遷移權限報錯。