程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 簡單講解MySQL的數據庫復制方法

簡單講解MySQL的數據庫復制方法

編輯:關於MYSQL數據庫

MySQL復制其實就是把數據從一個節點(master) 拷貝到另一個節點(slaves), 當然根據應用架構的不同,采用的方式也不同,MySQL服務器之間的復制使用的是二進制日志機制.對master的更新與變動都會作為事件(event)記錄在日志中,日志中的信息會隨變化的不同被記錄成不同的格式.slaves被配置成從master讀取日志,並且執行二進制日志中的事件到slave本地數據庫.一旦master啟動二進制日志功能,那麼所有語句操作都會被記錄下來,每一個slave會收到一份整個日志內容的拷貝.slave的責任就是決定日志中的哪條語句需要被執行,而我們不能通過配置master來僅僅記錄某些特定的事件.如果您沒有另行指定,在主服務器二進制日志中的所有事件都在slave上執行.如果需要,還可以配置slave僅應用來自於特定數據庫或表的事件.

20151127172726207.jpg (506×339)

根據上圖來說說MySQL復制的工作機制,復制的過程在主從架構中一般是有三個線程來完成復制工作的,主服務器上dump thread ,從服務器I/O thread ,從服務器sql  thread, 如果想使用多線程的話需要打補丁的, 根據上圖一主一從的架構復制是這樣工作的,主服務器將操作寫入二進制日志,由主服務器上的dump線程將日志發送到從服務器上的I/O線程,然後存儲為中繼日志,而由sql線程根據中繼日志將數據寫入從服務器中,下面來配置下這樣的復制架構,


MySQL同主機不同數據庫的復制命令:注意運行在Terminal中,不運行在MySQL命令行中。

 mysqldump Portal_DEV -u root -ppassword1$ --add-drop-table | mysql Portal_Optimize -u root -ppassword1$

在復制過程中,出現如下報錯:

ERROR 1153 (08S01) at line 1160: Got a packet bigger than 'max_allowed_packet' bytes
 mysqldump: Got errno 32 on write

需要將my.cnf中的max_allowed_packet 放大,我本機默認是1M,放大至32M。重啟MySQL。

OK. 以上方案適用於小數據量的數據庫。下面來個大容量(1G以上)的。

 mysqldump -uroot -ppassword --quick Portal_DEV | gzip > Portal_DEV.contents.gz

通過以上命令,將Portal_DEV數據庫導成Portal_DEV.contents.gz壓縮文件。


gunzip < Portal_DEV.contents.gz | mysql -uroot -ppassword Portal_Optimize

然後通過以上命令,將Portal_DEV導入Portal_Optimize數據庫。

Perfect, it's done!!!

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