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

Linux MySQL 關鍵目錄佈局、密碼管理、服務控制與自啟配置全攻略

     編輯:MySQL 綜合教學

核心目錄地圖 (RHEL/CentOS/通用二進制安裝)

用途典型路徑說明
數據目錄/var/lib/mysql/表空間 (.ibd), Redo/Undo 日志, 錯誤日志, 慢查詢日志, pid/socket 文件
配置文件/etc/my.cnf / /etc/mysql/my.cnf主配置; 包含 !includedir /etc/my.cnf.d/ 載入模塊化配置
二進制/腳本/usr/bin/ (mysql, mysqldump, mysqladmin...)客戶端工具; /usr/sbin/mysqld 服務端主程序
啟動腳本/etc/init.d/mysqld (SysV) / /usr/lib/systemd/system/mysqld.service (Systemd)服務管理入口
日志目錄/var/log/mysql/ 或數據目錄下error.log, slow.log, general.log (由配置文件指定)
插件/庫文件/usr/lib64/mysql/plugin/存儲引擎、認證插件、審計插件

Root 密碼管理全流程

場景 1:全新安裝初始化 (MySQL 5.7+ / 8.0)


# 1. 啟動服務 (會自動初始化數據目錄、生成臨時密碼)
systemctl start mysqld

# 2. 獲取臨時密碼
grep 'temporary password' /var/log/mysqld.log
# 例: 2023-01-01T00:00:00.123456Z 0 [Note] A temporary password is generated for root@localhost: xYz#Abc123

# 3. 首次登錄並強制修改密碼 (密碼策略要求: 長度≥8、大小寫、數字、特殊字符)
mysql -uroot -p'xYz#Abc123' --connect-expired-password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPwd@123';
mysql> FLUSH PRIVILEGES;

場景 2:常規修改密碼 (已知舊密碼)


# 方法 A: mysqladmin (推薦腳本化)
mysqladmin -uroot -p'OldPwd' password 'NewStrongPwd@123'

# 方法 B: SQL 語句
mysql -uroot -p'OldPwd' -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPwd@123'; FLUSH PRIVILEGES;"

# 方法 C: 更新 user 表 (不推薦, 易出錯)
mysql -uroot -p'OldPwd' -e "UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongPwd@123') WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;"

場景 3:忘記 Root 密碼 (跳過授權表重置)


# 1. 停止服務
systemctl stop mysqld

# 2. 創建臨時啟動配置 (跳過授權表、跳過網絡)
cat > /tmp/mysql-init.cnf < FLUSH PRIVILEGES;  -- 必須先執行 (skip-grant-tables 下權限表未加載)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPwd@123';
mysql> EXIT;

# 5. 正常重啟
pkill mysqld  # 結束臨時進程
systemctl start mysqld

# 6. 驗證
mysql -uroot -p'NewStrongPwd@123' -e "SELECT USER();"

服務控制與自啟管理

操作Systemd (RHEL 7+/CentOS 7+)SysV Init (RHEL 6/CentOS 6)
啟動systemctl start mysqldservice mysqld start / /etc/init.d/mysqld start
停止systemctl stop mysqldservice mysqld stop
重啟systemctl restart mysqldservice mysqld restart
狀態systemctl status mysqldservice mysqld status
設置開機自啟systemctl enable mysqldchkconfig --add mysqld; chkconfig mysqld on
取消開機自啟systemctl disable mysqldchkconfig mysqld off; chkconfig --del mysqld
查看自啟狀態systemctl is-enabled mysqldchkconfig --list mysqld

安全加固清單 (mysql_secure_installation 交互內容)

  1. 設置 Root 強密碼 (長度≥12、複雜度高)。
  2. 移除匿名用戶 (`DELETE FROM mysql.user WHERE User='';`)。
  3. 禁止 Root 遠程登錄 (`DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');`)。
  4. 移除測試庫 (`DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';`)。
  5. 重載權限表 (`FLUSH PRIVILEGES;`)。

常見故障速查

現象排查路徑典型修復
Can't connect to local MySQL server through socket1. 服務是否運行 2. socket 路徑配置一致性 (my.cnf vs 客戶端) 3. 磁盤空間/Inode 耗盡啟動服務; 統一 socket 參數; 清理空間
Access denied for user 'root'@'localhost'密碼錯誤 / 插件不匹配 (caching_sha2_password vs mysql_native_password) / Host 不匹配重置密碼; ALTER USER ... IDENTIFIED WITH mysql_native_password BY 'pwd'; 確認 Host 列
InnoDB: Cannot allocate memory for the buffer poolinnodb_buffer_pool_size 過大超過物理內存調整為物理內存 60-70% (專用 DB 服務器)
Too many connectionsmax_connections 耗盡 / 連接泄漏 / 線程緩存過小調大 max_connections; 檢查應用連接池釋放; 增大 thread_cache_size

總結

掌握 Linux MySQL **目錄佈局、密碼生命周期、Systemd/SysV 服務控制、安全基線** 四大塊,即可覆蓋 95% 的日常運維與故障處置場景。建議將上述操作封裝為 Ansible Playbook / Shell 函數庫 / Runbook 文檔,實現標準化、可審計、可複現的運維體系。

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