XtraBackup2.4.4 with mysql5.7.17 主從同步

一、問題:

線上一個主庫壓力比較大,所以增加一個從庫,但是不能重啟或者停止主庫的正常運行,不能鎖庫鎖表影響業務的正常運行。所以這里想到了XtraBackup

二、XtraBackup介紹:

? ? ? ?Xtrabackup的優點:

1、備份完成快速、可靠

2、備份期間不間斷的事務處理

3、節省磁盤空間和網絡帶寬

4、自動備份驗證

5、提高正常運行時間由于更快的恢復時間

備份INNODB引擎的數據庫不會鎖庫鎖表,但是備份MyISAM的表還是會鎖的,還支持增量備份。



三、環境說明

系統版本:CentOS Linux release 7.3.1611 (Core)

內核版本:3.10.0-514.16.1.el7.x86_64

?mysql版本:mysql? Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using? EditLine wrapper

xtrabackup版本:percona-xtrabackup-24-2.4.4-1.el7.x86_64?:注:較低版本的xtrabackup不支持 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? centos7.3

四、xtrabackup軟件安裝:

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

wget -O /etc/yum.repos.d/epel.repo? http://mirrors.aliyun.com/repo/epel-6.repo

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

yum install -y percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm


注意:

my.cnf修改:

innodb_file_per_table = 1

binlog_format='row'

在線改:

set global innodb_file_per_table=1;

set global binlog_format='row';

錯誤故障:

rm -f /etc/my.cnf

否則全備時報如下錯誤:

InnoDB: Number of pools: 1

InnoDB: Error: log file ./ib_logfile0 is ofdifferent size 50331648 bytes

InnoDB: than specified in the .cnf file268435456 bytes!

f pools: 1


五、主庫主從配置

1.主庫配置/etc/my.cnf

增加server-id 和 bin-log

#vim /etc/my.cnfserver-id = 128

? log-bin = mysql-bin

2.主庫配置授權賬號

mysql>ALTERUSER'root'@'localhost'IDENTIFIEDBY'new_password';

mysql>alter user root@localhost identified by'Admin123!';

mysql>grant replication slave on *.* to'slave'@'10.130.21.53' identified by 'password';

mysql> flush privileges;

3.手動設置主庫server-id和log-bin 參數

setglobalserver_id=128

因為這兩個參數是動態參數,不用重啟主庫也可以生效

如果你的主庫已經設置這兩個參數,請忽略這一步操作

4.從庫配置/etc/my.cnf

增加server-id 和 bin-log#vim /etc/my.cnfserver-id = 129

#如果需要在從庫上做bin-log備份可以添加如下參數

log-bin = mysql-bin

log-slave-updates = 1

expire-logs-days=10


mysql -uroot -poldboy123 -S /data/3306/mysql.sock


六、備份主庫數據

1.主庫機器上創建備份目錄

#mkdir -p /home/data/backup33061

2.執行全庫備份

2.1.備份

innobackupex --defaults-file=/home/data/mysql33061/my.cnf --user=root ?--password=admin123 --socket=/home/data/mysql33061/mysql.sock ?/home/data/backup33061

>>> xtrabackup: Transaction log oflsn (549646200) to (549646758) was copied.

170724 15:19:39 completed OK!

PS:備份完成后,會在/home/data/backup33061目錄下生成一個時間點的目錄,這里是2017-07-24_15-19-04。你也可以加一個--no-timestamp參數不產生這個目錄,直備份到/home/data/backup33061目錄下

2.2.重放redo log

#下面preparing,undo撤銷未提交的事務,重放redo log

innobackupex--defaults-file=/home/data/mysql33061/my.cnf--user=root--password=oldboy123--apply-log--socket=/home/data/mysql33061/mysql.sock/home/data/backup33061/2017-07-24_15-19-04

>>> InnoDB: Shutdown completed;log sequence number 549647400

170724 15:24:19 completed OK!

經過預處理或是redo log后的文件才能替換掉從庫的數據目錄

ps:1、ls -l/data/backup/full_data/2016-07-14_05-19-52/查看,你發現xtrabackup會把你數據庫datadir下的所有數據 文件都復制過來還新增了5個xtrabackup_開頭的文件,我們關心的是xtrabackup_binlog_info這個文件,因為這個文件里面記 錄了你做從庫需要change到主庫的binlog的位置和pos點

? ? ? 2、如果只想備份一個庫,加“--include=navy”指定庫名即可, “--databases=navy”不好使。

七、恢復數據到從庫

1.停止從庫

#/etc/init.d/mysqld stop

2.把主庫備份文件拷貝到從庫機器

#scp -rp /data/backup/full_data//2017-07-24_15-19-04? root@10.130.21.53:/mysql/data/

3.修改恢復文件權限

#chown -R mysql:mysql? /mysql/data

4.啟動數據庫

#/etc/init.d/mysqld start

5.確認數據是否恢復成功

登錄從庫,執行show databases;

6.確認同步的位置點

在從庫上或者主庫上都可以查看該信息,我們是在從庫上查看

#cat /mysql/data/xtrabackup_binlog_info? ? ? mysql33061-bin.000001? ? 476764

九、開始主從同步

1.配置從庫 主從配置

#登錄從庫并執行

mysql > CHANGEMASTER TOMASTER_HOST='10.130.21.52',MASTER_USER='rep',MASTER_PASSWORD='oldboy123',MASTER_LOG_FILE='mysql33061-bin.000001', MASTER_LOG_POS=476764;

2.開始同步

mysql> start slave;

3.查看同步狀態

mysql> show slave status\G

Slave_IO_Running: Yes? ? Slave_SQL_Running: Yes? Seconds_Behind_Master: 0



centos6.5 + mysql5.6


備份與主從同步:

注意:

若是mysql編譯安裝等,提示找不到socket路徑,可以用--socket=/var/lib/mysql/mysql.sock參數執行socket路徑

1 備份

在主庫上運行備份命令,后面跟備份文件放在哪個目錄下;

innobackupex --defaults-file="/etc/my.cnf" --user=root --passwor=123456 /opt/

2.scp到從庫

經備份后的文件夾整體scp到從庫的某個目錄,如opt目錄下

scp -rp 備份目錄 遠程用戶@遠程主機:/遠程目錄

3.預處理

內存較大的主機,可以適當加大use-memory,提高處理速度。

innobackupex --defaults-file="/etc/my.cnf" \

--user=root \

--apply-log \

--use-memory=4G /opt/2016-05-07_16-50-33/

4.關閉從庫

/etc/init.d/mysqld stop

5.copy數據

注意:(拷貝前需要將之前的mysql數據目錄清空)

innobackupex --defaults-file="/etc/my.cnf" \

--user=root \

--move-back /opt/2016-05-07_16-50-33/

6.查看master位置

[root@linux-node2 data]# cat xtrabackup_binlog_pos_innodb

mysql-bin.000008? ? 3037723

7.修改權限

將mysql的數據目錄授予mysql用戶權限

chown -R mysql:mysql /data01/mysql/

8.啟動從庫

/etc/init.d/mysqld start

9.設置主從

mysql> change master to \

master_host='192.168.56.11', \

master_user='slave', \

master_password='123456', \

master_log_file='mysql-bin.000008', \

master_log_pos=3037723;

相關經驗:

生產環境212G的數據:

備份時間約25分

內網scp時間:5分鐘(千兆網卡)

預處理時間:5分種

拷貝(恢復)數據:21分鐘

延遲復制:

1.誤刪除恢復。

2.延遲測試。

3.歷史查詢。

mysql> stop slave;

mysql> change master to master_delay = 600;

mysql> start slave;

半同步復制:

master:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

mysql> stop slave io_thread;start slave io_thread;

高可用解決方案:? ?MHA

架構擴展方案:

1.基于復制的擴展

2.客戶端分庫分表

3.mysql cluster

4.Percona XtraDB Cluster

5.MySQL的Proxy中間件(mysql proxy,mycat)

MySQL? -> Percona Server? -> MariaDB

基于復制的擴展? -> 客戶端分庫分表 -> MySQL PXC -> mysql 中間件? -> mysql cluster

從庫:一定要設置只讀

MySQL Proxy部署? ?PXC部署(技術儲備)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容