Mysql主從復(fù)制數(shù)據(jù)和數(shù)據(jù)回閃[刪庫到跑路](mysql 5.6偎捎,centos 7)

  • 安裝mysql

    • 版本一致
    • 初始化表,并在后臺啟動mysql
    • 修改root的密碼
  • 修改主服務(wù)器master:

         #vi /etc/my.cnf
         [mysqld]
         log-bin=mysql-bin   //[必須]啟用二進(jìn)制日志
         server-id=220      //[必須]服務(wù)器唯一ID创译,默認(rèn)是1店溢,一般取IP(192.168.10.220)最后一段
    
  • 修改從服務(wù)器slave:

         #vi /etc/my.cnf
         [mysqld]
         log-bin=mysql-bin   //[必須]啟用二進(jìn)制日志
         server-id=221      //[必須]服務(wù)器唯一ID,默認(rèn)是1矩桂,一般取IP(192.168.10.221)最后一段
    
  • 在主服務(wù)器上建立帳戶并授權(quán)slave:

     #/usr/local/mysql/bin/mysql -uroot -p   
     mysql>CREATE USER 'mysync'@'192.168.10.221' IDENTIFIED BY 
           'q123456';
     mysql>GRANT REPLICATION SLAVE ON *.* to 
           'mysync'@'192.168.10.221' identified by 'q123456'; //一般不用  
    root帳號沸移,%表示所有客戶端都可能連,只要帳號侄榴,密碼正確雹锣,此處可
    用具體客戶端IP代替,如192.168.145.221癞蚕,加強安全蕊爵。
    
  • 登錄主服務(wù)器的mysql,查詢master的狀態(tài)

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |     
    Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000008 |      708 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
  • 配置從服務(wù)器

    mysql>change master to master_host='192.168.145.220',
          master_user='mysync',master_password='q123456', 
          master_log_file='mysql-bin.000008',master_log_pos=708;  //注意不要斷開桦山,708數(shù)字前后無單引號攒射。
    mysql>start slave;    //啟動從服務(wù)器復(fù)制功能
    
  • 查看從服務(wù)器狀態(tài)

    mysql> show slave status;
    #注意Slave_IO_Running: Yes    //此狀態(tài)必須YES
    #注意Slave_SQL_Running: Yes     //此狀態(tài)必須YES
    #檢查狀態(tài)時發(fā)現(xiàn)Fatal error: The slave I/O thread stops because 
    #master and slave have  equal MySQL server UUIDs; these UUIDs 
    #must be different for replication to work.
    # 因為測試時使用的虛擬機,整個復(fù)制了另一個虛擬機恒水,所以会放,倆份  
    #mysql是一模一樣的,mysql 5.6的復(fù)制引入了uuid的概念钉凌,各個復(fù)制結(jié)
    #構(gòu)中的server_uuid得保證不一樣咧最,但是查看到直接copy  data文件夾
    #后server_uuid是相同的,show variables like '%server_uuid%';解決方  
    #法:找到data文件夾下的auto.cnf文件御雕,修改里面的uuid值矢沿,保證各個
    #db的uuid不一樣,重啟db即可,另外server_id也檢查一下酸纲,是否相同
    
  • 主從配置完成

  • 主從庫會同步數(shù)據(jù)行捣鲸,但并不會同步庫和表的結(jié)構(gòu)信息

  • 在主從上都創(chuàng)建數(shù)據(jù)庫CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8 COLLATE utf8_general_ci

  • 在主從上都上創(chuàng)建表

    CREATE TABLE `test` (
    `id`  int NOT NULL AUTO_INCREMENT ,
    `name`  varchar(255) NULL ,
    `age`  int NULL ,
    PRIMARY KEY (`id`)
    );
    
  • 在master上插入數(shù)據(jù)[會同步到從庫]

    INSERT INTO `test`.`test` (`id`, `name`, `age`) VALUES ('1', 'mico', '18');
    INSERT INTO `test`.`test` (`id`, `name`, `age`) VALUES ('2', 'cube', '20');
    
  • 在master上刪除數(shù)據(jù)(模擬誤操作[會同步到從庫])delete from test;

    mysql> select * from test;
    Empty set (0.00 sec)
    
  • binglog2sql簡介
    利用binlog2sql閃回工具,來恢復(fù)誤刪除的數(shù)據(jù)闽坡。我們都知道binlog的作用是備份恢復(fù)和完成MySQL的主從復(fù)制功能栽惶。利用mysqlbinlog工具可以進(jìn)行基于時間點或者位置偏移量的數(shù)據(jù)恢復(fù)工作脓诡,在生產(chǎn)環(huán)境中遇到誤刪除,改錯數(shù)據(jù)的情況媒役,那是常有的事兒祝谚。我們都知道Oracle數(shù)據(jù)庫有閃回功能,而MySQL本身沒有自帶閃回酣衷,但我們可以使用binlog2sql來完成這項工作交惯。binlog是以event作為單位,來記錄數(shù)據(jù)庫變更的數(shù)據(jù)信息穿仪,閃回就是可以幫助我們重現(xiàn)這些變化數(shù)據(jù)信息之前的操作席爽。也就是說對于insert操作,會生成delete語句啊片,反之delete操作只锻,會生成insert語句。對于update操作紫谷,也會生成相反的update語句齐饮。這款工具只能使用在binlog格式為row模式下。

  • 下載binlog2sql

  • 安裝依賴

    python-pip 笤昨,
    PyMySQL 祖驱,
    python-mysql-replication,
    wheel argparse
    
  • 如果是內(nèi)網(wǎng)環(huán)境瞒窒,需要手動下載三方包安裝捺僻,此次測試使用pip安裝三方包

    wget https://bootstrap.pypa.io/get-pip.py
    python get-pip.py
    pip -V  #查看pip版本
    unzip  binlog2sql-master.zip
    cd binlog2sql-master
    pip install –r requirements.txt
    
  • python binlog2sql.py --help

    -B, --flashback 生成回滾語句
    --start-file 需要解析的binlog文件
    --start-position 解析binlog的起始位置
    --stop-position解析binlog的結(jié)束位置
    --start-datetime 從哪個時間點的binlog開始解析,格式必須為datetime
    --stop-datetime 到哪個時間點的binlog停止解析崇裁,格式必須為datetime
    -d, --databases 只輸出目標(biāo)db的sql
    -t, --tables 只輸出目標(biāo)tables的sql
    
  • 確定當(dāng)前binlog文件和position位置

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |   
    Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000008 |     1932 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

可以看到當(dāng)前binlog是:mysql-binlog.000008
位置偏移量:1932

  • 需要預(yù)估下時間匕坯,誤操作的時間范圍應(yīng)該在下午14點20分到14點30分之間:
    [root@localhost binlog2sql]# python binlog2sql.py -h192.168.10.220 -  
    P3306 -uroot -pmico -dtest -ttest --start-file='mysql-bin.000008' --start-
    datetime='2017-12-09 14:20:00' --stop-datetime='2017-12-09 14:30:00'
    # 結(jié)果發(fā)現(xiàn)啥都沒有。拔稳。葛峻。執(zhí)行date命令發(fā)現(xiàn)時區(qū)不對。壳炎∨⑶福”普欤現(xiàn)在是凌
    # 晨2點:
    [root@localhost binlog2sql]# python binlog2sql.py -h192.168.10.220 -
    P3306 -uroot -pmico -dtest -ttest --start-file='mysql-bin.000008'
    INSERT INTO `test`.`test`(`age`, `id`, `name`) VALUES (18, 1, 'mico'); #start 1524 end 1697 time 2017-12-09 01:46:27【插入語句】
    INSERT INTO `test`.`test`(`age`, `id`, `name`) VALUES (20, 2, 'cube'); #start 1728 end 1901 time 2017-12-09 01:46:27【插入語句】
    DELETE FROM `test`.`test` WHERE `age`=20 AND `id`=2 AND     
    `name`='cube' LIMIT 1; #start 1932 end 2105 time 2017-12-09 02:00:21【第一個刪除語句】
    DELETE FROM `test`.`test` WHERE `age`=18 AND `id`=1 AND `name`='mico' LIMIT 1; #start 2136 end 2309 time 2017-12-09 02:00:21【第二個刪除語句】
    # 縮小范圍:
    [root@localhost binlog2sql]# python binlog2sql.py -h192.168.10.220 -P3306 -uroot -pmico -dtest -ttest --start-file='mysql-bin.000008' --start-datetime='2017-12-09 02:00:00' --stop-datetime='2017-12-09 02:01:00'
    DELETE FROM `test`.`test` WHERE `age`=20 AND `id`=2 AND `name`='cube' LIMIT 1; #start 1932 end 2105 time 2017-12-09 02:00:21【刪除語句】
    DELETE FROM `test`.`test` WHERE `age`=18 AND `id`=1 AND `name`='mico' LIMIT 1; #start 2136 end 2309 time 2017-12-09 02:00:21【刪除語句】
    
  • 由上一步可知匿辩,誤操作的sql位置在1932到2309之間:
    [root@localhost binlog2sql]# python binlog2sql.py -h192.168.10.220 -P3306 -uroot -pmico -dtest -ttest --start-file='mysql-bin.000008' --start-position=1932 --stop-position=2309 -B >t_rollback.sql
    [root@localhost binlog2sql]# cat t_rollback.sql 
    INSERT INTO `test`.`test`(`age`, `id`, `name`) VALUES (18, 1, 'mico');   #start 2136 end 2309 time 2017-12-09 02:00:21
    INSERT INTO `test`.`test`(`age`, `id`, `name`) VALUES (20, 2, 'cube'); #start 1932 end 2105 time 2017-12-09 02:00:21
    
  • 使用回滾文件,恢復(fù)數(shù)據(jù)
    mysql -uroot -pmico test < t_rollback.sql
    
  • 檢驗數(shù)據(jù)是否恢復(fù)成功
    mysql> select * from test;
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    |  1 | mico |   18 |
    |  2 | cube |   20 |
    +----+------+------+
    2 rows in set (0.00 sec)
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榛丢,一起剝皮案震驚了整個濱河市铲球,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晰赞,老刑警劉巖稼病,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件选侨,死亡現(xiàn)場離奇詭異,居然都是意外死亡然走,警方通過查閱死者的電腦和手機援制,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芍瑞,“玉大人晨仑,你說我怎么就攤上這事〔鹈剩” “怎么了洪己?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竟贯。 經(jīng)常有香客問我答捕,道長,這世上最難降的妖魔是什么屑那? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任拱镐,我火速辦了婚禮,結(jié)果婚禮上持际,老公的妹妹穿的比我還像新娘痢站。我一直安慰自己,他們只是感情好选酗,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布阵难。 她就那樣靜靜地躺著,像睡著了一般芒填。 火紅的嫁衣襯著肌膚如雪呜叫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天殿衰,我揣著相機與錄音朱庆,去河邊找鬼。 笑死闷祥,一個胖子當(dāng)著我的面吹牛娱颊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凯砍,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼箱硕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悟衩?” 一聲冷哼從身側(cè)響起剧罩,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎座泳,沒想到半個月后惠昔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幕与,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年镇防,在試婚紗的時候發(fā)現(xiàn)自己被綠了啦鸣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡来氧,死狀恐怖赏陵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饲漾,我是刑警寧澤蝙搔,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站考传,受9級特大地震影響吃型,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僚楞,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一勤晚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泉褐,春花似錦赐写、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跳座,卻和暖如春端铛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疲眷。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工禾蚕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狂丝。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓换淆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親几颜。 傳聞我的和親對象是個殘疾皇子倍试,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 【MySQL】Linux下MySQL 5.5具壮、5.6和5.7的RPM准颓、二進(jìn)制和源碼安裝 1.1BLOG文檔結(jié)構(gòu)圖 ...
    小麥苗DB寶閱讀 10,523評論 0 31
  • 一、什么是Mysql主從復(fù)制 MySQL主從復(fù)制是其最重要的功能之一棺妓。主從復(fù)制是指一臺服務(wù)器充當(dāng)主數(shù)據(jù)庫服務(wù)器攘已,另...
    人在碼途閱讀 2,745評論 0 23
  • 清晨,公交車?yán)飫倓偤米鴿M位置 雖然坐滿怜跑,但人各有位样勃,也不覺得人多或擁擠 大家像是默契般的很安靜 玩手機的也少 有的...
    可愛蛋黃派閱讀 275評論 0 0
  • 愛,是懂得性芬;愛峡眶,是陪伴;愛植锉,是無怨無悔的付出辫樱;愛,更是一種境界…… 真愛過才會懂俊庇。 曾經(jīng)一個有家的女人...
    楠妃閱讀 200評論 0 0
  • 半夜隱約的骨頭痛狮暑,肌膚比眼睛先領(lǐng)悟到,天氣已轉(zhuǎn)涼辉饱;隱居半日搬男,除卻吃肉喝茶清潔外,并無半點兒創(chuàng)作彭沼,愈發(fā)無趣缔逛,遂雨中散...
    你說我聽好么閱讀 194評論 2 0