強烈建議:全新安裝 5.7 + 數據遷移,避免 RPM 升級帶來的依賴地獄與配置不兼容。
# 1. 下載 5.7 RPM 包 MySQL-server-5.7.x-el6.x86_64.rpm MySQL-client-5.7.x-el6.x86_64.rpm MySQL-shared-5.7.x-el6.x86_64.rpm MySQL-devel-5.7.x-el6.x86_64.rpm # 如需編譯擴展 # 2. 完全備份數據 mysqldump -u root -p --all-databases --routines --triggers --single-transaction > all_db_$(date +%F).sql # 3. 停止舊服務 service mysqld stop
rpm -ivh MySQL-{server,client,shared,devel}-5.7.x-el6.x86_64.rpm
# 初始化數據目錄(5.7.6+)
mysqld --initialize --user=mysql
# 或 5.7.6 前
mysql_install_db --user=mysql
# 獲取臨時 root 密碼
grep 'temporary password' /var/log/mysqld.log
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-bin=mysql-bin server-id=1 # 內存相關(假設 4G 內存) key_buffer_size = 256M table_open_cache = 256 sort_buffer_size = 256K read_buffer_size = 256K read_rnd_buffer_size = 512K net_buffer_length = 8K thread_cache_size = 20 query_cache_size = 8M # 5.7 建議關閉 QC,改用 ProxySQL # InnoDB 核心 innodb_buffer_pool_size = 2G # 物理內存 50-70% innodb_log_file_size = 256M innodb_log_files_in_group = 2 innodb_flush_log_at_trx_commit = 2 # 性能優先,允許 1 秒丟失 innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # 安全 # skip-grant-tables # 僅緊急救援時臨時開啟 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
| 錯誤 | 原因 | 解決 |
|---|---|---|
| ERROR 1524 / 1045 | 權限表結構變更、密碼插件不匹配 | 臨時 skip-grant-tables 登入,執行 mysql_upgrade 升級系統表 |
| ERROR 1820 (HY000): You must SET PASSWORD | 臨時密碼未修改 | SET PASSWORD = PASSWORD('newpass'); |
| InnoDB: Invalid flags | 舊 ib_logfile 殘留 | 刪除 /var/lib/mysql/ib_logfile* 重啟 |
| 服務啟動即停止 | 配置語法錯誤、權限、SELinux | mysqld --validate-config、檢查 chown -R mysql:mysql /var/lib/mysql |