mysql不停機(jī),不鎖表遷移

簡單說下此教程背景哼丈,以及使用工具和方案

背景:自己搭建的mysql服務(wù)启妹,因為要更換服務(wù)器,而為了不影響依賴此數(shù)據(jù)的服務(wù)受到訪問影響削祈,需要遷移mysql時翅溺,mysql不能鎖表(鎖表只能提供查詢服務(wù),增刪改將受到影響)髓抑,更不能直接停機(jī)(停機(jī)意味著直接停止mysql服務(wù))咙崎,所以結(jié)合自己的一些經(jīng)驗,以及網(wǎng)上提供的一些知識吨拍,進(jìn)行了這次的mysql遷移

方案:mysql主從 +?Percona XtraBackup 8.0熱備

源mysql簡介:服務(wù)器版本centos7褪猛,mysql版本為8.0.28,mysql直接安裝在宿主機(jī)

目標(biāo)mysql簡介:服務(wù)器ubuntu 20.04?focal羹饰,mysql版本8.0.28伊滋,使用docker安裝mysql,將mysql的conf,data,log都掛載到宿主機(jī)

另外關(guān)于mysql的安裝方式做一下說明队秩,無論是安裝在docker還是在宿主機(jī)笑旺,也就是啟動停止的命令不同,只要在docker安裝時馍资,把conf,data,log都掛載到宿主機(jī)筒主,這樣更改配置也都可以直接在宿主機(jī)上操作,數(shù)據(jù)也進(jìn)行了持久化存儲到宿主機(jī)

關(guān)于Percona XtraBackup的工具鸟蟹,很多人在網(wǎng)上搜索使用時乌妙,會有很多人看到innobackupex這個命令,其實這個命令在mysql5.7/5.8版本對應(yīng)的Percona XtraBackup 2.4版本才有這個命令建钥,而我們使用的Percona XtraBackup 8.0版本藤韵,這個版本對應(yīng)的mysql8以后的版本,所以8.0以后已經(jīng)移除了innobackupex這個命令熊经,在這里給大家普及一下泽艘,因為網(wǎng)上很多教程都沒有對自己的背景進(jìn)行說明,所以很多朋友在使用8.0版本時再瘋狂找innobackupex這個命令镐依,而我也是掉進(jìn)坑里找了一下悉盆,然后去官網(wǎng)看了簡介文檔才發(fā)現(xiàn)這個疑問

以下所有命令當(dāng)權(quán)限不夠時,請?zhí)砑觭udo馋吗,如果仍然不夠,請切換root

以下開始正式的細(xì)節(jié)介紹

一.搭建一個新的mysql服務(wù)

搭建一個新的mysql服務(wù)秋秤,這里不做詳細(xì)介紹宏粤,可以直接在宿主機(jī)搭建脚翘,也可以使用docker搭建,然后遷移的mysql版本最好是保持一致绍哎,以免出現(xiàn)其他意外来农,我這里都是保證里新舊mysql版本為一致,如果使用docker搭建崇堰,可以參考另一篇文章?Docker安裝mysql8沃于,如果是在centos7的宿主機(jī)搭建,這里也有在centos7搭建的教程可以參考Centos7安裝mysql8海诲,如果是其他方式搭建就需要自行搭建mysql服務(wù)

二.源mysql服務(wù)器安裝 Percona XtraBackup 8.0

我這里源mysql服務(wù)器是centos7繁莹,官方的安裝文檔yum安裝Percona XtraBackup,當(dāng)然我也是參考官方文檔安裝

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

percona-release enable-only tools release

yum install percona-xtrabackup-80

xtrabackup -v

輸入完 xtrabackup -v 后特幔,服務(wù)器有具體版本則代表安裝成功

三.目標(biāo)mysql服務(wù)器安裝Percona XtraBackup 8.0

目標(biāo)mysql服務(wù)器我是ubuntu咨演,而且是使用docker安裝的,所以這里會有一些docker命令蚯斯,官方的apt安裝文檔apt安裝Percona XtraBackup

1. 先進(jìn)入docker容器內(nèi)部薄风,這里的mysql是我創(chuàng)建容器的名字

docker exec -it mysql /bin/bash

2. 安裝Percona XtraBackup 8.0, 我也是基于官方文檔安裝的拍嵌,但是由于docker容器是一個新的容器遭赂,所以有一些包不存在,我這里把我碰到需要補(bǔ)充的包都安裝了横辆,建議優(yōu)先看一遍官方文檔

apt update

apt install wget

apt install lsb-release

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb

dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb? ? ? ?# 如這一步出錯撇他,先輸入以下命令再重來一次:apt install -f

percona-release enable-only tools release

apt update

apt install percona-xtrabackup-80

xtrabackup -v

輸入完 xtrabackup -v 后,服務(wù)器有具體版本則代表安裝成功

四.對mysql進(jìn)行主從配置更新龄糊,以下源mysql服務(wù)為主服務(wù)器逆粹,目標(biāo)mysql服務(wù)為從服務(wù)器

1. 修改主服務(wù)mysql配置文件,當(dāng)然這一步的配置在最開始搭建mysql時已經(jīng)添加炫惩,那么這一步可以省略僻弹,如果以前未添加,那么添加配置后他嚷,是不可避免的要重啟一下主mysql服務(wù)蹋绽,大家的配置文件路徑可能會有所不同,所以這個路徑請確認(rèn)好自己服務(wù)器的路徑是正確的筋蓖,比如我的是/etc/my.cnf卸耘,打開文件后將下面配置放到[mysqld]下面,具體如下圖粘咖,server-id是與從服務(wù)要不同蚣抗,我這里取的ip地址的最后一位

[mysqld]

log-bin=mysql-bin

server-id=222?


2. 保存主服務(wù)配置文件后,重啟主mysql服務(wù)瓮下,記住一定要重啟翰铡,不然配置不會生效

3. 修改從服務(wù)mysql配置文件钝域,添加的與主服務(wù)的配置是一樣的,記住server-id要不同

[mysqld]

log-bin=mysql-bin

server-id=223

4. 保存從服務(wù)配置文件后锭魔,重啟從mysql服務(wù)例证,記住一定要重啟,不然配置不會生效

5. 進(jìn)入主服務(wù)mysql(這里的進(jìn)入指 mysql -uroot -p這種迷捧,或者遠(yuǎn)程連接也可以)织咧,建立一個新賬號,并授權(quán)slave漠秋,我這里的賬號名為slave笙蒙,密碼為123456,如果大家需要保持嚴(yán)謹(jǐn)膛堤,可以在下面四條命令中的 "%" 改為具體IP手趣,這樣就代表之允許這個ip的使用這個這個賬號來連接主服務(wù),比如第一條命令可改為:CREATE USER 'slave'@'192.168.111.222' IDENTIFIED BY '123456';? ?我這里教程就不加這個限制了肥荔,大家可以根據(jù)實際需求進(jìn)行調(diào)整

create user 'slave'@'%'identified by '123456';

grant all privileges on *.* to 'slave'@'%';

alter user 'slave'@'%' identified with mysql_native_password;

alter user 'slave'@'%' identified by '123456' password expire never;

flush privileges;

至此绿渣,我們的配置文件都完成,授權(quán)賬號也建立完成

五.使用xtrabackup備份燕耿,恢復(fù)

關(guān)于xtrabackup命令中符,可以先看下官方文檔對參數(shù)的解釋,xtrabackup官方文檔誉帅,進(jìn)入鏈接后點擊下圖中的How to則是關(guān)于備份與恢復(fù)相關(guān)命令


1. 在主服務(wù)器上淀散,對數(shù)據(jù)進(jìn)行備份,最后一級目錄backup_base會自動生成蚜锨,備份后會出現(xiàn)如下圖档插,則代表成功,這里的--target-dir代表備份文件存儲的目錄亚再,至于從哪里去找mysql的源數(shù)據(jù)目錄郭膛,這個是因為工具會自動尋找配置文件(這里也是有規(guī)律尋找,會在幾個默認(rèn)位置尋找氛悬,具體可以看官方文檔的參數(shù)解釋)则剃,所以知道源數(shù)據(jù)目錄

xtrabackup --backup -uslave -p --target-dir=/home/mysql_backup/backup_base

2. 進(jìn)入具體的備份目錄,查看xtrabackup_binlog_info文件的具體節(jié)點位置如捅,如圖棍现,這兩個值在后面開起從庫時需要用到

3. 把備份好的文件復(fù)制到目標(biāo)mysql的服務(wù)器,方式有很多镜遣,可以scp己肮,也可以打包下載再上傳,具體傳輸方式就不介紹了,這一步就是把備份文件傳輸?shù)侥繕?biāo)mysql服務(wù)器就行

4. 恢復(fù)備份文件到目標(biāo)mysql朴肺,我的備份文件傳輸在目標(biāo)服務(wù)器宿主機(jī)的?/mydata/mysql_backup/backup_base窖剑,由于我是docker搭建的mysql,所以還要把備份文件拷貝到docker容器里戈稿,這一步就不詳細(xì)說了,使用docker cp即可讶舰,最后我的備份文件是在docker容器的/home/mysql_backup/backup_base

5. 對備份文件進(jìn)行準(zhǔn)備處理鞍盗,同樣我這里需要先進(jìn)入docker容器里操作,準(zhǔn)備處理完成后如圖所示

docker exec -it mysql /bin/bash

xtrabackup --prepare --target-dir=/home/mysql_backup/backup_base


6. 恢復(fù)文件到目標(biāo)數(shù)據(jù)庫跳昼,首先要清空目標(biāo)數(shù)據(jù)庫般甲,我這里目標(biāo)數(shù)據(jù)庫的目錄是/var/lib/mysql, 如果目標(biāo)mysql的數(shù)據(jù)庫本來是有數(shù)據(jù)的鹅颊,建議先備份敷存,我這邊是空的,所以直接進(jìn)行清空堪伍,再恢復(fù)源數(shù)據(jù)庫的備份文件锚烦,如果是裝在宿主機(jī)的mysql,先停服再清空以及恢復(fù)

這里的--target-dir代表備份文件存儲的目錄帝雇,至于從哪里去找mysql的源數(shù)據(jù)目錄涮俄,跟上面?zhèn)浞莸脑硎且粯拥模姷饺缦聢D代表恢復(fù)成功

cd?/var/lib/mysql

rm -rf *

xtrabackup --copy-back --target-dir=/home/mysql_backup/backup_base

7. 重啟目標(biāo)mysql的服務(wù)尸闸,如果是裝在宿主機(jī)的mysql彻亲,還要先改一下文件目錄的用戶和用戶組權(quán)限為mysql,有可能讀rwx也會需要調(diào)整吮廉,可以根據(jù)重啟時根據(jù)是否報錯自己調(diào)整苞尝,由于我這里docker安裝,直接重啟即可

8. 嘗試連接宦芦,可以使用mysql -uroot -p宙址,也可以遠(yuǎn)程使用工具連接,由于是整個庫都恢復(fù)過來踪旷,所以源mysql的遠(yuǎn)程賬號也存入目標(biāo)mysql服務(wù)曼氛,也可以使用遠(yuǎn)程賬號進(jìn)行測試

六.開啟mysql主從,使數(shù)據(jù)同步

1. 進(jìn)入從mysql服務(wù)

2. 配置從mysql服務(wù)

master_host:主庫的地址

master_user:剛才主庫創(chuàng)建的用來備份的用戶名

master_password:備份用戶的密碼

master_log_file:備份文件xtrabackup_binlog_info查出來的第一列

master_log_pos:備份文件xtrabackup_binlog_info查出來的第二列令野,注意這里為int類型

master_port:主庫端口

change master to master_host='192.168.5.222',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000010',master_log_pos=157;

start slave;

show slave status;

輸入show slave status; 后 應(yīng)該看到如下圖兩個yes舀患,代表成功同步,大家可以在備份完文件和開啟主從服務(wù)start slave中間的這一段時間气破,對主服務(wù)mysql進(jìn)行數(shù)據(jù)修改來進(jìn)行測試聊浅,當(dāng)恢復(fù)到從庫后,數(shù)據(jù)沒有跟著主庫進(jìn)行變動,但是當(dāng)開啟從庫的主從服務(wù)后低匙,從庫會以備份文件xtrabackup_binlog_info的兩個數(shù)據(jù)為節(jié)點旷痕,自動同步主庫在這個時間節(jié)點后的所有變動

到這里教程就結(jié)束了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者顽冶。
  • 序言:七十年代末欺抗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子强重,更是在濱河造成了極大的恐慌绞呈,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件间景,死亡現(xiàn)場離奇詭異佃声,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)倘要,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門圾亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人封拧,你說我怎么就攤上這事志鹃。” “怎么了哮缺?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵弄跌,是天一觀的道長。 經(jīng)常有香客問我尝苇,道長铛只,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任糠溜,我火速辦了婚禮淳玩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘非竿。我一直安慰自己蜕着,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布红柱。 她就那樣靜靜地躺著承匣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锤悄。 梳的紋絲不亂的頭發(fā)上韧骗,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音零聚,去河邊找鬼袍暴。 笑死些侍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的政模。 我是一名探鬼主播岗宣,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淋样!你這毒婦竟也來了耗式?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤习蓬,失蹤者是張志新(化名)和其女友劉穎纽什,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躲叼,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年企巢,在試婚紗的時候發(fā)現(xiàn)自己被綠了枫慷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡浪规,死狀恐怖或听,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笋婿,我是刑警寧澤誉裆,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站缸濒,受9級特大地震影響足丢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庇配,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一斩跌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捞慌,春花似錦耀鸦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗅虏,卻和暖如春洛姑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旋恼。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工吏口, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留奄容,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓产徊,卻偏偏與公主長得像昂勒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舟铜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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