mysql主從複製

Mysql主從複製

★優點:

(1)如果主服務器出現問題,可以快速切換到從服務器提供服務

(2)可以在從服務器上執行查詢操作來降低主服務器的訪問壓力

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

 一般只有更新不頻繁的數據或者實時性要求不高的數據可以通過從服務器查詢,實時性要求高的數據仍然需要從主數據庫獲得

★主服務器配置

  • 登錄mysql數據庫

    mysql>mysql -uroot -p123456

  • 給從服務器設置授權用戶

    mysql>grant all slave on *.* to [email protected] 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 即正常



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章