更多博文請關注:沒有傘的孩子必須努力奔跑(www.xuchanggang.cn)在工作中,主從環境搭的多了,但是,基本上都是在DBSERVER停機(游戲公司)的情況下搭建的,今天突
在工作中,主從環境搭的多了,但是,基本上都是在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 status\G),同步的數據庫為 login
3臺DB server的備份軟件(xtrbackup)都已經安裝完成
同步的表為innodb引擎的表,不然用xtrabackup還是會鎖表
假設環境為:現在login庫下的表a,備份的時候插入數據,最終行為5418272
注:思路是備份,可是用mysqldump備份會鎖表,如果數據量很大的話,線上環境肯定不允許使用mysqldump備份
所以,我們采用的xtrabackup來進行在線熱備,至于,它的原理,請各位自行google
二.部署實例:
1.主DB,線上數據正常寫入的同時我實施備份
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)上,用于在上面進行還原
[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上,解壓剛才的備份,并用于恢復
[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
# 剛才回復后,會有個文件: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 status\G;
5.此時如果都為yes,則主從則建立完畢!大家可自行測試
注:
還有一種方式在線添加主從,即原本的從機只做冗余,可以在從機暫時停止主從,
然后,在從機上執行備份,看當前從機上,日志執行到哪個文件,哪個位置(master的日志文件和pos號)
如果各位對此文章有異議或有更好的方式,歡迎反饋,大家共同進步!
本文出自 “沒有傘的孩子必須努力奔跑” 博客,請務必保留此出處
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com