mysql主從複製

Mysql主從複製mysql

★優勢:sql

(1)若是主服務器出現問題,能夠快速切換到從服務器提供服務數據庫

(2)能夠在從服務器上執行查詢操做來下降主服務器的訪問壓力服務器

(3)能夠在從服務器上執行備份來避免備份期間影響主服務器的服務ide

 通常只有更新不頻繁的數據或者實時性要求不高的數據能夠經過從服務器查詢,實時性要求高的數據仍然須要從主數據庫得到線程

★主服務器配置rest

  • 登陸mysql數據庫日誌

    mysql>mysql -uroot -p123456server

  • 給從服務器設置受權用戶進程

    mysql>grant all slave on *.* to user@192.168.16.105 identified by "123"

    或者

    mysql>grant replication slave on *.* user@192,168,16,105 identified by "123"

  • 修改主數據庫服務器的配置文件my.cnf,開啓binlog,並設置server-id的值

    log-bin=mysql-bin

    server-id=1  <==主從server-id不能相同

  • 在主服務器上設置讀鎖定,確保沒有數據庫操做,以便得到一個一致性的快照

    mysql>flush tables with read lock

  • 查看主服務器上當前二進制日誌名和偏移量值

    mysql>show master status

  • 目前主數據庫服務器已經中止了更新操做,生成主數據庫的備份

    備份方式1:cp所有的數據

    備份方式2:mysqldump備份數據庫

    若是主數據庫的服務能夠中止,那麼直接cp數據文件應該是最快生成快照的方式

  • 主數據庫備份完畢後,主數據庫能夠恢復讀寫操做,剩下的操做只需在從服務器上執行便可

    mysql>unlock tables;

  • 把主服務器的一致性備份恢復到從數據庫上,能夠把以上文件的壓縮包解壓後放到相應的目錄中

★從服務器配置

  • 修改從服務器的server-id,server-id的值必須是惟一的,不能和主服務器設置的相同,若是有多個從服務器,那麼每一個從服務器必須有本身惟一的server-id值

  • server-id=2

    master-host=192.168.16.100

    master-user=user1

    master-password=123456

    master-port=3306

    log-bin=mysql-bin

  • 重啓mysqld服務

    rpm包安裝:service mysqld restart

    源碼安裝:/usr/local/mysql/bin/mysql_safe --user=mysql &

              關掉服務pkill mysqld;kill -9端口號;kill -2進程關閉

  • 查看相應的主從複製進程列表

    (1)processlist

    mysql>show processlist \G

    若是出現

    state:waiting for master to send event說明鏈接主數據庫成功,併成功獲取bin-log

    state:has read all ready log;waiting for the slave i/o thread to update it

    成功執行bin-log日誌,正在等待着去再次鏈接主數據庫並從新獲取bin-log日誌

    (2)status

    mysql>show slave status\G

    若是出現

    Slave_IO_Running:Yes說明此進程負責從主服務器上讀取binlog日誌,並寫入從服務器的中繼日誌

    Slave_SQL_Running:Yes說明此進程負責讀取而且執行中繼日誌中的binlog日誌

    以上兩個都是Yes則表示成功,只要有一個是no,則表示複製進程中止,錯誤緣由能夠在「last_error」字段的值中看到

  • 從數據庫經常使用命令

    start slave           啓動複製線程(自動執行)

    stop slave            中止複製線程

    show slave status     查看從數據庫狀態(查看主從是否鏈接成功)

    show master logs      查看主數據庫bin-log日誌

    change master to      動態改變到主服務器的配置

    show processlist      查看從數據庫運行進程

★常見錯誤:

  從服務器沒法同步

  Show slave status

  顯示Slave_SQL_Running爲no

      Seconds_Behind_Master爲null

緣由可能爲:

(1)程序可能在slave上進行了讀寫操做

(2)可能由slave機器重啓後,事務回滾形成的

解決方法:

(1)Mysql>slave stop;

     Mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

     Mysql>slave start;

 (2)Slave庫,Mysql>slave stop;

    Master庫,Mysql>show master status;

    查看狀態,而後到slave服務器上執行手動同步

    mysql>change master to

    master_host="192.168.16.100",

    master_user="user1",

    master_password="123456",

    master_port=3306,

    master_log_file="mysql-bin.000003",

    master_log_pos=98;

    啓動slave服務mysql>slave start

    經過show slave status查看Slave_SQL_Running爲Yes,Seconds_Behind_Master爲0 即正常

相關文章
相關標籤/搜索