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

Ubuntu 源碼編譯安裝 MySQL 5.6 完整實戰:依賴解決、數據初始化、安全加固、問題排查

     編輯:MySQL 綜合教學

Ubuntu 源碼編譯安裝 MySQL 5.6 完整實戰:依賴解決、數據初始化、安全加固、問題排查

源碼安裝讓你掌控每一個編譯選項、目錄佈局、權限模型。本文在 Ubuntu 15.10 上實戰部署 MySQL 5.6.28,覆蓋 libaio 依賴、用戶隔離、mysql_install_db 初始化、Socket 文件路徑衝突排查、賬戶密碼策略、匿名用戶清理、test 數據庫移除全流程。

一、依賴準備:libaio 是關鍵


sudo apt-cache search libaio
sudo apt-get install libaio1
# 缺少 libaio 會導致 mysqld 啟動報 "Can't open shared library"

二、用戶隔離與目錄佈局


# 1. 創建無登錄權限的 mysql 用戶/組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

# 2. 解包並建立版本無關符號鏈接
cd /usr/local
sudo tar zxvf ~/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
sudo ln -s mysql-5.6.28-linux-glibc2.5-x86_64 mysql

# 3. 權限遞歸交接(關鍵步驟)
cd /usr/local/mysql
sudo chown -R mysql .
sudo chgrp -R mysql .
sudo scripts/mysql_install_db --user=mysql
sudo chown -R root .
sudo chown -R mysql data

三、啟動與 Socket 路徑衝突排查


# 1. 啟動
sudo bin/mysqld_safe --user=mysql &

# 2. 驗證
sudo netstat -antup | grep mysqld
# tcp6  :::3306  LISTEN  8455/mysqld

# 3. 客戶端連接報 "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'"
# 根因:Ubuntu 默認 socket 在 /var/run/mysqld/,MySQL 編譯默認在 /tmp/
# 解決:
sudo mkdir -p /var/run/mysqld
sudo touch /var/run/mysqld/mysqld.sock
sudo chown -R mysql:mysql /var/run/mysqld/
# 配置 my.cnf 指定 socket
echo "socket=/var/run/mysqld/mysqld.sock" >> my.cnf
# 或軟鏈接兼容
sudo ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

四、安全加固三板斧

1. Root 賬戶加密(三種方式擇一)


# 方式 A:SET PASSWORD(推薦,5.6+)
mysql -uroot -p
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('StrongP@ssw0rd!');
SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('StrongP@ssw0rd!');
SET PASSWORD FOR 'root'@'::1' = PASSWORD('StrongP@ssw0rd!');
SET PASSWORD FOR 'root'@'hostname' = PASSWORD('StrongP@ssw0rd!');
FLUSH PRIVILEGES;

# 方式 B:UPDATE mysql.user(兼容舊版)
UPDATE mysql.user SET PASSWORD = PASSWORD('StrongP@ssw0rd!') WHERE User = 'root';
FLUSH PRIVILEGES;

# 方式 C:mysqladmin(命令行腳本友好)
mysqladmin -uroot -p password 'StrongP@ssw0rd!'

2. 匿名用戶處理


# 選項 A:設置密碼(保留賬戶)
UPDATE mysql.user SET PASSWORD = PASSWORD('StrongP@ssw0rd!') WHERE User = '';
FLUSH PRIVILEGES;

# 選項 B:刪除匿名用戶(推薦,減小攻擊面)
DROP USER ''@'localhost';
DROP USER ''@'hostname';
FLUSH PRIVILEGES;

3. 移除 test 數據庫與通配權限


# mysql.db 表中默認授予所有用戶訪問 test% 數據庫權限
DELETE FROM mysql.db WHERE Db LIKE 'test%';
DROP DATABASE test;
FLUSH PRIVILEGES;

五、驗證清單


# 1. 版本與協議
mysqladmin version

# 2. 賬戶審計
mysql -uroot -p -e "SELECT User, Host, plugin FROM mysql.user;"

# 3. 權限審計
mysql -uroot -p -e "SHOW GRANTS FOR 'root'@'localhost';"

# 4. 測試數據庫已移除
mysqlshow
# 應無 test 數據庫

# 5. 匿名用戶已清理
# User 列不應出現空字符串

六、自動化部署建議

將上述步驟封裝為 Shell 腳本或 Ansible Playbook,關鍵點:

  • 幂等性:重複執行不報錯(如 useradd 檢查存在性)
  • 參數化:版本號、安裝路徑、密碼作為變量傳入
  • 驗證階段:每步結束執行檢查命令,失敗即退出
  • 日誌記錄:所有輸出 tee -a install_$(date +%F).log

源碼編譯安裝不是為了「炫技」,而是為了在合規審計、定制優化、版本鎖定、離線部署等硬性約束下,擁有完全可控的交付鏈路。建議團隊建立標準化鏡像構建流水線,將人工操作轉化為代碼資產。

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