簡單說下此教程背景哼丈,以及使用工具和方案
背景:自己搭建的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é)束了