在工作中,主從環境搭的多了,但是,基本上都是在DB SERVER停機(游戲公司)的情況下搭建的,今天突然被一技術官問,如何在線添加主從,回答的大概思路,但是沒有實踐過,下面,我就測試一下。各位也可以先想想自己的思路:mysql 5.1版本,二進制日志文件(時間長了,有些二進制日志定期清除了),pos號
注:在mysql 5.6版本中,已經有基於GTID的主從復制(即:不需要知道日志文件和position號),只需還原最新的備份就可實現,這裡只討論mysql 5.1
一.目前的基本環境:
主DB:192.168.1.101
從DB1:192.168.1.102
從DB2:192.168.1.103(准備在線添加做為從機的mysql數據庫)
數據庫版本:mysql 5.1.61(select version())
服務器版本:red hat linux 6
注:目前主從正常(show slave statusG),同步的數據庫為 login
3台DB server的備份軟件(xtrbackup)都已經安裝完成
同步的表為innodb引擎的表,不然用xtrabackup還是會鎖表
假設環境為:現在login庫下的表a,備份的時候插入數據,最終行為5418272
注:思路是備份,可是用mysqldump備份會鎖表,如果數據量很大的話,線上環境肯定不允許使用mysqldump備份
所以,我們采用的xtrabackup來進行在線熱備,至於,它的原理,請各位自行google
二.部署實例:
1.主DB,線上數據正常寫入的同時我實施備份
1 2 3 4mysql> 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)上,用於在上面進行還原
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上,解壓剛才的備份,並用於恢復
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
# 應用日志,保證數據一致
[root
@client103
tmp]
# innobackupex --apply-log /tmp/2014-02-22_07-43-36/
# 停mysql
[root
@client103
mysql]
# /etc/init.d/mysqld stop
# mysql數據目錄下的所有文件移到/tmp/mysqlbackup/下,不然,恢復有問題
# [這裡建議只復制數據文件,不建議復制(日志,索引,innodb共享表空間,innodb日志文件,慢日志等)]
[root
@client103
mysql]
# mv /var/lib/mysql/* /tmp/mysqlback
# 恢復數據
[root
@client103
mysql]
# innobackupex --copy-back /tmp/2014-02-22_07-43-36/
# 將原數據庫的內容復制mysql數據目錄(這裡就是我認為這個軟件不好的地方,大家也可以給點建議)
[root
@client103
mysqlback]
# mv /tmp/mysqlbac k/* /var/lib/mysql/
# 將數據目錄的權限修改為mysql權限
[root
@client103
mysql]
# chown mysql. /var/lib/mysql/
# 啟動數據庫
[root
@client103
mysql]
# /etc/init.d/mysqld start
# 驗證數據的一致性:5418272(主上的行)
mysql>
select
count(*) from a;
+----------+
| count(*) |
+----------+
| 5418272 |
+----------+
4.將從DB2的主機指向主DB1
1 2 3 4 5 6 7 8 9 10 11 12 13# 剛才回復後,會有個文件:xtrabackup_binlog_pos_innodb --> 此文件記錄了備份時日志文件和pos號
[root
@client103
mysql]
# cat xtrabackup_binlog_pos_innodb
/var/lib/mysql/mysql-101-bin.000008 2423
# 建立主從關系
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;
# 查看同步狀態
mysql> show slave statusG;
5.此時如果都為yes,則主從則建立完畢!大家可自行測試
注:
還有一種方式在線添加主從,即原本的從機只做冗余,可以在從機暫時停止主從,
然後,在從機上執行備份,看當前從機上,日志執行到哪個文件,哪個位置(master的日志文件和pos號)