首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux 伺服器清除 MySQL 操作歷史 (.mysql_history) 與 Bash 歷史記錄

     編輯:MySQL 綜合教學

背景

MySQL 客戶端互動模式下執行的 SQL 語句會自動記錄在使用者家目錄的 ~/.mysql_history。生產環境為防敏感資訊(密碼、結構、資料)洩露,需定期清理或停用記錄。

一、Bash 歷史記錄控制

1. 停用或限制歷史筆數

# /etc/profile 或 ~/.bashrc
export HISTSIZE=0          # 不保留歷史
# 或
export HISTSIZE=100        # 僅保留 100 筆

生效:source /etc/profile 或重新登入。

2. 清空當前使用者的 Bash 歷史檔

echo '' > ~/.bash_history

3. 立即清空記憶體中的歷史緩衝區

history -c

4. 強制將當前緩衝區寫入檔案(預設登出時才寫入)

history -w

二、MySQL 歷史記錄清理

1. 清空 .mysql_history 檔案

echo '' > ~/.mysql_history

2. 永久停用 MySQL 歷史記錄(推薦)

建立符號連結指向 /dev/null,所有寫入直接丟棄:

ln -sf /dev/null ~/.mysql_history

或在 ~/.my.cnf 加入:

[mysql]
no-auto-rehash
# 無直接停用 history 選項,符號連結法最有效

3. 臨時停用當前 Session 記錄

mysql --batch --skip-history  # 批次模式不記錄
# 或啟動後
\> SET SESSION sql_log_off = 1;  # 僅影響二進制日誌,不影響 .mysql_history

三、生產環境最佳實踐

  1. Root/管理帳號:ln -sf /dev/null /root/.mysql_history、HISTSIZE=0
  2. 應用帳號:同樣處理 ~/.mysql_history、~/.bash_history
  3. 審計需求:若需保留審計軌跡,改用 MySQL 審計插件(MariaDB Audit Plugin、MySQL Enterprise Audit)記錄至系統日誌/專用表,而非依賴客戶端歷史檔。
  4. 自動化:納入伺服器初始化腳本(Ansible/Shell),確保新建帳號自動套用。

四、驗證指令

# 確認歷史檔為空或為 /dev/null 連結
ls -la ~/.mysql_history ~/.bash_history
cat ~/.mysql_history

# 進入 mysql 客戶端執行幾條指令,退出後再檢查
mysql -u root -p -e "SELECT 1;"
cat ~/.mysql_history  # 應為空

總結

清除歷史記錄的核心手段:echo '' > 檔案(一次性清空)、ln -sf /dev/null 檔案(永久停用)、HISTSIZE=0(停用 Bash 記錄)。生產環境強烈建議永久停用 .mysql_history,改用伺服器端審計功能滿足合規需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved