mysql升級的一些踩坑點


升級的方法一般有兩類:
1.利用mysqldump來直接導出sql文件,導入到新庫中,這種方法最省事也最保險
缺點:大庫的mysqldump費時費力。
2.直接替換掉 mysql 的安裝目錄和 my.cnf,利用 mysql_upgrade 來完成系統表的升級,這種方法需要備份原有的文件,但屬於物理拷貝,速度較快。
缺點:跨版本升級不推薦這么做,比如mysql5.1升級到mysql5.6,mysql5.5升級到mysql5.7等。
本文采用的是第二種方法升級。
 
本文兩種方法都用到
舊版本 mysql 5.1.73 環境     端口:3306
(1)數據庫安裝目錄:/usr/local/mysql
(2)數據庫數據目錄:/data/mysql
(3)my.cnf位置:/etc/my.cnf
(4)慢日志目錄:/data/mysql/slow-query.log

主要有四個庫:discuz、ljy、zabbix、zrlog(java開發的博客程序)

###################
ps: 本文並不打算把整個升級過程的步驟詳細列出( 被吐槽文章累贅就不好了,網上升級文章還是一大堆的 ),只列出關鍵點、報錯問題解決,及一些個人新發現 ^__^
 
新版本 mysql 5.7.20    端口:4306
(1)安裝目錄:  /data/mysql5-7-20/mysql
(2)數據目錄: /data/mysql5-7-20/data
(3)my.cnf位置: /data/mysql5-7-20/my.cnf  ——》5.7.20並沒有提供sample版本的my.cnf

大部分參數設置跟生產庫的參數設置一樣(5.7.18——》5.7.20)

1、注意上圖中的這個log-error,mysql啟動不成功並不寫入該日志,所以要額外設置啟動mysql不成功的詳細日志路徑
vim /data/mysql5-7-20/mysql/bin/mysqld_safe
  --log-error=*) err_log=. /data/mysql5-7.20/mysqld.log

否則只能單純地看到這個表面信息

 

2、初始化新版本mysql的兩個報錯

(1)需要把舊版本mysql 配置文件下的慢查詢日志注釋掉(這個報錯信息忘了截圖,大家請見諒)
 

cd /data/mysql5-7-20/mysql/bin

./mysqld --user=mysql --datadir=/data/mysql5-7-20/data --basedir=/data/mysql5-7-20/mysql --initialize  (已經不是 ./scripts/mysql_install_db  了)
 
(2)Unable to create temporary file
解決辦法:
1、創建 tmp 目錄:mkdir -p /data/mysql5-7-20/tmp
2、chown -R mysql.mysql /data/mysql5-7-20/tm
這個解決方法找的有點辛苦呢~~~~全靠
【1】開日志(mysqld_safe 下設置 err_log 路徑,更深層次的啟動報錯信息會寫到這里,上面的1)
【2】查stackoverflow
感謝歪果仁的熱心解答(度娘尚需努力哦~)
圖一

初始化mysql 需要一個tmp空間來存放 mysql 進程的私人命名空間,然后最后初始完成后tmp目錄里的東西會自動刪除,所以du -sh 是沒有東西的

 

 圖二

 

 到這一步,兩個mysql啟動是已經沒問題的了

 

3、將舊版本的數據庫及相關表導入到新版mysql
mysqldump並不能導 zabbix、zrlog、及 ljy 庫,因為5.1並不認識 InnoDB 存儲引擎

 然后我居然把 ljy 唯一的表刪掉就以為萬事大吉了(刪庫跑路?),大忌大忌,罪過罪過 = = (所以 ljy 庫就放棄吧)

一氣之下寫了個腳本去掃描 = =

(1)mysqldump 直接導 discuz 庫

mysqldump -uroot -p123456 discuz > /root/db_5.1/discuz.sql
(2)復制  ——》 這種方法還是解決不了問題 = =,后面會說
cp -r /data/mysql/zabbix /data/mysql5-7-20/data/
cp -r /data/mysql/zrlog /data/mysql5-7-20/data/
 
4、升級字典
 cd /data/mysql5-7-20/mysql/bin
./mysql_upgrade -P4306 -S /data/mysql5-7-20/mysql.sock
 
zabbix 和 zrlog 的表查詢報不存在

discuz 有

  • tb_demo.frm,存儲表定義。
  • tb_demo.MYD,存儲數據。
  • tb_demo.MYI,存儲索引
 
zrlog、zabbix 只有 frm

用mysqlcheck也不行,估計是由於存儲引擎都變了,並不支持,只能放棄 zabbix 和 zrlog 庫的導入了

不過大家不用擔心,一般生產上的mysql升級都是循環漸進的,不會跨度這么大(例如,從5.6升級到5.7)

最后修改端口為3306,移動啟動腳本到 /etc/init.d/mysqld ,還有把配置文件放到 /etc/my.cnf (舊版本先備份)即可

 
 


免責聲明!

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



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