linux mysql5.5升級(jí)至mysql5.7的步驟與踩到的坑
linux mysql5.5升級(jí)至mysql5.7
下面先分享一個(gè)簡(jiǎn)單的升級(jí)mysql的步驟,后面腳本之家小編為大家整理了多個(gè)補(bǔ)充,大家可以參考一下。
1.下載mysql5.7.32
官方下載地址 https://dev.mysql.com/downloads/mysql/
解壓
tar xvf mysql.tar.gz mysql/
2. 進(jìn)入舊的mysql的bin目錄下導(dǎo)出mysql的數(shù)據(jù)
./mysql -uroot -pxxxx -h127.0.0.1 -P3306 </home/mysql5.5/bin/all.sql
3. 進(jìn)入新的mysql根目錄下創(chuàng)建存放數(shù)據(jù)的data目錄
mkdir data
4. 對(duì)于剛解壓的新數(shù)據(jù)庫(kù),首先執(zhí)行初始化命令
cd bin
./mysql_install_db --basedir=../ --datadir=../data
PS: 以上升級(jí)是在Cent OS上的,但是在中標(biāo)麒麟我升級(jí)的時(shí)候,發(fā)現(xiàn)不認(rèn)識(shí)上面的語(yǔ)句,需要替換成下面這個(gè)初始化語(yǔ)句
./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root --initialize
5. 設(shè)置跳過(guò)密碼登錄
在my.cnf 中的[mysqld]中添加skip-grant-tables
my.cnf 為數(shù)據(jù)庫(kù)的配置文件
6. 啟動(dòng)服務(wù)
./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root
7. 設(shè)置密碼
在新的命令行窗口登錄mysql
./mysql -uroot
use mysql;
update mysql.user set authentication_string=password('xxxx') where user='root';
8. 停止服務(wù)
注釋掉配置文件中的skip-grant-tables
9. 啟動(dòng)服務(wù)
./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root
10. 新命令行登錄
./mysql -uroot -pxxxx
use mysql;
這個(gè)時(shí)候:不管運(yùn)行任何命令,總是提示這個(gè) You must reset your password using ALTER USER statement before executing this statement.
這時(shí)執(zhí)行下面的語(yǔ)句
SET PASSWORD = PASSWORD('xxxx');
11. 設(shè)置其他ip可以連接mysql
use mysql;
grant all privileges on *.* to "root"@"%" identified by "xxxx";
12. 導(dǎo)入歷史數(shù)據(jù)
cd bin
./mysql -uroot -pxxxx -h127.0.0.1 -P3306 </home/mysql5.5/bin/all.sql
13. 執(zhí)行更新
cd bin
./mysql_upgrade
14. 升級(jí)后可能出現(xiàn)查詢語(yǔ)句出現(xiàn)報(bào)錯(cuò)的情況,可執(zhí)行下面的語(yǔ)句
set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
下面是其他網(wǎng)友的補(bǔ)充
MySQL從5.5升級(jí)到5.7
最近有個(gè)任務(wù)將MySQL從5.5版本升級(jí)到5.7,沒(méi)升級(jí)過(guò)數(shù)據(jù)庫(kù),只能摸索的前進(jìn)。上網(wǎng)找了一堆資料。目測(cè)看只有兩種升級(jí)方式
1.升級(jí)方式
1.Logical Upgrade(邏輯升級(jí)):利用mysqldump來(lái)直接導(dǎo)出SQL文件,然后起一個(gè)新的MySQL5.7庫(kù),將導(dǎo)出的SQL文件導(dǎo)入到新庫(kù)中,當(dāng)然如果采用這種方式的話建議不要用mysqldump而使用mydumper.因?yàn)槲覀児镜臄?shù)據(jù)量很大所以沒(méi)有采用這個(gè)方法來(lái)處理。
2.In-Place Upgrade:這個(gè)升級(jí)方法簡(jiǎn)單快速,就是直接替換原來(lái)的MySQL的安裝目錄和/etc/my.cnf配置文件,利用mysql_upgrade腳本來(lái)完成系統(tǒng)表的升級(jí)。
2.環(huán)境介紹
我們的mysql集群采用的是Atlas讀寫(xiě)分離,mysql-proxy下有4臺(tái)數(shù)據(jù)庫(kù)服務(wù)器:
master: 172.16.100.1
slave1:172.16.100.2
slave2:172.16.100.3
slave3:172.16.100.4
當(dāng)前數(shù)據(jù)庫(kù)版本:”5.5.21
配置文件:/etc/my.cnf
數(shù)據(jù)目錄:/data/mysql
操作系統(tǒng)版本:CentOS6.9
3.升級(jí)思路
因?yàn)槭蔷€上業(yè)務(wù)不能中斷,所以決定先將其中一臺(tái)slave踢出集群,并升級(jí)到mysql5.7,然后再講mysql5.7這臺(tái)設(shè)備加入到集群當(dāng)中,等數(shù)據(jù)同步完了再做主備切換,再升級(jí)其他的slave節(jié)點(diǎn)。
4.實(shí)在演練
4.1.登陸到mysql-proxy中將其中一臺(tái)從庫(kù)從集群中踢出
mysql -uuser -ppwd -h127.0.0.1 -P234
查看后端代理庫(kù)
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)
將服務(wù)172.16.100.4從集群中踢出
mysql> remove backend 4
4.2.替換mysql的安裝目錄
到mysql的官網(wǎng)下載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目錄是鏈接的方式創(chuàng)建的話,那么只需要取消鏈接,從新做一下鏈接就可以了
cd /usr/local/
unlink mysql
ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql
如果你之前的mysql目錄不是鏈接的方式,那么重新命名一下,再鏈接一個(gè)mysql目錄就可以了
cd /usr/local/
mv mysql mysql5.5
ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql(建議盡可能的使用這種方式,比較方便升級(jí))
4.3.啟動(dòng)mysql服務(wù)
mysql5.7以后是不需要進(jìn)行數(shù)據(jù)庫(kù)初始化的,也就是不用去執(zhí)行mysql_install_db這個(gè)命令
/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql --skip-grant-tables --skip-networking &
ps -ef |grep mysql
如果有出息錯(cuò)誤的話查看日志信息
4.4.升級(jí)系統(tǒng)表數(shù)據(jù)字典信息,命令如下:
/usr/loca/mysql/bin/mysql_upgrade
輸出的結(jié)果:
可能會(huì)有一些error提示"ALTER TABLE ** FROCE",這些錯(cuò)誤不用擔(dān)心mysql在后面會(huì)自動(dòng)修復(fù)repair的時(shí)間可能會(huì)有點(diǎn)長(zhǎng),要看你的數(shù)據(jù)庫(kù)情況,我這次升級(jí)花了兩個(gè)多小時(shí)
最后如果輸出Upgrade process completed successfully那么就表示升級(jí)成功了。
4.5.升級(jí)完以后重啟一下mysql
/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql &
查看一下是否升級(jí)完了,如果升級(jí)成功的話輸出如下
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;
如果兩個(gè)yes就說(shuō)明正常了
4.7加入到讀寫(xiě)分離的集群中
到mysql-proxy設(shè)備上面
mysql -uuser -ppwd -h127.0.0.1 -P234
mysql> ADD SLAVE 172.16.100.4
mysql> select * from backends;
如果state的狀態(tài)是up的就說(shuō)明加入集群成功了。
后記:
我第一次升級(jí)數(shù)據(jù)庫(kù),不知道整體思路對(duì)不對(duì),先在測(cè)試環(huán)境上面做的測(cè)試,然后又測(cè)了幾天沒(méi)有問(wèn)題了才在線上做的升級(jí)。僅供參考。
Mysql5.5升級(jí)到5.7的過(guò)程已經(jīng)踩到的坑
故事是這樣子的,我們公司有幾臺(tái)老的mysql版本是5.5的,最近項(xiàng)目做了一些升級(jí)增加了幾個(gè)字段,用spring-data-jpa自動(dòng)刷新表結(jié)構(gòu)的時(shí)候報(bào)錯(cuò)了,原因是mysql5.5的版本不支持一張表里面有兩個(gè)以上的 current_timestamp 作為default value。所以就要考慮升級(jí)下數(shù)據(jù)庫(kù)
先到服務(wù)器上面看了下版本
再看了下源
哦,順帶提一句,我們公司在用的aws 的 ec2 ,所以都是amz的源
試了下 yum update mysql-server 然后并沒(méi)什么卵用,所以繼續(xù)往下搞。
網(wǎng)上看了好多都說(shuō)是先把舊版本的數(shù)據(jù)庫(kù)卸載了再用裝新版本的數(shù)據(jù)庫(kù),那我的里面的數(shù)據(jù)咋辦,為了保險(xiǎn)起見(jiàn),我先辦數(shù)據(jù)庫(kù)做了個(gè)備份,一個(gè)庫(kù)一個(gè)庫(kù)的備份,我看mysql庫(kù)里面也配了好多用戶和權(quán)限,就順便也把mysql備份了,然后開(kāi)搞。
1、卸載數(shù)據(jù)庫(kù)
yum remove mysql-server
但是我們這邊裝的好像不太一樣,我就把剛才yum查到的幾個(gè)都卸載了。
卸載前記得把mysql服務(wù)關(guān)掉,要不然裝新版本之后用mysql --version 查看是5.7 mysql 登錄進(jìn)去還是5.5然后重啟服務(wù)就各種問(wèn)題。因?yàn)橛行┪募](méi)被刪掉,導(dǎo)致新裝的數(shù)據(jù)庫(kù)好奇怪的樣子。。。
2、安裝新數(shù)據(jù)庫(kù)
yum search mysql57
先看看有什么版本可以選,這個(gè)沒(méi)啥說(shuō)的直接
yum install msyql57-server.x86_64
安裝下來(lái)就ok,來(lái)看看都裝了些啥東西
很奇怪一點(diǎn)就是mysql-config依賴竟然還是5.5的,不過(guò)用起來(lái)沒(méi)發(fā)現(xiàn)啥問(wèn)題
3、配置
安裝好了之后修改以下my.cnf
我的服務(wù)器上面是在/etc/my.cnf 不知道其它的鏡像有沒(méi)有變化
在配置的時(shí)候我突然想到數(shù)據(jù)存儲(chǔ)的空間是還在的啊,配過(guò)去看看能用不
于是就在my.cnf配了這一行(5.5的好多配置都棄用了,之前的my.cnf里面的都要?jiǎng)h一刪要不然啟動(dòng)時(shí)會(huì)報(bào)錯(cuò))
配置之后果斷啟動(dòng)服務(wù)
service mysqld start
果然報(bào)錯(cuò)了
看了下啟動(dòng)日志
[ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.
ERROR: Zend_Db_Adapter_Exception: SQLSTATE[HY000] [2002] No such file or directoryAdditionally, an exception has occurred while trying to report this error: Zend_ExceptionNo entry is registered for key 'translate' (Abstract.php:144)
臥槽,這咋辦google一波 搜到了這篇文章https://support.plesk.com/hc/en-us/articles/115001659169-MySQL-fails-to-start-mysql-user-table-is-damaged
具體解決方法如下
a. 登錄到那臺(tái)服務(wù)器主機(jī)上面
b. Add skip-grant-tables in /etc/my.cnf
file under [mysqld]
section 意思就是開(kāi)啟安全模式(不驗(yàn)證密碼什么的)
c. service mysqld start
d. mysql_upgrade
e. service mysqld restart
我執(zhí)行了一下mysql_upgrade
查了查官方文檔,大體意思就是升級(jí)之后好多東西不怎么兼容,官方提供這個(gè)腳本來(lái)修復(fù)之前的工作空間
果然是無(wú)縫升級(jí)mysql數(shù)據(jù)庫(kù)中的用戶都還在之前的數(shù)據(jù)庫(kù)也沒(méi)有受到影響
至此升級(jí)完成
到此這篇關(guān)于linux mysql5.5升級(jí)至mysql5.7的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)mysql5.5升級(jí)至5.7內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Centos MySQL 5.7安裝、升級(jí)教程
- Win下Mysql5.6升級(jí)到5.7的方法
- ubuntu下mysql版本升級(jí)到5.7
- 升級(jí)到MySQL5.7后開(kāi)發(fā)不得不注意的一些坑
- phpstudy2018升級(jí)MySQL5.5為5.7教程(圖文)
- Docker版的MySQL5.7升級(jí)到MySQL8.0.13,數(shù)據(jù)遷移
- MySQL 5.7.30 安裝與升級(jí)問(wèn)題詳細(xì)教程
- MySQL5.6升級(jí)5.7時(shí)出現(xiàn)主從延遲問(wèn)題排查過(guò)程
- mysql-5.7.42升級(jí)到mysql-8.2.0(二進(jìn)制方式)
- Mysql數(shù)據(jù)庫(kù)5.7升級(jí)到8.4的實(shí)現(xiàn)
相關(guān)文章
Mysql性能調(diào)優(yōu)之max_allowed_packet使用及說(shuō)明
這篇文章主要介紹了Mysql性能調(diào)優(yōu)之max_allowed_packet使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11MySQL的日志基礎(chǔ)知識(shí)及基本操作學(xué)習(xí)教程
這篇文章主要介紹了MySQL的日志基礎(chǔ)知識(shí)學(xué)習(xí)教程,包括MySQL中日志相關(guān)常用的服務(wù)器變量說(shuō)明,極力推薦!需要的朋友可以參考下2015-11-11MySQL中ADD?COLUMN添加多個(gè)字段的寫(xiě)法實(shí)例
這篇文章主要給大家介紹了關(guān)于MySQL中ADD?COLUMN添加多個(gè)字段的寫(xiě)法實(shí)例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02mysql如何查詢兩個(gè)日期之間最大的連續(xù)登錄天數(shù)
在現(xiàn)在的很多網(wǎng)站中都有這樣一個(gè)功能。記錄用戶的連續(xù)登陸天數(shù),所謂的連續(xù)在線是指相鄰兩天都登錄過(guò),不一定一直在線,但是只要有過(guò)登錄即可。這篇文章主要介紹的是利用sql語(yǔ)句如何查詢?cè)趦蓚€(gè)日期之間最大的連續(xù)登錄天數(shù),有需要的朋友們下面來(lái)一起看看吧。2016-10-10MySQ實(shí)現(xiàn)XA事務(wù)的具體使用
XA事務(wù)是一種分布式事務(wù)處理協(xié)議,本文主要介紹了MySQ實(shí)現(xiàn)XA事務(wù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07解決當(dāng)MySQL數(shù)據(jù)庫(kù)遇到Syn Flooding問(wèn)題
Syn攻擊常見(jiàn)于應(yīng)用服務(wù)器,而數(shù)據(jù)庫(kù)服務(wù)器在內(nèi)網(wǎng)中,應(yīng)該很難碰到類似的攻擊,這篇文章主要介紹了當(dāng)MySQL數(shù)據(jù)庫(kù)遇到Syn Flooding問(wèn)題 ,需要的朋友可以參考下2019-06-06關(guān)于mysql主備切換canal出現(xiàn)的問(wèn)題解決
這篇文章主要給大家介紹了關(guān)于mysql主備切換canal出現(xiàn)的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Mysql匿名登錄無(wú)法創(chuàng)建數(shù)據(jù)庫(kù)問(wèn)題解決方案
這篇文章主要介紹了Mysql匿名登錄無(wú)法創(chuàng)建數(shù)據(jù)庫(kù)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12