首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.1 升級至 5.5 完整步驟與 mysql_upgrade 失敗排查

     編輯:MySQL 資料庫相關知識

生產環境從 MySQL 5.1 升級 5.5.36 的實戰記錄,含依賴安裝、編譯參數、資料遷移、mysql_upgrade 失敗應對。

升級前準備

# 安裝依賴
yum install -y autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool* openssl* cmake
# 備份舊資料目錄
# 停止服務
service mysql stop

編譯安裝 5.5.36

tar xf mysql-5.5.36.tar.gz
cd mysql-5.5.36
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/var \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
-DMYSQL_USER=mysql \
-DEXTRA_CHARSETS=all \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1
make && make install

配置與啟動

rm -rf /etc/my.cnf
cp support-files/my-huge.cnf /etc/my.cnf
service mysql start

執行 mysql_upgrade 遇到錯誤

FATAL ERROR: Upgrade failed
Got error: 1064: You have an error in your SQL syntax ... near 'FOR UPGRADE'

排查過程

  1. 嘗試帶密碼執行:/usr/local/mysql/bin/mysql_upgrade -S /var/data/mysql.sock -uroot -p 失敗。
  2. 靈機一動:用 5.5 的 mysqld 直接掛載舊 datadir 並加 --skip-grant-tables 啟動:
/usr/local/mysql/bin/mysqld --datadir=/usr/local/mysql/var/ --user=mysql --skip-grant-tables &
  1. 忽略 InnoDB 報錯,執行 mysql_upgrade 成功。
  2. mysqladmin shutdown 停止,修正 my.cnf 參數適配 5.5,正常啟動。

核心心得

關鍵命令:/usr/local/mysql/bin/mysqld --datadir=/path/to/old/data --user=mysql --skip-grant-tables &
利用新版本二進制直接掛載舊資料目錄、跳過權限檢查,讓 mysql_upgrade 在相容模式下完成系統表結構升級,再正規啟動。

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