標籤:升級 mysql in place 5.1-5.7
接上篇翻譯的文章:使用‘In place‘ 方法直接從5.0升級至5.7,在此記錄我實踐的過程。
1、環境準備
資料庫A
版本:5.1
字元集:latin1
引擎:MyISAM
資料庫量:約220G
表資料量:約600
伺服器:centos6.5
2、升級過程
已經搭建好5.1版本資料的從庫,等主從同步之後,開始升級從庫
我們在升級前,首先檢查並修複表(MyISAM引擎)。
./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p -r -A
stop slave;show slave status;
記錄下當前的位置點,並在設定檔中配置主從不隨資料庫啟動
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M01/98/49/wKioL1k5eySBGGVYAAA_w1ir-Gk031.png-wh_500x0-wm_3-wmp_4-s_2944313875.png" title="13267474-ba54-4bcb-87b5-f6184041b9c4.png" alt="wKioL1k5eySBGGVYAAA_w1ir-Gk031.png-wh_50" />
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/98/49/wKioL1k5ezCA7OQFAAAWRCrQagA480.png-wh_500x0-wm_3-wmp_4-s_1836053518.png" title="26359a4c-c297-4978-8c71-a6a591fa566a.png" alt="wKioL1k5ezCA7OQFAAAWRCrQagA480.png-wh_50" />
/etc/init.d/mysqld stop orcd /usr/local/mysql51./bin/mysqladmin -uroot --socket=/var/lib/mysql.sock -p‘<PASSWORD>‘ shutdown
我注釋掉了以下幾項:
<InnoDB相關,注釋掉undo有關的配置,因為undo檔案只能在初始化時建立,也可將innodb_undo_tablespaces設定為0,為了方便,將會有問題的配置注釋,使用預設配置>#innodb_data_file_path = ibdata1:1024M:autoextend#innodb_file_per_table = 1 #innodb_undo_directory = <DATADIR>#innodb_undo_logs = 128 #innodb_undo_tablespaces = 3 #innodb_undo_log_truncate = 1#innodb_max_undo_log_size = 1G複製相關#gtid_mode = on#enforce_gtid_consistency = true#master_info_repository = TABLE#relay_log_info_repository = TABLE#slave_parallel_workers = 2<修改以適應5.1版本>binlog_checksum = NONEsql_mode =‘NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘
cd /usr/local/mysql57./bin/mysqld_safe --defaults-file=../my.cnf --datadir=<DATADIR> --basedir=. --port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &
./bin/mysql_upgrade -uroot --socket=/var/lib/mysql.sock
Note : TIME/TIMESTAMP/DATETIME columns of old format have been upgraded to the new format.
upgrade 修複該問題的sql為:
ALTER TABLE `<DB>`.`<TABLE>` FORCE
由於5.6.6後修改了TIME/TIMESTAMP/DATETIME的一些行為,因此需要進行升級,關於具體哪些變化請移步官檔
碰到的錯誤
1. 存在損壞的表,無法升級。升級前需要先repair table,注意應使用5.1版本
2. 表不支援升級
Error: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn‘t exist檢查報錯的表引擎為MRG-MYISAM。需要手動重新建立,去主庫匯出建表語句,先刪掉5.7的表,再執行建立表語句即可
運行過mysql_upgrade 之後,再次登入就要求輸入密碼了。
./bin/mysqladmin -uroot -h<HOST> -P<PORT> -p shutdown./bin/mysqld_safe --defaults-file=../my.cnf --datadir=<DATADIR> --basedir=. --port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/98/49/wKioL1k5e02R6d2yAAAp42Sp1Mk740.png-wh_500x0-wm_3-wmp_4-s_549106543.png" title="baa29b7e-52cc-451e-982f-ed5b465983a2.png" alt="wKioL1k5e02R6d2yAAAp42Sp1Mk740.png-wh_50" />
./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p -A
使用的資料庫未使用觸發器,預存程序等,因為在這步就沒有報錯了。如果有使用,可以根據提示資訊,決定是修複還是重建
檢查主從是否正常開啟。
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/98/49/wKiom1k5e17x3wItAABMUAyAfsg017.png-wh_500x0-wm_3-wmp_4-s_4290432077.png" title="8b9f4264-1744-4dbd-b8cc-71e3f5b648b1.png" alt="wKiom1k5e17x3wItAABMUAyAfsg017.png-wh_50" />
根據報錯資訊,應該為relay log記錄的問題,我們重啟下主從。
stop slave;start slave;
這時主從已經恢複正常了,尋找網上的解決方案是reset slave,如果重啟不管用的話只能重搭了,還好升級前記錄了位置點。
本文出自 “Amnesiasun” 部落格,請務必保留此出處http://amnesiasun.blog.51cto.com/10965283/1933652
MySQL 'In Place' 升級實踐,從5.1到5.7