系統(tǒng)變遷之四--mysql主從同步

主從同步

第一篇文章說過,初始版本的系統(tǒng)一直單庫運行挣菲,所有的讀枪芒、寫野蝇,以及數(shù)據(jù)存儲都放在了同一臺dbserver中。出現(xiàn)問題谅年,哭都沒地方...于是...增加多個dbserver茧痒,單主庫多從庫,避免出現(xiàn)單庫數(shù)據(jù)文件問題導(dǎo)致的數(shù)據(jù)損失...

修改數(shù)據(jù)文件的存儲位置

mysql默認(rèn)的數(shù)據(jù)庫文件是放在安裝目錄下的(/var/lib/mysql)融蹂,先把這個路徑設(shè)定到阿里云數(shù)據(jù)盤旺订,防止系統(tǒng)更新或者其他問題時造成數(shù)據(jù)文件損壞。

  • 使用root用戶或具有root權(quán)限的用戶超燃,在目標(biāo)路徑下新建一個目錄区拳,比如叫做mysqldata,并修改其權(quán)限
    mkdir /alidata1/mysqldata
    chown -R mysql:mysql /alidata1/mysqldata/  ← 改變數(shù)據(jù)庫的歸屬為mysql

  • 把MySQL服務(wù)進(jìn)程停掉(一開始就做了,或者半夜干吧...):
    mysqladmin -u root -p shutdown

  • 把/var/lib/mysql整個目錄移到/alidata1/mysqldata
    mv /var/lib/mysql /alidata1/mysqldata

  • 找到my.cnf配置文件意乓,如果/etc/目錄下沒有my.cnf配置文件樱调,請到/usr/share/mysql/下找到*.cnf文件,拷貝其中一個到/etc/并改名為my.cnf)中。命令如下:
    cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

  • 編輯MySQL的配置文件/etc/my.cnf笆凌,為保證MySQL能夠正常工作圣猎,需要指明mysql.sock文件的產(chǎn)生位置。修改socket=/var/lib/mysql/mysql.sock一行中等號右邊的值為:/alidata1/mysqldata/mysql.sock 乞而。操作如下:
    vi  my.cnf  (用vi工具編輯my.cnf文件送悔,找到下列數(shù)據(jù)修改之)
    # The MySQL server[mysqld]  port = 3306
    #socket  = /var/lib/mysql/mysql.sock(原內(nèi)容,為了更穩(wěn)妥用“#”注釋此行)
    socket  = /alidata1/mysqldata/mysql.sock∽δ!(加上此行)

     // 為了防止binlog日志擠爆硬盤欠啤,加入另外的配置:
     expire_logs_days = 10  (表示binlog日志過期時間,單位為天,注意這個配置是在每次切換新的log文件時才會清除對應(yīng)的log文件的屋灌。也可以在mysql運行期間命令行執(zhí)行 set global expire_log_days=10)
    
  • 修改MySQL啟動腳本/etc/init.d/mysql洁段,把其中datadir=/var/lib/mysql一行中,等號右邊的路徑改成你現(xiàn)在的實際存放路徑:/alidata1/mysqldata
    vi /etc/init.d/mysql
    #datadir=/var/lib/mysql(注釋此行)
    datadir=/alidata1/mysqldata (加上此行)
    如果是CentOS還要改 /usr/bin/mysqld_safe 相關(guān)文件位置声滥;最后 做一個mysql.sock 鏈接:
    ln -s /home/data/mysql/mysql.sock /var/lib/mysql/mysql.sock

  • 重新啟動MySQL服務(wù)
    /etc/init.d/mysqld start

主庫設(shè)置成功后眉撵,其他的從庫也全都按照同樣的步驟來操作侦香。

導(dǎo)出及導(dǎo)入數(shù)據(jù)
  • 在主庫服務(wù)器中執(zhí)行以下命令落塑,用于導(dǎo)出對應(yīng)的數(shù)據(jù)庫
    mysqldump -u mysqlsuperuser -p dbname> dbname.sql
  • 在從庫中先建立同名數(shù)據(jù)庫
    mysql -u mysqlsuperuser -p
    create database dbname
  • 使用scp或者別的命令將dbname.sql拷貝到對應(yīng)的從庫服務(wù)器(們),并導(dǎo)入:
    mysql -u mysqlsuperuser -p
    source /path/dbname.sql
在主從庫中創(chuàng)建用于同步的數(shù)據(jù)庫用戶
  • 創(chuàng)建用戶
    create user 'dbcopy'@'%' identified by '****'
  • 賦相應(yīng)的權(quán)限
    • 主庫
      grant replication slave,replication client on . to 'dbcopy'@'%' identified by '****';
    • 從庫
      grant replication slave,replication client on . to 'dbcopy'@'%' identified by '****';
      ......
配置同步選項
  • 修改主庫的my.cnf文件
    log_bin = mysql-bin
    server_id = 21013 (必須明確地指定一個唯一的服務(wù)器ID 此處取服務(wù)器Ip的最后兩個段).
    如果之前沒有在mysql 的配置文件中指定log_bin 就需要重新啟動Mysql罐韩。 為了確認(rèn)二進(jìn)制日志文件是否已經(jīng)在主庫上創(chuàng)建憾赁,使用以下命令查看
    show master status;

  • 修改各從庫的my.cnf文件
    備庫上也需要做同樣的配置,并重啟數(shù)據(jù)庫
    log_bin = mysql-bin
    server_id = 208246
    relay_log = /var/lib/mysql/mysql-relay-bin (指定中繼日志的位置和命名)
    log_slave_updates = 1 (允許備庫將其重放的事件也記錄到自身的二進(jìn)制日志)
    read_only = 1(只讀模式散吵,防止多端同時寫數(shù)據(jù)造成各個點的數(shù)據(jù)不同步)

  • 開啟復(fù)制
    在從庫中執(zhí)行以下命令
    CHANGE MASTER TO MASTER_HOST='masterIP',
    MASTER_USER='dbcopy',
    MASTER_PASSWORD='****',
    MASTER_LOG_FILE = 'mysql-bin.000002',
    MASTER_LOG_POS=0;
    其中master_log_file和master_log_pos的值都是在主庫中使用show master status來取到的龙考。剛開始配置時,pos位置可以指定為0

  • 常用命令
    SHOW SLAVE STATUS; //查看配置信息矾睦。
    START SLAVE晦款;//開啟復(fù)制。
    STOP SLAVE; //停止復(fù)制

  • 其他配置

    • 推薦的復(fù)制配置
      在主庫上二進(jìn)制日志最重要的選項是:
      sync_binlog =1
      如果開啟該選項枚冗,mysql每次在提交事物請會將二進(jìn)制日志同步到磁盤上缓溅,保證在服務(wù)器崩潰的時候不會丟失事件。
    • 如果使用InnoDB 強烈推薦設(shè)置如下選項:
      innodb_flush_logs_at_trx_commit
      innodb_support_xa=1
      innodb_safe_binlog
  • 如果正在使用mysql 5.5 ,最好設(shè)置以下選項:
    sync_master_info=1
    sync_replay_log = 1
    sync_relay_long_info =1

出現(xiàn)數(shù)據(jù)不同步時的處理方案

當(dāng)出現(xiàn)數(shù)據(jù)不同步時赁温,一般執(zhí)行 show slave status坛怪;會有以下結(jié)果:

Paste_Image.png
 Slave_IO_Running:連接到主庫,并讀取主庫的日志到本地股囊,生成本地日志文件
 Slave_SQL_Running:讀取本地日志文件袜匿,并執(zhí)行日志里的SQL命令。

一般是出現(xiàn)同步錯誤或者master_log的info出現(xiàn)了變化稚疹,相應(yīng)的解決方案如下:

  • 同步錯誤解決方案:
    slave stop;
    set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; //值為1表示跳過一個錯誤居灯,可以設(shè)置為N。不過跳過去的數(shù)據(jù)就跟主庫不同步了,要手動處理
    slave start;
    show slave status; // 查看同步狀態(tài)是否恢復(fù)正常了
  • 主庫日志信息變更導(dǎo)致的錯誤解決方案
       查看主庫
    show master status; //記錄下File,Position字段怪嫌,假設(shè)為‘mysql-bin.000004’,98;
    在從庫中執(zhí)行以下命令:
    stop slave;
    change master to master_log_file='mysql-bin.000004',master_log_pos=98;
    start slave;
    show slave status; //查看同步狀態(tài)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末待牵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子喇勋,更是在濱河造成了極大的恐慌缨该,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件川背,死亡現(xiàn)場離奇詭異贰拿,居然都是意外死亡,警方通過查閱死者的電腦和手機熄云,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門膨更,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缴允,你說我怎么就攤上這事荚守。” “怎么了练般?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵矗漾,是天一觀的道長。 經(jīng)常有香客問我薄料,道長敞贡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任摄职,我火速辦了婚禮誊役,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谷市。我一直安慰自己蛔垢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布迫悠。 她就那樣靜靜地躺著鹏漆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪及皂。 梳的紋絲不亂的頭發(fā)上甫男,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音验烧,去河邊找鬼板驳。 笑死,一個胖子當(dāng)著我的面吹牛碍拆,可吹牛的內(nèi)容都是我干的若治。 我是一名探鬼主播慨蓝,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼端幼!你這毒婦竟也來了礼烈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤婆跑,失蹤者是張志新(化名)和其女友劉穎此熬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滑进,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡犀忱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扶关。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阴汇。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖节槐,靈堂內(nèi)的尸體忽然破棺而出搀庶,到底是詐尸還是另有隱情,我是刑警寧澤铜异,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布哥倔,位于F島的核電站,受9級特大地震影響熙掺,放射性物質(zhì)發(fā)生泄漏未斑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一币绩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧府阀,春花似錦缆镣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至田巴,卻和暖如春钠糊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壹哺。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工抄伍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人管宵。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓截珍,卻偏偏與公主長得像攀甚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岗喉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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