前提:以前一位同事負責的一位客戶,因後期轉到devops小組。因此將此用戶交接給我,在後期發現有一套數據庫主從環境,從庫已經沒法正常使用。查看slave 狀態爲:mysql
其中:
Master_Log_File:#此處顯示的bin-log已經在master上找不見了
Read_Master_Log_Pos:#顯示的行數也就存在沒有意義了
Slave_IO_Running:NO #salve io進程顯示爲no,沒法從master同步數據
所以斷定從庫已經沒法使用,須要及時修復。保證主從架構正常使用。sql
如下是恢復的所有過程:
##########################################################數據庫
主要思路: 一、在不鎖表的狀況下備份master數據庫的全部數據文件 二、將slave數據庫進程停掉。並將備份文件從master傳輸到slave端,解壓 三、從新執行 change master設置bin-log文件名稱,和position ##########################################################
1、在數據庫的Master端使用percona-xtrabackup進行文件級別的數據庫備份。架構
在master數據庫執行下面命令:(須要根據實際狀況修改)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=51idc --no-lock --use-memory=4G --compress --compress-threads=8 --stream=xbstream --parallel=4 /backup > /backup/$(date +%Y-%m-%d_%H-%M-%S).xbstreamapp
注意:其中
一、/backup這個目錄能夠自定義,他表明備份文件存放的位置。
二、/etc/my.cnf這個文件是數據庫啓動時讀取的默認配置文件,須要根據實際狀況進行修改;我這邊使用的是/etc/my.cnf
三、修改數據庫鏈接密碼
四、--no-lock表明不鎖表進行備份,保證線上業務正常運行的同時進行數據備份。ide
這個操做時間依據數據量的大小,我本身備份花費了30min左右(130G數據)。備份完成後出現一個文件:
2019-02-27_11-12-21.xbstream3d
2、在數據庫的slave端使用命令進行恢復數據,由於在恢復以前須要保證主從數據庫的數據一致,可是以前由於從數據庫好久都沒有同步master的數據了,所以目前主從數據量差的較多。日誌
a、須要先停掉數據庫
/etc/init.d/mysql stop #停掉數據庫
b、刪除以前的數據文件,默認在/var/lib/mysql下;刪除mysql目錄下的全部文件,由於接下來咱們須要將備份數據解壓到此目錄下。
c、在slave數據庫的機器上執行兩次解壓操做,將備份文件解壓到本地。code
xbstream -x < /backup/2019-02-27_11-12-21.xbstream -C /backup/2019-02-27_11-12-21
innobackupex --decompress --parallel=4 /backup/2019-02-27_11-12-21
d、刪除全部以 .qp結尾的文件
find /backup/2019-02-27_11-12-21 -name "*.qp" -delete
e、建立完備份以後數據被沒有立刻能夠被還原,須要回滾未提交事務前滾提交事務,讓數據庫文件保持一致性。
innobackupex使用—apply-log來作預備備份
--user-memory:指定預備階段可以使用的內存,內存多則速度快,默認爲10MBblog
innobackupex --apply-log --use-memory=4G /backup/2016-03-16_15-25-55
f、再將還原的數據文件拷貝到/var/lib/mysql目錄下,其中/var/lib/mysql目錄在/etc/my.cnf文件中指定的datadir
innobackupex --defaults-file=/etc/my.cnf --copy-back --use-memory=4G /backup/2019-02-27_11-12-21
此過程須要的時間較長,我這邊還原大概是2H左右。還原完成後,在/var/lib/mysql目錄下有兩個文件,能夠看到salve目前保存的最近的bin-log文件和position
若出現找不到qpress命令的報錯能夠安裝repo.percona源後使用 yum -y install qpress 進行安裝
repo.percona源安裝命令:
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
g、修改/var/lib/mysql的屬主屬組
chown -R mysql.mysql /var/lib/mysql
h、啓動數據庫;
/etc/init.d/mysql start
I、重作主從配置
mysql -uroot -p #進入到數據庫內
change master to master_host='主xxx.xxx.xxx.xx',master_port=3306,master_user='root',master_password='51idc',master_lo_file='master-bin.xxx',master_log_pos=xxx;
其中:master IP 、master_password根據實際狀況肯定。
bin-log日誌文件名、master_log_pos的位置須要在這兩個文件中查看。
h、啓動slave
mysql> start slave;
j、查看slave狀態:
mysql> show slave status\G;能夠看到從數據庫slave的Slave_IO_Running: Yes、Slave_SQL_Running: Yes均是yes而且有了新的bin-log文件和position位置了。後面就能夠正常工做,進行主從同步了。