使用In-Place Upgrade將MySQL5.6.24升級(jí)到MySQL5.7.26.md

升級(jí)方法介紹

MySQL升級(jí)方式有兩種诚卸,一種叫In-Place Upgrade,另一種叫Logical Upgrade (邏輯升級(jí)方式)绘迁。

Logical Upgrade:利用mysqldump來直接導(dǎo)出SQL文件合溺,然后導(dǎo)入到新庫(kù)中,適應(yīng)于跨大版本的升級(jí)方案缀台,做法相對(duì)安全棠赛,并能整理表中碎片。但如果有數(shù)據(jù)量較大的庫(kù)需要mysqldump導(dǎo)出膛腐,時(shí)間上的消耗就會(huì)很大睛约,升級(jí)效率就會(huì)受到影響。

In-Place Upgrade:它的工作方法簡(jiǎn)單快速哲身,就是直接替換掉原來版本MySQL的安裝目錄和my.cnf配置文件辩涝,利用mysql_upgrade腳本來完成系統(tǒng)表的升級(jí)。

本文演示使用In-Place Upgrade升級(jí)MySQL律罢。

升級(jí)步驟

操作之前膀值,查看版本

# /usr/local/mysql/bin/mysql -V
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.6.24-72.2, for Linux (x86_64) using  6.0

設(shè)置參數(shù)innodb_fast_shutdown為0

需要將innodb_fast_shutdown參數(shù)設(shè)置為0

#mysql -u root -pp@ssw0rd --execute="SET GLOBAL innodb_fast_shutdown=0"

set global innodb_fast_shutdown=0;

注:innodb_fast_shutdown有 0、1误辑、2 三個(gè)值沧踏。

參數(shù)值為0代表MySQL關(guān)閉,InnoDB需要完成所有的full purge和merge Insert buffer操作巾钉,這個(gè)過程需要一定的時(shí)間翘狱,有時(shí)可能會(huì)花上幾個(gè)小時(shí)。

參數(shù)值為1是該參數(shù)的默認(rèn)值砰苍,表示關(guān)閉MySQL時(shí)不完成full purge和Merge insert buffe操作潦匈,但是緩沖池中的臟頁(yè)還是會(huì)寫到磁盤中。

參數(shù)值為2時(shí)赚导,表示既不完成full purge和Merge insert buffer操作茬缩,也不將緩沖池中的臟頁(yè)刷新到磁盤,而是將日志寫入日志文件中吼旧。

關(guān)閉MySQL服務(wù)

命令如下:

# myadm stop
Port 3306 Instance being shutdown
Port 3307 Instance being shutdown

# dbs
=========================================
 PORT   STATUS   BUFFER_POOL   DATABASE
 3306   [Down]       [2G]      dbmonitor zlz
 3307   [Down]       [2G]      dbmonitor zlz

[root@source bin]# /usr/local/mysql/bin/mysqladmin -uroot -poracle123 shutdown

替換MySQL軟件

將MySQL5.7的安裝包拷貝到目標(biāo)機(jī)器:

#scp  tool_mysql57_ssd.tar.gz root@10.x.x.x:/data

替換MySQL軟件包:

# tar -zxvf tool_mysql57_ssd.tar.gz

# tar -zxvf Percona-Server-5.7.26-29-Linux.x86_64.ssl101.tar.gz
mv /data/Percona-Server-5.7.26-29-Linux.x86_64.ssl101 /usr/local
cd /usr/local
mv mysql mysql56.bak
mv Percona-Server-5.7.26-29-Linux.x86_64.ssl101 mysql
# /data/Percona-Server-5.7.26-29-Linux.x86_64.ssl101/bin/mysql -V
/data/Percona-Server-5.7.26-29-Linux.x86_64.ssl101/bin/mysql  Ver 14.14 Distrib 5.7.26-29, for Linux (x86_64) using  6.0

修改參數(shù)文件 my.cnf

把MySQL5.6的配置文件替換成5.7版本的my.cnf凰锡。

vim /data/mysqldata/my3306/my.cnf

注釋掉2個(gè)參數(shù)

#innodb_read_ahead=0
#key_buffer=64M

增加1個(gè)參數(shù)

log_timestamps=system

在MySQL 5.7.2 新增了 log_timestamps 這個(gè)參數(shù),該參數(shù)主要是控制 error log、genera log掂为,等等記錄日志的顯示時(shí)間參數(shù)

且默認(rèn)安裝后error_log,slow_log 日志時(shí)間戳默認(rèn)為UTC裕膀,因此會(huì)造成與系統(tǒng)時(shí)間不一致,與北京時(shí)間相差8個(gè)小時(shí)

mysql> SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| log_timestamps | UTC   |
+----------------+-------+
1 row in set (0.00 sec)

因?yàn)閘og_timestamps 是一個(gè)GLOBAL的全局參數(shù),所以直接在登錄后去set全局參數(shù),重啟后就會(huì)直接失效

因此需要在mysql的配置文件中[mysqld]中增加一條log_timestamps的配置勇哗。

修改1個(gè)參數(shù)

cp /usr/local/mysql/lib/mysql/libjemalloc.so.1 /usr/lib64/libjemalloc.so.1
cd /usr/lib64/
ll -h | grep libjemalloc

修改[mysqld_safe]

修改前:

[mysqld_safe]
malloc-lib=/usr/local/mysql/lib/mysql/libjemalloc.so

修改后:

[mysqld_safe]
malloc-lib=/usr/lib64/libjemalloc.so.1

啟動(dòng)MySQL實(shí)例

注:在啟動(dòng)過程中昼扛,需要添加–skip-grant-tables和–skip-networking參數(shù),來保證沒有 任何的應(yīng)用連接欲诺,讓升級(jí)過程更加安全抄谐。

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/my3306/my.cnf --socket=/data/mysqldata/my3306/run/mysql.sock --port=3306  &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/my3307/my.cnf --socket=/data/mysqldata/my3307/run/mysql.sock --port=3307  &

升級(jí)系統(tǒng)表數(shù)據(jù)字典信息 mysql_upgrade

命令如下:

#/usr/local/mysql/bin/mysql_upgrade -u root -pp@ssw0rd  --socket=/usr/local/mysql/mysql.sock

輸出結(jié)果:

[root@zlz-test:/usr/local/mysql]
# /usr/local/mysql/bin/mysql_upgrade -u root  -s --socket=/data/mysqldata/my3306/run/mysql.sock --port=3306
Enter password:
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@zlz-test:/usr/local/mysql]
# /usr/local/mysql/bin/mysql_upgrade -u root  -s --socket=/data/mysqldata/my3307/run/mysql.sock --port=3307
Enter password:
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.

沒有報(bào)錯(cuò),表示系統(tǒng)表數(shù)據(jù)字典信息升級(jí)成功扰法。

重啟MySQL服務(wù)

首先停掉MySQL服務(wù)斯稳,命令如下:

# myadm stop
Port 3307 Instance being shutdown
Port 3306 Instance being shutdown

/usr/local/mysql/bin/mysqladmin -uroot -poracle123 shutdown

然后正常啟動(dòng) MySQL 服務(wù),命令如下:

# myadm start
Port 3306 Instance being startup
Port 3307 Instance being startup

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

說明:正常啟動(dòng)MySQL數(shù)據(jù)庫(kù)迹恐,不要使用–skip-grant-tables和-skip-networking參數(shù)挣惰。

驗(yàn)證MySQL版本

目前己經(jīng)是MySQL5.7版本,證明升級(jí)成功:

# /usr/local/mysql/bin/mysql -V
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.7.20, for linux-glibc2.12 (x86_64) using EditLine wrapper
mysql> select version();
+---------------+
| version()     |
+---------------+
| 5.7.26-29-log |
+---------------+
1 row in set (0.00 sec)

其他

啟動(dòng)報(bào)錯(cuò)

啟動(dòng)報(bào)錯(cuò)殴边,就看alert.log 憎茂,一般是哪個(gè)參數(shù)文件報(bào)錯(cuò)改哪個(gè)就好了。

啟動(dòng)報(bào)錯(cuò):'/usr/lib64/libjemalloc.so.1' to LD_PRELOAD for mysqld

由于libjemalloc.so.1 在 basedir 中存在锤岸,可是MySQL又限制了只能在/usr/lib64竖幔、/usr/lib等等標(biāo)準(zhǔn)庫(kù)中加載這些動(dòng)態(tài)文件所以啟動(dòng)的時(shí)候會(huì)報(bào)錯(cuò)。
報(bào)錯(cuò)如下:

[root@zlz-test:/usr/lib64]
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/my3307/my.cnf --socket=/data/mysqldata/my3307/run/mysql.sock --port=3307  &
[1] 26006

[root@zlz-test:/usr/lib64]
#  mysqld_safe Adding '/usr/lib64/libjemalloc.so.1' to LD_PRELOAD for mysqld
2021-04-20T09:30:41.480555Z mysqld_safe Logging to '/data/mysqldata/my3307/log/alert.log'.
2021-04-20T09:30:41.510366Z mysqld_safe Starting mysqld daemon with databases from /data/mysqldata/my3307/data
^C
mysqld_safe --malloc-lib must be located in one of the directories: /usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu

其實(shí)查看報(bào)錯(cuò)的提示就很明顯是偷,就是對(duì)于加載這些庫(kù)只能在/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu這個(gè)庫(kù)中

解決

1拳氢、將libjemalloc.so.1文件拷貝到 /usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu 這幾個(gè)目錄中

cp /usr/local/mysql/lib/mysql/libjemalloc.so.1 /usr/lib64/libjemalloc.so.1

2透敌、修改[mysqld_safe]
修改前:

[mysqld_safe]malloc-lib          = /usr/local/mysql/lib/mysql/libjemalloc.so.1

修改后:

[mysqld_safe]malloc-lib          = /usr/lib64/libjemalloc.so.1

3羊赵、重啟MySQL

[root@centos7 mysql]# numactl --interleave=all /bin/bash /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my_3306.cnf  mysqld_safe Adding '/usr/lib64/libjemalloc.so.1' to LD_PRELOAD for mysqldmysqld_safe Adding '/usr/local/mysql/lib/libHotBackup.so' to LD_PRELOAD for mysqld2016-12-28T09:03:30.653874Z mysqld_safe Logging to '/u01/mysql/mysql_3306/logs/trace/mysql.err'.2016-12-28T09:03:30.675215Z mysqld_safe Transparent huge pages are already set to: never.2016-12-28T09:03:30.692654Z mysqld_safe Starting mysqld daemon with databases from /u01/mysql/mysql_3306/data

可見已經(jīng)啟動(dòng)成功了
當(dāng)然可以去修改mysqld_safe文件代碼幽崩,但是對(duì)于要腳本部署就比較麻煩了褐缠,需要使用sed對(duì)代碼進(jìn)行替換,因?yàn)槊總€(gè)版本MySQL的mysqld_safe都會(huì)有所不同竣贪。所以這邊就使用拷貝的方法暫時(shí)解決堂鲤。

注意

MySQL 的basedir是一個(gè)軟連接孩哑,那libHotBackup.so也需要修改
具體最終操作如下:
1玛瘸、拷貝相關(guān)動(dòng)態(tài)鏈接庫(kù)

cp /usr/local/mysql/lib/mysql/libjemalloc.so.1 /usr/lib64/libjemalloc.so.1
cp /usr/local/mysql/lib/libHotBackup.so /usr/lib64/libHotBackup.so
mv /usr/local/mysql/lib/libHotBackup.so /usr/local/mysql/lib/libHotBackup.so.bak

2蜕青、修改my.cnf

[mysqld_safe]malloc-lib          = /usr/lib64/libjemalloc.so.1

參考文檔

Percona-5.7.15 二進(jìn)制版安裝以及啟動(dòng)

MySQL 5.6.47升級(jí)到5.7.20(一)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市糊渊,隨后出現(xiàn)的幾起案子右核,更是在濱河造成了極大的恐慌,老刑警劉巖渺绒,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贺喝,死亡現(xiàn)場(chǎng)離奇詭異磷瘤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)搜变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來针炉,“玉大人挠他,你說我怎么就攤上這事〈叟粒” “怎么了殖侵?”我有些...
    開封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)镰烧。 經(jīng)常有香客問我拢军,道長(zhǎng),這世上最難降的妖魔是什么怔鳖? 我笑而不...
    開封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任茉唉,我火速辦了婚禮,結(jié)果婚禮上结执,老公的妹妹穿的比我還像新娘度陆。我一直安慰自己,他們只是感情好献幔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開白布懂傀。 她就那樣靜靜地躺著,像睡著了一般蜡感。 火紅的嫁衣襯著肌膚如雪蹬蚁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天郑兴,我揣著相機(jī)與錄音犀斋,去河邊找鬼。 笑死情连,一個(gè)胖子當(dāng)著我的面吹牛闪水,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒙具,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼球榆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了禁筏?” 一聲冷哼從身側(cè)響起持钉,我...
    開封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篱昔,沒想到半個(gè)月后每强,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體始腾,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年空执,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浪箭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辨绊,死狀恐怖奶栖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情门坷,我是刑警寧澤宣鄙,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站默蚌,受9級(jí)特大地震影響冻晤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绸吸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一鼻弧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锦茁,春花似錦温数、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至握玛,卻和暖如春够傍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挠铲。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工冕屯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拂苹。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓安聘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瓢棒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浴韭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容