程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 線上mysql數據庫不停機的環境下如何添加新的從機

線上mysql數據庫不停機的環境下如何添加新的從機

編輯:關於MYSQL數據庫

       在工作中,主從環境搭的多了,但是,基本上都是在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 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)上,用於在上面進行還原

    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號)

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved