1、概述mysql
Linux MySQL 5.7二進制 小版本升級,升級前須要備份數據和mysql主配置文件my.cnf 對數據字典的升級數據字典有:mysql、information_schema、performance_schema、sys schema。 MySQL升級的兩種方式: in-place upgrade: 適合小版本的升級。 即 關閉當前的MySQL,替換當前的二進制文件或包,在現有的數據目錄上重啓MySQL,並運行mysql_upgrade. 特色:不改變數據文件,升級速度快;但,不能夠跨操做系統,不能夠跨大版本(5.5—>5.7). logical upgrade: 適合不一樣操做系統的MySQL升級,大版本之間的升級。 即:使用mysqldump 或 mydumper 導入導出數據,實現版本的升級。 特色:能夠跨操做系統,跨大版本;但,升級速度慢,容易出現亂碼等問題。
2、小版本升級
in-place upgrade方式linux
in-place upgrade包括關閉舊的MySQL服務器,用新的MySQL服務器替換舊的MySQL二進制文件或軟件包,在現有數據目錄上從新啓動MySQL,以及運行mysql_upgrade。 2.1 XA事務InnoDB 若是您使用XA事務InnoDB,請XA RECOVER在升級以前運行以檢查未提交的XA事務。若是返回結果,則經過發出XA COMMIT或 XA ROLLBACK聲明來提交或回滾XA事務。 2.2 配置MySQL以經過設置innodb_fast_shutdown爲 執行慢速關閉 0。 mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0" 在關閉過程當中,InnoDB執行徹底清除並在關閉以前更改緩衝區合併,這可確保在發佈版本之間存在文件格式差別時徹底準備好數據文件。 2.3 關閉舊的MySQL服務器 mysqladmin -u root -p shutdown 2.4 安裝新的MySQL二進制包 下載,解壓新的MySQL二進制分發包; 受權:chown -R mysql.mysql /usr/loacl/mysql_new 把MySQL的軟鏈接指向新的mysql服務 unlink /usr/loacl/mysql ln -s /usr/loacl/mysql_new /usr/loacl/mysql 2.5 使用現有數據目錄啓動新MySQL 5.7服務器 mysqld_safe --user=mysql --datadir=/path/to/existing-datadir 2.6 運行mysql_upgrade mysqlcheck --no-defaults --check-upgrade --databases --auto-repair /usr/loacl/mysql_new/bin/mysql_upgrade -u root -p mysql_upgrade檢查全部數據庫中的全部表是否與當前版本的MySQL不兼容。mysql_upgrade還會升級mysql系統數據庫,以便您能夠利用新的權限或功能。 注意 mysql_upgrade不會升級幫助表的內容。 2.7 關閉並從新啓動MySQL服務器以確保對系統表所作的任何更改都生效 mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
logical upgradesql
邏輯升級涉及使用備份或導出實用程序(如mysqldump)從舊MySQL實例導出SQL ,安裝新的MySQL服務器以及將SQL應用於新的MySQL實例。 簡單說明邏輯升級就是導出數據,而後升級,最後再導入數據;安全性高,主要針對數據量不大的數據庫;經常使用的工具:mysqldump和Xtrabackup。 3.1 從之前的MySQL安裝中導出現有數據: mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql 注意 若是數據庫包含存儲的程序, 請使用--routines和 mysqldump的--events選項 (如上所示)。該 選項包括轉儲中的全部數據庫,包括保存系統表的 數據庫。 --all-databasesmysql 重要 若是您有包含生成列的表,請使用MySQL 5.7.9或更高版本提供的mysqldump實用程序來建立轉儲文件。早期版本中提供的 mysqldump實用程序對生成的列定義使用了錯誤的語法(Bug#20769542)。您可使用該 INFORMATION_SCHEMA.COLUMNS 表來標識具備生成列的表。 3.2 關閉舊的MySQL服務器 mysqladmin -u root -p shutdown 3.3 安裝MySQL 5.7 參考: mysql 5.7.21 二進制安裝 3.4 初始化新數據目錄 mysqld --initialize --datadir=/path/to/5.7-datadir 複製'root'@'localhost' 顯示在屏幕上的臨時密碼或寫入錯誤日誌以供往後使用。 3.5 使用新數據目錄啓動MySQL 5.7服務器: mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir 3.6 重置root密碼: shell> mysql -u root -p Enter password: **** <- enter temporary root password mysql> ALTER USER USER() IDENTIFIED BY 'your new password'; 3.7 將先前建立的轉儲文件加載到新的MySQL服務器中 mysql -u root -p --force < data-for-upgrade.sql 注意 gtid_mode=ON若是轉儲文件包含系統表, 則不建議在服務器()上啓用GTID時加載轉儲文件。 mysqldump爲使用非事務性MyISAM存儲引擎的系統表發出DML指令,而且在啓用GTID時不容許這種組合。另請注意,將啓用了GTID的服務器中的轉儲文件加載到啓用了GTID的另外一臺服務器中會致使生成不一樣的事務標識符。 3.8 運行mysql_upgrade mysql_upgrade -u root -p mysql_upgrade檢查全部數據庫中的全部表是否與當前版本的MySQL不兼容。mysql_upgrade還會升級mysql系統數據庫,以便您能夠利用新的權限或功能。 注意 mysql_upgrade不會升級幫助表的內容。 3.9 關閉並從新啓動MySQL服務器以確保對系統表所作的任何更改都生效。 mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir
3、大版本升級
概述shell
升級前的準備: 提早作好備份。 瞭解新版本變動的信息(哪些再也不兼容,再也不支持哪些功能) 在官方網站的general information—>what is new in mysql 5.7 升級的注意事項: 確認新版本是否有重大變動 注意 SQL mode 的變化 好比:在MySQL5.7中發生了SQL mode的變化,對再也不支持的SQL mode,部分SQL會跑不通,此時能夠清空SQL mode,跑完以後在設置SQL mode。 升級成功後,確認業務SQL是否能夠跑通 程序層是否都正常 有時原使用的程序語言部份內容不被支持新版本數據庫。好比,在5.1時用的是PHP4.0,但升級到5.6,PHP的某些函數不被支持。 在升級完成以後,必定要在測試時使用和線上版本相同的程序,測試是否存在問題。 存儲引擎的變化 好比:在將來的5.8版本,再也不支持myisam 引擎。 注意字符集的亂碼問題
in-place upgrade數據庫
環境: 5.6.15 —>5.7.26 升級前的準備: 備份+留意新版本的變動內容 升級操做: 一、對5.7的軟件包,下載,解壓 #tar -xzvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql5.7 二、關閉當前MySQL(5.6) #mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0" #mysqladmin -u root -p shutdown 三、替換二進制文件(5.7 替換 5.6) #cd /usr/local #mv mysql mysql5.6 #mv mysql5.7 mysql 四、使用現有的數據目錄啓動MySQL #mysqld_safe --user=mysql -p --skip-grant-tables --datadir=/data/mysql/data 五、檢查全部表是否與當前版本兼容,並更新系統庫 #mysql_upgrade -uroot -p 注:mysql_upgrade的做用是檢查全部庫的全部表是否與當前的新版本兼容,並更新系統庫。 六、重啓,確保對系統表所作的變動得以生效 #mysqld --defaults-file=/etc/my.cnf & #mysql -uroot -p 至此,升級完成。
跨大版本升級centos
一 數據備份 (1)查看當前版本: [root@centos ~]# mysql -V (2)備份數據: [root@centos ~]# mysqldump -u root -h 127.0.0.1 -P 3306 -p --all-databases > databases.sql (3)備份my.cnf配置文件: [root@centos ~]# cp /etc/my.cnf /home/ #在關閉MySQL的進程後開始升級 [root@localhost ~]# cd /usr/local/ [root@localhost local]# rm -rf mysql [root@localhost local]# tar -jxvf /usr/local/src/mysql-5.7.26-linux-glibc2.5-x86_64.tar.bz2 -C ./ [root@localhost local]# mv mysql-5.7.26-linux-glibc2.5-x86_64 mysql [root@localhost local]# cat /etc/ld.so.conf.d/mysql.conf#檢查lib路徑是不是對的/usr/local/mysql/lib [root@localhost local]# ldconfig -v#從新加載最新的包到系統中,注意若是是依賴於MySQL的一些軟件可能須要從新編譯 [root@localhost local]# /etc/init.d/mysqld start#嘗試啓動,注意在MySQL 5.7中部分變量參數有取消,最好是在另一臺已安裝的MySQL 5.7的服務器上查詢my.cnf中的變量是否有存在,如不存在說明在新版本中已取消該參數須要刪除直到啓動爲止 [root@localhost local]# /usr/local/mysql/bin/mysql_upgrade -u root -p#使用mysql_upgrade更新升級 在支持mysql_upgrade中會對舊版本的數據進行檢查修改,確認升級成功後會進行升級,在升級完成後在databasedir下會生成mysql_upgrade_info記錄最新的MySQL版本,啓動MySQL,升級完畢
4、數據庫升級建議及注意事項安全
升級部分並沒有太多區別和不一樣,更多須要注意版本升級後的不兼容,特性或函數的引用,以及SQL_mode的變動,須要業務進行配合測試,導致升級後數據與原數據無異樣,纔算升級成功,望知悉,並有測試環境進行配合測試。