mysql建構主從往往基于mysqldump進行備份主庫再Copy到從庫進行備份恢複之後啟動主從,但是對于資料量大的場景就完全不适用,因為基于邏輯sql,是以導入時間久,速度很慢。
是以針對比較大的資料庫建議使用innobackupex進行主庫的備份,然後複制到從庫建構主從
以下為我實際生産使用為案例:
資料庫版本:5.7
資料庫架構:主從同步
資料量:其中一個主庫粗略統計40GB
IP:已經存在的主庫:10.2.22.162 ,以下稱為主庫A
需要資料導入的主庫:10.2.22.31,以下稱為主庫B
一、資料庫搭建步驟略
二、在主庫A、B安裝innobackupex備份的用戶端
1.安裝依賴包
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
2.安裝
3.下載下傳xbk源
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
4.下載下傳xbk軟體
yum -y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
在步驟4可能遇到缺少libev依賴的報錯:
解決:
安裝:libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
三、主庫A實體備份
//資料庫全備
innobackupex --defaults-file=/etc/my.cnf --user=root --password='xxxxx' --stream=tar /data/backup_rf/|gzip|ssh [email protected] \ "cat - > /data/backup/im_prod/im_backup_`date +"%Y-%m-%d_%H:%M:%S"`.tar.gz"
--defaults-file:指定配置檔案
--user=root:指定使用者
--password='xxx' 指定密碼
--stream=tar 壓縮方式
ssh [email protected] 遠端備份到其他資料
/data/backup_rf/im_backup_`date +"%Y-%m-%d_%H:%M:%S"`.tar.gz" 備份包名字
/data/backup_rf該路徑需要提前存在
四、主庫B恢複
1.解壓備份
cd /tmp
tar -zxvf /tmp/im_backup_2022-11-09_00\:30\:01.tar.gz -C /tmp/restore/
2.準備階段 recover
innobackupex --apply-log /tmp/restore
3.關閉資料庫
/etc/init.d/mysqld stop
4.删除指定的目錄
rm -fr /data/mysql/*
5.copy階段
innobackupex --copy-back /tmp/restore/
6.改權限
chown -R mysql. /data/mysql
8.啟動資料庫
/etc/init.d/mysqld start
此時沒有異常資料庫應該已經啟動,接下來就是建構主從
五、建構主從架構
主A和主B建立主主同步的使用者:
grant replication slave on *.* to repl@'10.%.%.%' identified by '123456';
1.登入資料庫B
mysql -uroot -p
2.purged gtid,如果報錯,先reset master;
purge的資訊來自于xtrabackup_binlog_info
set global gtid_purged='3618f301-78d0-11ea-aa7c-005056a6318a:1-586925444'
3.建構主從
restart slave;
resetart master;
CHANGE MASTER TO
MASTER_HOST='10.2.22.162',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.001763',
MASTER_LOG_POS= 353272893,
MASTER_CONNECT_RETRY=10;
注意:
其中MASTER_LOG_FILE和MASTER_LOG_POS來源于innobackupex備份log,
xtrabackup_binlog_info,該log記錄了備份開始時主庫A的binlog起點
4.啟動主從
start slaves;
5,檢視主從狀态
show slave status\G