MySQL從5.5升級到5.7


最近有個任務將MySQL從5.5版本升級到5.7,沒升級過數據庫,只能摸索的前進。上網找了一堆資料。目測看只有兩種升級方式

1.升級方式

1.Logical Upgrade(邏輯升級):利用mysqldump來直接導出SQL文件,然后起一個新的MySQL5.7庫,將導出的SQL文件導入到新庫中,當然如果采用這種方式的話建議不要用mysqldump而使用mydumper.因為我們公司的數據量很大所以沒有采用這個方法來處理。

2.In-Place Upgrade:這個升級方法簡單快速,就是直接替換原來的MySQL的安裝目錄和/etc/my.cnf配置文件,利用mysql_upgrade腳本來完成系統表的升級。

2.環境介紹

我們的mysql集群采用的是Atlas讀寫分離,mysql-proxy下有4台數據庫服務器:

master: 172.16.100.1

slave1:172.16.100.2

slave2:172.16.100.3

slave3:172.16.100.4

當前數據庫版本:”5.5.21

配置文件:/etc/my.cnf

數據目錄:/data/mysql

操作系統版本:CentOS6.9

3.升級思路

因為是線上業務不能中斷,所以決定先將其中一台slave踢出集群,並升級到mysql5.7,然后再講mysql5.7這台設備加入到集群當中,等數據同步完了再做主備切換,再升級其他的slave節點。

4.實在演練

4.1.登陸到mysql-proxy中將其中一台從庫從集群中踢出

mysql -uuser -ppwd -h127.0.0.1 -P234

查看后端代理庫
mysql> SELECT * FROM backends; +-------------+-------------------+-------+------+ | backend_ndx | address | state | type | +-------------+-------------------+-------+------+ | 1 | 172.16.100.1:3306 | up | rw | | 2 | 172.16.100.2:3306 | up | ro | | 3 | 172.16.100.3:3306 | up | ro | | 4 | 172.16.100.4:3306 | up | ro |
+-------------+-------------------+-------+------+

5 rows in set (0.00 sec)
將服務172.16.100.4從集群中踢出
mysql> remove backend 4

4.2.替換mysql的安裝目錄

到mysql的官網下載mysql5.7版本mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

解壓mysql5.7

tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C  /usr/local/

如果你之前的mysql目錄是鏈接的方式創建的話,那么只需要取消鏈接,從新做一下鏈接就可以了

cd /usr/local/

unlink mysql

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql

如果你之前的mysql目錄不是鏈接的方式,那么重新命名一下,再鏈接一個mysql目錄就可以了

cd /usr/local/

mv mysql mysql5.5

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql(建議盡可能的使用這種方式,比較方便升級)

 

4.3.啟動mysql服務

mysql5.7以后是不需要進行數據庫初始化的,也就是不用去執行mysql_install_db這個命令

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql --skip-grant-tables --skip-networking &

ps -ef  |grep mysql

如果有出息錯誤的話查看日志信息

 

4.4.升級系統表數據字典信息,命令如下:

/usr/loca/mysql/bin/mysql_upgrade

輸出的結果:

可能會有一些error提示"ALTER TABLE ** FROCE",這些錯誤不用擔心mysql在后面會自動修復repair的時間可能會有點長,要看你的數據庫情況,我這次升級花了兩個多小時

最后如果輸出Upgrade process completed successfully那么就表示升級成功了。

 

4.5.升級完以后重啟一下mysql

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql &

查看一下是否升級完了,如果升級成功的話輸出如下

This installation of MySQL is already upgraded to 5.7.23, use --force if you still need to run mysql_upgrade

 

4.6.重新做一下主從配置

重做一下主從配置

mysql> change master to master master_host="172.16.100.1",master_user="***",master_passowrd="***",master_log_file=" mysql-bin.000004", master_log_pos=1083;

mysql> start slave;

mysql> show slave status\G;

如果兩個yes就說明正常了

4.7加入到讀寫分離的集群中

到mysql-proxy設備上面

mysql -uuser -ppwd -h127.0.0.1 -P234

mysql> ADD SLAVE 172.16.100.4

mysql> select * from backends;
如果state的狀態是up的就說明加入集群成功了。

 

后記:

我第一次升級數據庫,不知道整體思路對不對,先在測試環境上面做的測試,然后又測了幾天沒有問題了才在線上做的升級。僅供參考。

 

 

 

 


免責聲明!

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



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