MySQL 的在線升級方案


一、MySQL的在線升級方案研究(5.6-5.7)
配置:CentOS下MySQL(5.6)——MySQL(5.7)
升級之前呢,先查看相關官方文檔有哪些注意事項:
·僅在一般可用性(GA)版本之間支持升級。

·支持從 MySQL 5.6 升級到 5.7.

·在升級到下一個version之前,建議升級到最新版本。例如,在升級到 MySQL 5.7 之前升級到最新的 MySQL 5.6 版本。

·不支持跳過版本的升級。例如,不支持直接從 MySQL 5.5 升級到 5.7.
·支持在發行版系列中進行升級。例如,從MySQL5.7升級。x到5.7.支持y。還支持跳過發行版。例如,從 MySQL 5.7 升級。 x到 5.7. 支持z。

1.使用現有的MySQL安裝中的數據目錄進行升級(In-Place升級):
*停止舊的(MySQL 5.6)服務器

*通過將舊二進制文件替換為新二進制文件來升級 MySQL 二進制文件

*正常啟動 MySQL 5.7 服務器(無特殊選項)

*Run mysql_upgrade升級系統表

*重啟 MySQL 5.7 服務器

2.通過重新加載從現有MySQL安裝生成的轉儲文件進行升級(數據的導入導出,邏輯升級)
*從以前的 MySQL 安裝中導出現有數據:

mysqldump -u root -p
--add-drop-table --routines --events
--all-databases --force > data-for-upgrade.sql

*關閉舊的 MySQL 服務器:

mysqladmin -u root -p shutdown

*安裝 MySQL 5.7
*初始化一個新的數據目錄:

mysqld --initialize --datadir=/path/to/5.7-datadir

  


*使用新數據目錄啟動 MySQL 5.7 服務器:

--mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &

  


*登錄MySQL重置密碼:

shell> mysql -u root -p
Enter password: **** <- enter temporary root password

mysql> ALTER USER USER( ) IDENTIFIED BY 'password';

  


*將先前創建的轉儲文件加載到新的 MySQL 服務器中
*Run mysql_upgrade然后重新啟動MySQL確保所做的更改已經全部生效

3.使用 MySQL Yum Repository 升級 MySQL

4.使用 Directly-Downloaded RPM 軟件包升級 MySQL

5.利用主從架構進行數據庫不停機的在線升級
切主從需要考慮幾點:
1、主庫、從庫硬件配置是否差異過大
2、項目內的數據庫url是否需要修改
3、是否需要花錢再買一台機子做從庫

數據庫升級測試:
要求:
1、數據庫停機時間最短
2、數據庫數據最快還原
3、不用改項目中url配置

配置:CentOS下MySQL(5.6-47)

單機版本升級:
停庫 ——> 備份 ——> 安裝 ——> 拉起 ——> 更新

查看當前MySQL版本:

[root@MySQL ~]# mysql -p123456 -e "\s" |grep 'Server version' |awk '{print $3}'
Warning: Using a password on the command line interface can be insecure.
5.6.47
停庫:[root@MySQL ~]#service mysqld stop
備份:cp -r /data/mysql /data/mysql_bak
升級新版本:
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
啟動:[root@MySQL local]# unlink mysql
[root@MySQL local]# ln -s mysql-5.7.23-el7-x86_64/ mysql
[root@MySQL local]# /etc/init.d/mysql.server start
Starting MySQL.. SUCCESS!
更新:[root@MySQL local]# mysql_upgrade -s
The --upgrade-system-tables option was used, databases won't be touched.
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading the sys schema.
Upgrade process completed successfully.
Checking if update is needed.
[root@MySQL ~]#service mysqld restart
Shutting down MySQL.... SUCCESS! 
Starting MySQL. SUCCESS! 
重啟MySQL以確保對系統表所做的任何更改都生效:
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
查看新版本:[root@MySQL ~]# mysql -p123456 -e "\s" |grep 'Server version' |awk '{print $3}'
Warning: Using a password on the command line interface can be insecure.
5.7.23	

  


場景:
xtrabackup 備份mysql5.6
停機,數據庫升級到5.7
使用備份文件還原到5.7
把binlog 末尾位置作為起點,導入原mysql5.6的sql

將MySQL5.6.47-MySQL5.7.15 測試過程記錄如下:
step1:必須備份數據庫(Xtrabackup)

[root@localhost local]# innobackupex --defaults-file=/usr/my.cnf --user=root --password=123456 --socket=/var/lib/mysql/mysql.sock /mysqlbk

  


備份完成后輸出:200401 10:01:50 completed OK!

step2:關閉MySQL數據庫:

mysql> set global innodb_fast_shutdown=0 

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.47 |
+-----------+
1 row in set (0.05 sec)


[root@localhost local]# /etc/init.d/mysql stop
Shutting down MySQL.... SUCCESS!

  

step3:卸載MySQL5.6的base目錄,然后建立新版本的目錄鏈接,修改權限

[root@localhost lib]# ln -sv /usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64 /var/lib/mysql
‘/var/lib/mysql’ -> ‘/usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64’
[root@localhost lib]# chown -R mysql:mysql /var/lib/mysql
[root@localhost lib]# chown -R mysql:mysql /usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64
[root@localhost lib]# cp /usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64/support-files/mysql.server /etc/init.d/mysql
cp: overwrite ‘/etc/init.d/mysql’? y

  


step4:替換my.cnf並恢復數據

[root@localhost local]# innobackupex --defautls-file=/mysqlbk/my.cnf --apply-log --redo-only /mysqlbk/2020-04-01_10-01-48/
200401 10:29:11 innobackupex: Starting the apply-log operation
恢復返回結果;200401 10:29:12 completed OK!

  


step5:啟動數據庫

[root@localhost lib]# /etc/init.d/mysql start
Starting MySQL.... SUCCESS!	

  


//這一步出現了一個錯誤,數據庫起不來
主要表現為這幾個錯誤:
MySQL啟動時找不到sock文件,find全局也沒有,於是想利用初始化重新啟動
利用MySQL5.6初始化命令提示:

[root@localhost bin]# ./mysql_install_db --defaults-file=/usr/my.cnf --datadir=/usr/local/mysql/data
2020-04-01 13:47:35 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
2020-04-01 13:47:39 [ERROR] The bootstrap log isn‘t emport
2020-04-01 13:47:39 [ERROR] 2020-04-01T05:47:35.777961Z 0 [Warning] --bootstrap is deprecated. Please consider using --initialize instead

  


該命令已經廢棄了,建議使用 --initialize 選項
中間因為操作命令有誤,出現了這個錯誤

2020-04-01 11:19:33 3687 [Note] Plugin ’FEDERATED‘ is disabled.
mysqld: Table 'mysql.plugin' doesn‘t exist
2020-04-01 11:19:33 3687 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.

  


最終參考資料:

./mysqld --initialize --user=root --datadir=/usr/local/mysql/data/ --innodb_data_file_path=ibdata1:1G:autoextend

  


成功啟動MySQL 並登錄

step6:執行mysql_upgrade腳本升級

[root@localhost bin]# mysql_upgrade -uroot -p123456

  



升級后發現在Linux界面 mysql --version 顯示:

[root@localhost mysql]# mysql --version
mysql Ver 14.14 Distrib 5.6.47, for Linux (x86_64) using EditLine wrapper

  


而在MySQL運行:

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.15 |
+-----------+
1 row in set (0.00 sec)

  

后來確定原因是Linux層面的環境變量問題 配置到$PATH 后:

[root@localhost mysql]# mysql --version
mysql Ver 14.14 Distrib 5.7.15, for linux-glibc2.5 (x86_64) using EditLine wrapper

  

 

 


免責聲明!

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



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