天天看點

mysql更新小結和mysql_upgrade的用途

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

mysql更新

1 更新方式

分為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指令的腳本,流程如下:

執行完畢後在資料目錄生成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執行個體,則指定連接配接參數

輸出結果

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相應的驅動包;

5 更新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