Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

MySQL 5.0 在 Linux 上的 RPM 安裝、配置與運維管理完整指南

編輯:Linux 教學

安裝包獲取與驗證

# 官方下載頁面: https://dev.mysql.com/downloads/mysql/5.0.html
# 選擇 Red Hat Enterprise Linux 3 RPM (x86)
wget https://downloads.mysql.com/archives/get/file/MySQL-server-5.0.26-0.i386.rpm
wget https://downloads.mysql.com/archives/get/file/MySQL-client-5.0.26-0.i386.rpm

# 校驗完整性(推薦 GPG 驗證)
rpm -K MySQL-*.rpm

標準安裝流程

# 1. 安裝服務端(會自動初始化數據目錄、啟動服務)
rpm -ivh MySQL-server-5.0.26-0.i386.rpm

# 2. 安裝客戶端工具
rpm -ivh MySQL-client-5.0.26-0.i386.rpm

# 3. 驗證服務狀態
netstat -ntlp | grep 3306
# tcp  0  0 0.0.0.0:3306  0.0.0.0:*  LISTEN  1234/mysqld

# 4. 首次登錄(默認 root 無密碼)
mysql -u root
# Welcome to the MySQL monitor...

關鍵目錄結構速查

用途路徑說明
數據目錄/var/lib/mysql/所有數據庫文件、日誌、socket
配置文件/etc/my.cnf主配置,/usr/share/mysql/*.cnf 為模板
啟動腳本/etc/init.d/mysqldSystem V 風格,systemd 為 mysqld.service
客戶端工具/usr/bin/mysql*mysql, mysqladmin, mysqldump 等
日誌文件/var/log/mysqld.log錯誤日誌,慢查詢日誌需配置啟用
Socket 文件/var/lib/mysql/mysql.sock本地連接 Unix Domain Socket

安全初始化必做項

1. 設置 root 密碼

# 方法一:mysqladmin(推薦)
/usr/bin/mysqladmin -u root password 'StrongP@ssw0rd!'
/usr/bin/mysqladmin -u root -h $(hostname) password 'StrongP@ssw0rd!'

# 方法二:SQL 語句(登錄後執行)
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!');
FLUSH PRIVILEGES;

2. 運行官方安全腳本

/usr/bin/mysql_secure_installation
# 交互式完成:
# - 設置 root 密碼
# - 移除匿名用戶
# - 禁止 root 遠程登錄
# - 移除 test 數據庫
# - 重新加載權限表

3. 驗證密碼生效

mysql -u root -p
# Enter password: ********
# mysql> SELECT USER(), CURRENT_USER();

服務管理操作

# System V 風格
/etc/init.d/mysqld start|stop|restart|status

# systemd 風格 (RHEL 7+)
systemctl start|stop|restart|status mysqld

# 開機自啟
chkconfig mysqld on        # SysV
systemctl enable mysqld    # systemd

# 緊急關閉(不等待事務提交)
mysqladmin -u root -p shutdown

數據目錄遷移實戰

# 1. 停止服務
systemctl stop mysqld

# 2. 創建新目錄並同步數據(保留屬性、權限、SELinux 上下文)
mkdir -p /home/data/mysql
rsync -aHAX /var/lib/mysql/ /home/data/mysql/

# 3. 修改配置文件 /etc/my.cnf
[mysqld]
datadir=/home/data/mysql
socket=/home/data/mysql/mysql.sock
# 如有 [client] 段同步修改 socket

# 4. 修改啟動腳本(SysV)或 systemd 服務文件
# SysV: /etc/init.d/mysqld  中的 datadir 變量
# systemd: systemctl edit mysqld 添加
[Service]
ExecStartPre=/bin/bash -c "mkdir -p /home/data/mysql && chown mysql:mysql /home/data/mysql"

# 5. SELinux 上下文設置(關鍵!)
semanage fcontext -a -t mysqld_db_t "/home/data/mysql(/.*)?"
restorecon -Rv /home/data/mysql

# 6. 啟動驗證
systemctl start mysqld
mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"

遠程訪問授權配置

# 1. 綁定地址 (my.cnf)
[mysqld]
bind-address = 0.0.0.0  # 監聽所有接口,或具體內網 IP

# 2. 創建遠程用戶(推薦專用賬號,避免 root 遠程)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'AppP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%';
FLUSH PRIVILEGES;

# 3. 如必須允許 root 遠程(極不推薦生產環境)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'StrongP@ssw0rd!' WITH GRANT OPTION;
FLUSH PRIVILEGES;

性能基礎調優參數 (my.cnf [mysqld] 段)

# 內存相關(根據實體內存調整,總計不超 70-80% 物理內存)
innodb_buffer_pool_size = 1G        # 核心緩存,專用服務器 60-70% 內存
innodb_log_file_size = 256M         # 重做日誌大小
innodb_log_buffer_size = 8M
key_buffer_size = 64M               # MyISAM 索引緩存
query_cache_size = 0                # 5.0 版本建議關閉,高併發下鎖爭用嚴重
query_cache_type = 0

# 連接相關
max_connections = 500
thread_cache_size = 50
table_open_cache = 2048

# 存儲引擎默認
default-storage-engine = InnoDB
innodb_file_per_table = 1           # 獨立表空間,便於管理

# 日誌與恢復
log_error = /var/log/mysqld.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

# 字符集
character-set-server = utf8
collation-server = utf8_general_ci

備份與恢復策略

邏輯備份 (mysqldump)

# 全量備份(含存儲過程、觸發器、事件)
mysqldump -u root -p --single-transaction --routines --triggers --events --all-databases > full_$(date +%F).sql

# 單庫備份(生產環境推薦)
mysqldump -u root -p --single-transaction --routines --triggers --events app_db > app_db_$(date +%F).sql

# 壓縮存儲
mysqldump ... | gzip > backup_$(date +%F).sql.gz

物理備份 (xtrabackup - Percona 開源工具)

# 安裝
yum install -y percona-xtrabackup-24

# 熱備份(不鎖表,僅 InnoDB)
innobackupex --user=root --password='xxx' /backup/full_$(date +%F)

# 增量備份
innobackupex --incremental /backup/inc_$(date +%F) --incremental-basedir=/backup/full_20240101

# 恢復準備
innobackupex --apply-log /backup/full_20240101
innobackupex --copy-back /backup/full_20240101
chown -R mysql:mysql /var/lib/mysql

常見故障排查速查

現象排查方向解決命令
Can't connect to local MySQL server through socket服務未啟動 / socket 路徑不匹配systemctl status mysqld; ls -l /var/lib/mysql/mysql.sock
Access denied for user 'root'@'localhost'密碼錯誤 / 權限表異常mysql_secure_installation; 或跳過權限表啟動重置
Table 'xxx' is marked as crashedMyISAM 表損壞myisamchk -r /var/lib/mysql/db/table.MYI
InnoDB: Error: space id xxx表空間 ID 不匹配innodb_force_recovery=1 啟動 dump 重建
Too many connections連接數耗盡 / 未釋放show processlist; kill idle 連接; 調大 max_connections
Copyright © Windows教程網 All Rights Reserved