您好,登錄后才能下訂單哦!
接上篇翻譯的文章:使用'In place' 方法直接從5.0升級至5.7,在此記錄我實踐的過程。
1、環境準備
數據庫A
版本:5.1
字符集:latin1
引擎:MyISAM
數據庫量:約220G
表數據量:約600
服務器:centos6.5
2、升級過程
已經搭建好5.1版本數據的從庫,等主從同步之后,開始升級從庫
在第一次升級時遇到問題,執行mysql_upgrade顯示表損壞。
我們在升級前,首先檢查并修復表(MyISAM引擎)。
./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p -r -A
停主從,記錄當前位置點
stop slave; show slave status;
記錄下當前的位置點,并在配置文件中配置主從不隨數據庫啟動
關閉5.1版本數據庫
/etc/init.d/mysqld stop or cd /usr/local/mysql51 ./bin/mysqladmin -uroot --socket=/var/lib/mysql.sock -p'<PASSWORD>' shutdown
修改5.7版本配置文件(具體哪些參數發生了變化,請閱讀文檔,upgrading to 5.1, upgrading to 5.5, upgrading to 5.6 or upgrading to 5.7。
我注釋掉了以下幾項:
<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 = NONE sql_mode ='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
配置文件修改完成后,進入5.7版本文件夾,開啟數據庫,注意使用--skip-grant-tables
cd /usr/local/mysql57 ./bin/mysqld_safe --defaults-file=../my.cnf --datadir=<DATADIR> --basedir=. --port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &
NOTE:如果沒有問題則啟動完成,我遇到的問題是, mysqld_safe 需要在文件夾(/usr/local/mysql57 )內執行
運行mysql_upgrade
./bin/mysql_upgrade -uroot --socket=/var/lib/mysql.sock
簡單說一下升級的過程,mysql_upgrade首先檢查系統庫并修復,檢查并安裝sys庫,performance庫。但并沒有移除5.1默認的test庫。然后開始檢查業務庫,修復不兼容的列。我在測試中主要碰到的提示為:
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 &
再次檢查
./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p -A
使用的數據庫未使用觸發器,存儲過程等,因為在這步就沒有報錯了。如果有使用,可以根據提示信息,決定是修復還是重建
檢查主從是否正常開啟。
根據報錯信息,應該為relay log記錄的問題,我們重啟下主從。
stop slave;start slave;
這時主從已經恢復正常了,查找網上的解決方法是reset slave,如果重啟不管用的話只能重搭了,還好升級前記錄了位置點。
現在數據庫已經能夠提供使用了,整個過程中 check 消耗大約1小時,upgrade 消耗了4小時左右。之后將與‘dump’升級方式進行對比。后面還需要一些數據檢查的工作,由于對數據內容不了解,就沒有繼續進行。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。