【本文僅僅記錄升級過程,不討論兩個版本的優劣,而且本網目前的資料庫相對簡單,沒有預存程序什麼的,所以不能保證同樣方法試用於所有情況,總之升級有風險,操作需謹慎!】
因為Ubuntu的apt庫裡MySQL最新版本依然是5.1,所以升級MySQL5.5 只有自行下載,並且由於兩個版本間改動較大,所以務必先閱讀官網的升級事項 upgrading from from MySQL 5.1 to 5.5 ,確保自己的資料庫以及配置適用新版。
本文參考了一篇英文指南 A step by step guide to upgrading to MySQL 5.5 但是做了一些順序和內容上的調整,特別是官網和這篇英文指南都是在升級前mysqldump來備份檔案,升級後再將sql匯入的方式,但是這個過程可能非常耗時(本網的資料庫可能需要花費十幾個小時才能完成重新匯入),我直接在原資料庫檔案目錄上升級,基本是眨眼的功夫,當然要再次強調,這個未必適用於所有人。
具體步驟如下:
1. 停止現版本MySQL,並備份
mkdir mysql_5.1_backup
cd mysql_5.1_backup
sudo /etc/init.d/mysql stop
接下來所有備份操作都在mysql_5.1_backup 執行
1.1 用mysqldump 備份資料庫,可以將mysql內建資料庫和產品資料庫分開備份
mysqldump -u user_name -p –databases mysql > mysql_db.sql
mysqldump -u user_name -p –databases db_name > db_name.sql
1.2 備份MySQL 資料目錄,更多備份,更多安全
sudo cp -R /var/lib/mysql/ mysql-5.1-data
1.3 備份MySQL 設定檔
sudo cp -r /etc/mysql mysql_5.1_conf
2 安裝非同步io庫
sudo apt-get install libaio-dev
3. 從官網上下載最新的MySQL,(我們用的是64位,截至5.5.16,注意要下載 .tar.gz那個版本, tar版本很坑爹,解壓後都是rpm檔案)
wget -c “http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16-linux2.6-x86_64.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/” -O mysql-5.5.16-linux2.6-x86_64.tar.gz
4. 將下載檔案拷貝到/usr/local/並解壓,建立軟連結(方便以後下載新版本後切換)
sudo cp mysql-5.5.16-linux2.6-x86_64.tar.gz /usr/local
sudo tar xzvf mysql-5.5.16-linux2.6-x86_64.tar.gz
sudo ln -s mysql-5.5.16-linux2.6-x86_64 mysql
5. 幹掉舊版本的MySQL
sudo apt-get remove mysql-server
sudo apt-get autoremove
sudo apt-get remove mysql-client
sudo apt-get autoremove
6. 編輯環境檔案/etc/environment,使之內容如下:
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/mysql/bin”
7. 保證MySQL的socket 檔案所在目錄存在並可讀寫
sudo mkdir /var/run/mysqld/ (如果已經存在就忽略錯誤)
sudo chown -R mysql:mysql /var/run/mysqld/
8. 拷貝新的設定檔
cd /usr/local/mysql/support-files/
sudo cp my-large.cnf /etc/mysql/my.cnf
9. 編輯設定檔/etc/mysql/my.cnf,添加如下內容
[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr/local/mysql
datadir = /var/lib/mysql #這裡和英文指南不同,指向原MySQL資料庫檔案目錄
tmpdir = /tmp
log_error = /var/log/mysql/error.log
注意,要確保[client]和[mysqld]下socket和port欄位內容一致
10. 拷貝MySQL開機檔案
cd /usr/local/mysql/support-files/
sudo cp mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo update-rc.d mysql defaults
11. 幹掉舊版MySQL 餘虐 (和英文版教程不同,因為保留了原設定檔目錄和原資料庫檔案目錄)
sudo rm -R /usr/lib/mysql
12. 跳過grants table 運行MySQL
sudo su #切換到root,否則下面的命令中無法使用mysql帳號
/usr/local/mysql/bin/mysqld –skip-grant-tables –user=mysql
13. 開一個新的終端
sudo /usr/local/mysql/bin/mysql_upgrade
如果所有的log都ok,那就基本Ok了
14. 終止之前的mysql進程,ctrl-c停不下來的話,就直接kill 進程號
15. 正常啟動MySQL
sudo /etc/init.d/mysql start