mysql升級小結和mysql_upgrade的用途


http://blog.itpub.net/15480802/viewspace-1412259/

mysql升級

升級方式

分為In-place和out-of-place,前者直接覆蓋當前版本,后者在新路徑安裝然后加載數據庫;

升級不可跳級,即5.1要想升級成5.6,必須先升級到5.5;

注:oracle的out-of-place upgrade采用新binary直接加載原數據文件,而mysql需要導出--導入數據;

 

 

2 大致步驟

1 備份

2 升級

3 mysql_upgrade檢查不兼容的表,更新grant表;

5.5升級5.6

1 備份  mysqldump –all-databases –routines - events

2 升級前,檢查表和索引是否兼容http://dev.mysql.com/doc/refman/5.6/en/checking-table-incompatibilities.html

3 升級后調用mysql_upgrade,

注:對於大數據庫,in-place upgrade可能要花費很長時間進行數據轉換,對此可以創建一個dummy實例:包含mysql數據庫和其他數據庫的結構(不含數據),升級dummy並查看可能遇到的問題;

5.6很多參數的默認值都做了調整,詳細可參考http://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.html

 

 

3 mysql_upgrade

本質上為一個封裝了mysqlcheck命令的腳本,流程如下:

1 mysqlcheck --no-defaults --databases --fix-db-names --fix-table-names mysql
2 mysqlcheck --no-defaults --check-upgrade --databases --auto-repair mysql
3 mysql < fix_priv_tables
4 mysqlcheck --no-defaults --all-databases --skip-database=mysql --fix-db-names --fix-table-names
5 mysqlcheck --no-defaults --check-upgrade --all-databases --skip-database=mysql --auto-repair

執行完畢后在數據目錄生成mysql_upgrade_info文件,記錄檢查過的表,下次再調用時可以跳過;

 

執行步驟

1檢查所有數據表同當前binary的兼容性,若不兼容則嘗試修復,修復失敗則必須手工執行;

手工修復:mysqldump重新加載或者null alternation(alter table t engine=innodb);

如果僅僅是修改表的collation,則可調用ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;

2升級mysql系統表;

調用mysql_upgrade后,需要重啟mysql才能讓系統表更新生效;

如果單機運行了多個mysql實例,則指定連接參數

shell>mysql_upgrade --protocol=tcp -P 3306 [other_options]
shell>mysql_upgrade --protocol=tcp -P 3307 [other_options]

輸出結果

Table upgrade required.

Please do "REPAIR TABLE `tbl_name`" or dump/reload to fix it!

 

 

4 Tip

1 可備份old mysqld,如果new mysqld運行出錯可迅速切換;

2對於GA(general availability)版本間的升級,同一架構下的系統可以在兩個版本間copy  mysql format file和數據文件;

3 不要使用old my.cnf,mysqld –print-defaults檢查;

4重新安裝perl DBD::mysql,以及PHP和Python相應的驅動包;

 

 

升級replication

同oracle一樣,mysql支持low master – high slave復制模式(部分sql可能會出現錯誤),順序顛倒過來則可能遭遇一系列錯誤(比如binlog不兼容/),因此升級master前須先升級slave;

對於需要重建表或索引的操作(collation變化需要重建index),最安全的辦法是各自在master/slave單獨執行期間(禁用replication);

1 關閉slave並升級,以—skip-slave-start選項啟動,執行重建

2 master禁用binlog,執行重建

3 恢復原來設置,slave正常連接master

注:GTID=on會導致更新mysql系統表(myisam)失敗,http://dev.mysql.com/doc/refman/5.6/en/mysql-upgrade.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM