在工作中,主從環(huán)境搭的多了,但是,基本上都是在DB SERVER停機(jī)(游戲公司)的情況下搭建的,今天突然被一技術(shù)官問,如何在線添加主從,回答的大概思路,但是沒有實(shí)踐過,下面,我就測試一下。各位也可以先想想自己的思路:mysql 5.1版本,二進(jìn)制日志文件(時(shí)間
在工作中,主從環(huán)境搭的多了,但是,基本上都是在DB SERVER停機(jī)(游戲公司)的情況下搭建的,今天突然被一技術(shù)官問,如何在線添加主從,回答的大概思路,但是沒有實(shí)踐過,下面,我就測試一下。各位也可以先想想自己的思路:mysql 5.1版本,二進(jìn)制日志文件(時(shí)間長了,有些二進(jìn)制日志定期清除了),pos號
注:在mysql 5.6版本中,已經(jīng)有基于GTID的主從復(fù)制(即:不需要知道日志文件和position號),只需還原最新的備份就可實(shí)現(xiàn),這里只討論mysql 5.1
一.目前的基本環(huán)境:
主DB:192.168.1.101
從DB1:192.168.1.102
從DB2:192.168.1.103(準(zhǔn)備在線添加做為從機(jī)的mysql數(shù)據(jù)庫)
數(shù)據(jù)庫版本:mysql 5.1.61(select version())
服務(wù)器版本:red hat linux 6
注:目前主從正常(show slave statusG),同步的數(shù)據(jù)庫為 login
3臺DB server的備份軟件(xtrbackup)都已經(jīng)安裝完成
同步的表為innodb引擎的表,不然用xtrabackup還是會鎖表
假設(shè)環(huán)境為:現(xiàn)在login庫下的表a,備份的時(shí)候插入數(shù)據(jù),最終行為5418272
注:思路是備份,可是用mysqldump備份會鎖表,如果數(shù)據(jù)量很大的話,線上環(huán)境肯定不允許使用mysqldump備份
所以,我們采用的xtrabackup來進(jìn)行在線熱備,至于,它的原理,,請各位自行g(shù)oogle
二.部署實(shí)例:
1.主DB,線上數(shù)據(jù)正常寫入的同時(shí)我實(shí)施備份
1
2
3
4
mysql> insert into a select * from a;
[root@client101 backup]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --database=login /tmp/backup/ >/tmp/backup/innoback.log 2>&1
# 備份完成后,可以查看備份文件目錄下, xtrabackup_binlog_info 此文件會記錄主上的日志和position號
[root@client101 2014-02-22_07-43-36]# cat xtrabackup_binlog_info
2.將備份文件壓縮,并傳送到從DB2(192.168.1.103)上,用于在上面進(jìn)行還原
1
2
[root@client101 backup]# tar zcvf login.tar 2014-02-22_07-43-36
[root@client101 backup]# scp login.tar 192.168.1.103:/tmp/
3.從DB2上,解壓剛才的備份,并用于恢復(fù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@client103 tmp]# tar -xf login.tar
# 應(yīng)用日志,保證數(shù)據(jù)一致
[root@client103 tmp]# innobackupex --apply-log /tmp/2014-02-22_07-43-36/
# 停mysql
[root@client103 mysql]# /etc/init.d/mysqld stop
# mysql數(shù)據(jù)目錄下的所有文件移到/tmp/mysqlbackup/下,不然,恢復(fù)有問題
# [這里建議只復(fù)制數(shù)據(jù)文件,不建議復(fù)制(日志,索引,innodb共享表空間,innodb日志文件,慢日志等)]
[root@client103 mysql]# mv /var/lib/mysql/* /tmp/mysqlback
# 恢復(fù)數(shù)據(jù)
[root@client103 mysql]# innobackupex --copy-back /tmp/2014-02-22_07-43-36/
# 將原數(shù)據(jù)庫的內(nèi)容復(fù)制mysql數(shù)據(jù)目錄(這里就是我認(rèn)為這個(gè)軟件不好的地方,大家也可以給點(diǎn)建議)
[root@client103 mysqlback]# mv /tmp/mysqlbac k/* /var/lib/mysql/
# 將數(shù)據(jù)目錄的權(quán)限修改為mysql權(quán)限
[root@client103 mysql]# chown mysql. /var/lib/mysql/
# 啟動數(shù)據(jù)庫
[root@client103 mysql]# /etc/init.d/mysqld start
# 驗(yàn)證數(shù)據(jù)的一致性:5418272(主上的行)
mysql> select count(*) from a;
+----------+
| count(*) |
+----------+
| 5418272 |
+----------+
4.將從DB2的主機(jī)指向主DB1
1
2
3
4
5
6
7
8
9
10
11
12
13
# 剛才回復(fù)后,會有個(gè)文件:xtrabackup_binlog_pos_innodb --> 此文件記錄了備份時(shí)日志文件和pos號
[root@client103 mysql]# cat xtrabackup_binlog_pos_innodb
/var/lib/mysql/mysql-101-bin.000008 2423
# 建立主從關(guān)系
mysql> change master to master_host='192.168.1.101',
-> master_user='slave',
-> master_password='slave',
-> master_log_file='mysql-101-bin.000008',
-> master_log_pos=2423;
# 開啟同步
mysql> start slave;
# 查看同步狀態(tài)
mysql> show slave statusG;
5.此時(shí)如果都為yes,則主從則建立完畢!大家可自行測試
注:
還有一種方式在線添加主從,即原本的從機(jī)只做冗余,可以在從機(jī)暫時(shí)停止主從,
然后,在從機(jī)上執(zhí)行備份,看當(dāng)前從機(jī)上,日志執(zhí)行到哪個(gè)文件,哪個(gè)位置(master的日志文件和pos號)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com