一、問題:
線上一個主庫壓力比較大,所以增加一個從庫乔宿,但是不能重啟或者停止主庫的正常運行,不能鎖庫鎖表影響業(yè)務(wù)的正常運行访雪。所以這里想到了XtraBackup
二详瑞、XtraBackup介紹:
? ? ? ?Xtrabackup的優(yōu)點:
1、備份完成快速臣缀、可靠
2坝橡、備份期間不間斷的事務(wù)處理
3、節(jié)省磁盤空間和網(wǎng)絡(luò)帶寬
4精置、自動備份驗證
5计寇、提高正常運行時間由于更快的恢復(fù)時間
備份INNODB引擎的數(shù)據(jù)庫不會鎖庫鎖表,但是備份MyISAM的表還是會鎖的氯窍,還支持增量備份饲常。
三、環(huán)境說明
系統(tǒng)版本:CentOS Linux release 7.3.1611 (Core)
內(nèi)核版本: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.主庫配置授權(quán)賬號
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.手動設(shè)置主庫server-id和log-bin 參數(shù)
setglobalserver_id=128
因為這兩個參數(shù)是動態(tài)參數(shù),不用重啟主庫也可以生效
如果你的主庫已經(jīng)設(shè)置這兩個參數(shù)政供,請忽略這一步操作
4.從庫配置/etc/my.cnf
增加server-id 和 bin-log#vim /etc/my.cnfserver-id = 129
#如果需要在從庫上做bin-log備份可以添加如下參數(shù)
log-bin = mysql-bin
log-slave-updates = 1
expire-logs-days=10
mysql -uroot -poldboy123 -S /data/3306/mysql.sock
六播聪、備份主庫數(shù)據(jù)
1.主庫機器上創(chuàng)建備份目錄
#mkdir -p /home/data/backup33061
2.執(zhí)行全庫備份
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參數(shù)不產(chǎn)生這個目錄,直備份到/home/data/backup33061目錄下
2.2.重放redo log
#下面preparing衅檀,undo撤銷未提交的事務(wù)招刨,重放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!
經(jīng)過預(yù)處理或是redo log后的文件才能替換掉從庫的數(shù)據(jù)目錄
ps:1、ls -l/data/backup/full_data/2016-07-14_05-19-52/查看哀军,你發(fā)現(xiàn)xtrabackup會把你數(shù)據(jù)庫datadir下的所有數(shù)據(jù) 文件都復(fù)制過來還新增了5個xtrabackup_開頭的文件沉眶,我們關(guān)心的是xtrabackup_binlog_info這個文件打却,因為這個文件里面記 錄了你做從庫需要change到主庫的binlog的位置和pos點
? ? ? 2、如果只想備份一個庫谎倔,加“--include=navy”指定庫名即可柳击, “--databases=navy”不好使。
七片习、恢復(fù)數(shù)據(jù)到從庫
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.修改恢復(fù)文件權(quán)限
#chown -R mysql:mysql? /mysql/data
4.啟動數(shù)據(jù)庫
#/etc/init.d/mysqld start
5.確認(rèn)數(shù)據(jù)是否恢復(fù)成功
登錄從庫捌肴,執(zhí)行show databases;
6.確認(rèn)同步的位置點
在從庫上或者主庫上都可以查看該信息,我們是在從庫上查看
#cat /mysql/data/xtrabackup_binlog_info? ? ? mysql33061-bin.000001? ? 476764
九藕咏、開始主從同步
1.配置從庫 主從配置
#登錄從庫并執(zhí)行
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.查看同步狀態(tài)
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參數(shù)執(zhí)行socket路徑
1 備份
在主庫上運行備份命令侈离,后面跟備份文件放在哪個目錄下;
innobackupex --defaults-file="/etc/my.cnf" --user=root --passwor=123456 /opt/
2.scp到從庫
經(jīng)備份后的文件夾整體scp到從庫的某個目錄试幽,如opt目錄下
scp -rp 備份目錄 遠(yuǎn)程用戶@遠(yuǎn)程主機:/遠(yuǎn)程目錄
3.預(yù)處理
內(nèi)存較大的主機,可以適當(dāng)加大use-memory卦碾,提高處理速度。
innobackupex --defaults-file="/etc/my.cnf" \
--user=root \
--apply-log \
--use-memory=4G /opt/2016-05-07_16-50-33/
4.關(guān)閉從庫
/etc/init.d/mysqld stop
5.copy數(shù)據(jù)
注意:(拷貝前需要將之前的mysql數(shù)據(jù)目錄清空)
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.修改權(quán)限
將mysql的數(shù)據(jù)目錄授予mysql用戶權(quán)限
chown -R mysql:mysql /data01/mysql/
8.啟動從庫
/etc/init.d/mysqld start
9.設(shè)置主從
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;
相關(guān)經(jīng)驗:
生產(chǎn)環(huán)境212G的數(shù)據(jù):
備份時間約25分
內(nèi)網(wǎng)scp時間:5分鐘(千兆網(wǎng)卡)
預(yù)處理時間:5分種
拷貝(恢復(fù))數(shù)據(jù):21分鐘
延遲復(fù)制:
1.誤刪除恢復(fù)起宽。
2.延遲測試洲胖。
3.歷史查詢。
mysql> stop slave;
mysql> change master to master_delay = 600;
mysql> start slave;
半同步復(fù)制:
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
架構(gòu)擴展方案:
1.基于復(fù)制的擴展
2.客戶端分庫分表
3.mysql cluster
4.Percona XtraDB Cluster
5.MySQL的Proxy中間件(mysql proxy,mycat)
MySQL? -> Percona Server? -> MariaDB
基于復(fù)制的擴展? -> 客戶端分庫分表 -> MySQL PXC -> mysql 中間件? -> mysql cluster
從庫:一定要設(shè)置只讀
MySQL Proxy部署? ?PXC部署(技術(shù)儲備)