這么大跨度的升級,本身不推薦.升級應該是循序漸進的,以防止不兼容.如果確實要這么做,你先要確保你的客戶端管理工具要能兼容,比如phpmyadmin,此次升級依然存在一個問題,mysql server和mysql client不匹配的問題.
一.升級前
1.先備份數據
#mysqldump --all-databases -p -u root > /home/mysql.data.bak
2.停止原有的mysql服務
3.重命名my.cnf
4.為防止更新失敗,快速恢復,同時拷貝一份mysql的datadir下的數據備份,以文件方式拷貝
二.從5.5開始,編譯mysql需要用Cmake
安裝cmake
#yum install cmake
三.編譯安裝mysql5.6
1.下載源碼
進入http://dev.mysql.com/downloads/mysql/5.6.html#downloads
平台選擇Source Code
選擇5.6.22
#wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.22.tar.gz
2.解壓
#tar zxvf mysql-5.6.22.tar.gz
3.編譯
#cd mysql-5.6.22
#cmake -DCMAKE_INSTALL_PREFIX=/usr-ext/local/mysql56-server -DMYSQL_UNIX_ADDR=/var/local/mysql/mysql56.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr-ext/local/mysql56-server/data -DMYSQL_TCP_PORT=3306 -DENABLE_DOWNLOADS=1
#make && make install
4.給予權限
#chown -R mysql:mysql /usr-ext/local/mysql56-server
后續服務啟動,如果權限問題,請修改對應文件的權限
四.啟動服務及數據更新
1.拷貝/usr-ext/local/mysql56-server下的support-files下的mysql.server到/etc/init.d下,重命名為mysqld
2.service mysqld restart
3.如果順利啟動,則開始更新數據,如果啟動不了看my.cnf中的參數是否和mysql5.6兼容,筆者到這兒都是ok的,暫時未遇到問題
4.進入/usr-ext/local/mysql56-server的bin目錄下,開始更新數據
#mysql_upgrade --protocol=tcp -P 3306 -u root
因為新的mysql5.6啟動默認用了之前的my.cnf和數據文件,所以root密碼是之前的
輸入之前的root密碼
提示失敗
原因是mysql5.6默認是用的新的密碼校驗方式,舊的不兼容,現在要關閉該項安全校驗
#vi /etc/my.cnf
增加
secure_auth = off
skip-grant-tables
重新啟動mysql
再次更新,依然提示失敗,大致意思是更新日志格式版本不符合,這個時候檢查mysql的datadir下是否有之前的更新文件記錄mysql_upgrade_info
如有
刪除掉
再次更新
這時候更新開始了,提示檢查都ok,但到mysqlcheck這兒爆出錯誤,更新繼續失敗,提示大致意思是,mysql服務端因為關閉了secure_auth,用的是舊的密碼校驗方式,但mysqlcheck這個client用了新的密碼校驗方式,連接不上
這,就蛋疼了,凝神靜氣,繼續想解決辦法.
現在的root密碼因為是在舊的mysql底下生成的,所以是舊的密碼格式.如何讓他生成新的呢?
1.進入mysql命令行下,更改root密碼
2.新建一個mysql的超級用戶,比如root2,賦予全局權限
因為時間緊迫,也怕再出問題.畢竟是一個線上的服務器,用戶那邊催得緊.
選擇第二種,進入phpmyadmin,新建一個超級用戶root2
然后再次更新
#mysql_upgrade --protocol=tcp -P 3306 -u root2
順利更新完畢.
編輯my.cnf,取消掉skip-grant-tables
重啟mysql服務
至此更新完畢.話說到此,也是一頭大汗啊.
然后開始測試數據的完整性和主從復制的一致性.