1. 程式人生 > >MYSQL資料庫間同步資料

MYSQL資料庫間同步資料

環境要求:

Windows 作業系統

需要Mysql 3.23.15以後的版本。

假設資料庫A為主機,資料庫B為從機(A向B提供同步服務,即B中的資料來自A)

A機器:IP=10.10.151.166

B機器:IP=10.10.151.156

下面看單向同步的配置步驟:

1         在機器A中建立一個新的資料庫,sql語句:

  1. CREATE DATABASE backup_db;  
  2. USE test;  
  3. CREATE TABLE `backup_table` (  
  4.  `id` int(11) NOT NULL auto_increment,  
  5.  `name` varchar(20) character set utf8 NOT NULL,  
  6.  `sex` varchar(2) character set utf8 NOT NULL,  
  7.  PRIMARY KEY  (`id`)  
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;  

2     開啟A機器的mysql安裝目錄下的my.ini檔案,在檔案最後新增:

  1. server-id=1  
  2. log-bin=c:\mysqlback #啟動同步事件的日誌記錄檔案  
  3. binlog-do-db=test #提供資料同步服務的資料庫  

3      在機器B中建立一個和機器A結構相同的資料庫,sql語句:

  1. CREATE DATABASE backup_db;  
  2. USE test;  
  3. CREATE TABLE `backup_table` (  
  4.  `id` int(11) NOT NULL auto_increment,  
  5.  `name` varchar(20) character set utf8 NOT NULL,  
  6.  `sex` varchar(2) character set utf8 NOT NULL,  
  7.  PRIMARY KEY  (`id`)  
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;  

注:機器A和B的資料庫結構必須一致,否則無法構成同步

4       開啟B機器的mysql安裝目錄下的my.ini檔案,在檔案最後新增:

  1. server-id=2  
  2. master-host=10.10.151.166 #主機A的地址  
  3. master-user=ym #主機A提供給B的使用者,該使用者中需要包括資料庫test的許可權  
  4. master-password=ym #訪問密碼  
  5. master-port=3306 #埠,主機的MYSQL埠  
  6. master-connect-retry=60 #重試間隔60秒,當主從伺服器連線意外斷開時資料庫每隔60秒進行一個重新連線  
  7. replicate-do-db=test #同步的資料庫   
  8. p>5   完成以上配置之後,在機器A的mysql控制檯中輸入:</p>  
  1. GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO [email protected] IDENTIFIED BY  'ym' ;  

    #這句是為讓從伺服器有足夠的許可權從主伺服器是哪個接收二進位制日誌檔案

6    重啟機器A和B的mysql資料庫,

  1. 在機器B的mysql控制檯:  
  2.  Mysql>slave start;  
  3. 如果想檢視同步配置的情況,可以按如下輸入:  
  4. 機器A的mysql控制檯:  
  5. Mysql>show master status;  
  6. 機器B的mysql控制檯:  
  7. Mysql>show slave status;  

 7         在機器A中test資料庫中的backup_table表中插入一些資料,檢視機器B中test資料庫中的backup_table表應該同步實現了資料的改動。

   下面是雙向的資料同步配置步驟:

    1還是上面使用的機器A和機器B,這是B是主機,A是從機,保持上面的配置不要改在機器A 的mysql安裝目錄下的my.ini檔案最後新增:
       master-host=10.10.151.156 #主機B的地址
       master-user=ym #主機B提供給A的使用者,該使用者中需要包括資料庫test的許可權
        master-password=ym #訪問密碼
        master-port=3306 #埠,主機的MYSQL埠
        master-connect-retry=60 #重試間隔60秒當主從伺服器連線意外斷開時資料庫每隔60秒進行一個重新連線
        replicate-do-db=test #同步的資料庫
        在機器B的mysql安裝目錄下的my.ini檔案最後新增       
        log-bin=c:\mysqlback #啟動同步事件的日誌記錄檔案
        binlog-do-db=test #提供資料同步服務的資料庫
       
      2 機器B的mysql控制檯輸入:
         GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO [email protected] IDENTIFIED BY  'ym' ;    
      3 重啟機器A和機器B的mysql資料庫
        在機器B中test資料庫中的backup_table表中插入一些資料,檢視機器A中test資料庫中的backup_table表應該同步實現了資料的改動。但不會導致迴圈
       注:實現mysql資料庫的資料同步,須將倆臺windows作業系統的windows防火牆關閉
       Mysql 資料同步的原理:
       Mysql的資料同步,在Mysql官方網站文件上,叫replication字面意思是重作,這個很準確的表明了Mysql資料庫操作的實質,是重作同樣的操作,以保持主數 據庫伺服器沒事master與從屬資料庫伺服器slave之間的資料保持一致。
       從MySQL3.23.15以後,Mysql支援單向的非同步複製。也就是說,1臺Mysql伺服器充當Master(主庫),1臺或多臺Mysql伺服器充當Slaves(從庫),資料從 Master向Slaves進行非同步複製。注意,這種複製是非同步的,有別於Mysql的同步複製實現(這種實現稱做Mysql叢集,Mysql Cluster)。
       當主庫有更新的時候,主庫會把更新操作的SQL寫入二進位制日誌(Bin log它記錄了所有更新了資料或者已經潛在更新了資料的所有語句),並維護一個二進位制日誌 檔案的索引,以便於日誌檔案輪迴(Rotate)。在從庫啟動非同步複製的時候,從庫會開啟兩個I/O執行緒,其中一個執行緒連線主庫,要求主庫把二進位制日誌的變化部 分傳給從庫,並把傳回的日誌寫入本地磁碟。另一個執行緒則負責讀取本地寫入的二進位制日誌,並在本地執行,以反映出這種變化保證主從資料庫之間的資料同步。 較老的版本在複製的時候只啟用一個I/O執行緒,實現這兩部分的功能。這種方法是利用了Mysql資料庫主(master)和從(slave)非同步複製功能,來實現資料庫 之間的同步。
       Windows系統中,Mysql安裝目錄下my.ini檔案中:
       log-bin=c:\mysqlback;
       這一句表示資料庫的二進位制日誌檔案都存放在C盤根目錄下,並且以mysqlback為檔名,以.000001這樣的序號為為檔案的副檔名,每一個binlog檔案預設是 1GB,超過了會自動換到以.000002為副檔名的的檔案,索引檔案mysqlback.index檔案記錄了所有mysqlback的檔名。當然也可以刪除這些二進位制日誌 檔案:
       使用下面的兩個命令   
       PURGE {MASTER | BINARY} LOGS TO 'log_name' //log_name不會被清除,刪除這個序號以//前的
       PURGE {MASTER | BINARY} LOGS BEFORE 'date' //date不會被清除,刪除這個日期以前的
       刪除之前所有的二進位制日誌檔案,並重新生成新的二進位制日誌檔案字尾從.000001開始。
       但是,當如果有一個正在執行的從屬伺服器,該伺服器當前正在讀取正在試圖刪除的日誌檔案時則該刪除語句不會起作用,而是會失敗,並伴隨一個錯誤。不過, 如果從屬伺服器是停止的,並且碰巧清理了其想要讀取的日誌檔案,則從屬伺服器啟動後便不能複製。當從屬伺服器正在複製時,刪除語句可以安全執行,不需要 停止它們。
       在完成了主伺服器A的my.ini檔案的配置之後,重啟主伺服器A,從現在起對主伺服器A資料庫的增加、刪除和修改操作都會記錄在二進位制日誌檔案中(查詢操作不 做記錄)。但也可以指定從伺服器從哪裡開始和主伺服器進行同步,在從伺服器上執行下面sql操作:
       首先輸入命令:slave stop;
       然後輸入:Mysql > change master to 
       —>master_host=’master_host_name’,#主機IP地址
       —>master_user=’replication_user_name’,
       —>master_password=’replication_password’,
       —>master_log_file=’recorded_log_file_name’,
       —>master_log_pos=’recorded_log_position’;
       最後輸入命令:slave start;
       這裡,把上面的recorded_log_file_name改為想從哪個二進位制日誌檔案開始同步的檔名,而recorded_log_position改為從該檔案的第幾條記錄開始同 步。
       先輸入slave stop;指令,再輸入上述指令,最後輸入slave start;指令
       當資料同步產生錯誤時,會在mysql安裝目錄下生成*.err日誌檔案,同時同步執行緒會退出。
       purge binary logs to ‘mysql-bin.000003′;
       PURGE {MASTER | BINARY} LOGS TO 'log_name'
       PURGE {MASTER | BINARY} LOGS BEFORE 'date'
       用於刪除列於在指定的日誌或日期之前的日誌索引中的所有二進位制日誌。這些日誌也會從記錄在日誌索引檔案中的清單中被刪除,這樣被給定的日誌成為第一個。
       例如:
       PURGE MASTER LOGS TO 'mysql-bin.010';
       PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';
        清除3天前的 binlog
        PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
       BEFORE變數的date自變數可以為'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同義詞。

相關推薦

MYSQL資料庫同步資料

環境要求:Windows 作業系統需要Mysql 3.23.15以後的版本。假設資料庫A為主機,資料庫B為從機(A向B提供同步服務,即B中的資料來自A)A機器:IP=10.10.151.166B機器:IP=10.10.151.156下面看單向同步的配置步驟:1        

如何對MySQL資料庫中的資料進行實時同步

www.syncnavigator.cn SyncNavigator 做資料同步時所支援的資料庫型別: 支援sqlserver 2000-2014所有版本,全相容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。 來源資料庫和目標資料庫可以版本不同

mysql和postgresql資料庫資料遷移(註釋遷移)

package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; im

解決查詢MySQL資料庫中重複資料的問題

今天遇到一個問題,需求是查詢新採集資料中 重複資料 的條數。在採集完資料對資料進行去重查詢時sql結果不正確,因為有一部分sql是在業務程式碼中進行拼接的: “SELECT COUNT(*) FROM (“ + sql + “)_AA;” 之前的sql:SELECT 1 FROM TAB

『PHP學習筆記』系列七:讀取MySQL資料庫中的資料

資料表結構: 資料表資料:  從 MySQL 資料庫讀取資料:  SELECT 語句用於從資料表中讀取資料: SELECT column_name(s) FROM table_name 我們可以使用 * 號來讀取所有資料表中的欄位: SEL

『PHP學習筆記』系列八:向MySQL資料庫中新增資料

資料表結構: 資料表原有資料: 向MySQL資料庫寫入資料:  INSERT INTO 語句通常用於向 MySQL 表新增新的記錄: INSERT INTO table_name (column1, column2, column3,...) VALUES

MySQL資料庫匯入Excel資料

我用的是MySQ-front,登陸的是本地資料庫(localhost) 新建資料庫——新建表格——新建欄位 首先要了解所要建立的表格的屬性列,即在資料庫裡欄位的資料型別欄位名最好為英文命名 連結:http://www.runoob.com/sql/sql-datatypes-genera

MySQL資料庫單向同步問題(Mina 邏輯實現)

時間戳法: (用時間作比較)           用過MINA的人都知道,MINA是一個基於網路的非同步通訊的框架,它可以實現兩臺機器的資訊的互動,不僅可以使用java通訊,還可以應用於網頁的資訊互動。    

恢復MySQL資料庫刪除的資料

在日常運維工作中,對於資料庫的備份是至關重要的!資料庫對於網站的重要性使得我們對 MySQL 資料庫的管理不容有失!然而是人總難免會犯錯誤,說不定哪天大腦短路了,誤操作把資料庫給刪除了,怎麼辦? 下面,就 MySQL 資料庫誤刪除後的恢復方案進行說明。 一、工作場景 (1)MySQL資料庫每晚12:00

原創 mysql資料庫千萬級別資料的查詢優化和分頁測試

本文為本人最近利用幾個小時才分析總結出的原創文章,希望大家轉載,但是要註明出處 http://blog.sina.com.cn/s/blog_438308750100im0b.html 有什麼問題:[email protected]於堡艦 我原來的公司是一家網路遊戲公司,其中網

Mysql資料庫大文字資料處理

資料庫大文字資料處理 目標:把 mp3檔案儲存到資料庫中! 在my.ini中新增如下配置: max_allowed_packet=10485760 1 什麼是大文字資料 所謂大文字資料,就是大的位元組資料,或大的字元資料。標準SQL中提供瞭如下型別來

mysql資料庫學習04-資料型別

1、字串 char: 定長字串,可以在後面的小括號中指定固定長度;例如:char(4),表示固定字元長度為4. 如果存"abc",會被儲存為“abc ”,不足4位會在右邊用空格填充。最多支援255個位元組。 varchar: 變長字串,可以在後面的小括號中指定最長字串長度;例如:va

mysql資料庫學習03-資料插入、修改和查詢

1、表中插入資料: insert into user (name, age) values ('張三', 12 ); 上例說明:之前建立了user表,裡面包含name和age兩列,資料型別分別為varchar和int; 這裡插入資料,要求(name,age)和 ('張三', 12 )值和型別

java向MySql資料庫中插入資料

package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLExc

使用python讀取mysql資料庫並進行資料的操作

(一)環境的配置 使用python呼叫mysql資料庫要引進一些庫。 目前我使用的python版本是python3.6。引進庫為pymysql 其他對應的庫可以有以下選擇:  mysqldb,oursql, PyMySQL, myconnpy 等,參考如下連結:  http://de

MySQL資料庫讀書筆記--------資料表的基本操作

4.1.1          在建立表之前應該在命令列輸入: use <databaseName> ,表明進入哪個資料庫進行修改。 4.1.2  主鍵約束         主鍵,又稱之為主碼,是表中一列或多列的集合,不允許為空。它能唯一的標識表中的一條記錄。

mysql資料庫中表和資料的基本操作

資料庫的結構為:資料庫→表→資料資料庫建立完成後不能直接新增資料,需先建表,在表裡寫資料表的建立:create  table  [if not  exists] 表名(欄位列表, [約束或索引列表],欄位列表, [約束或索引列表],索引約束) [表選項列表];刪除:drop&nb

python連線MySQL資料庫並讀取資料

# 匯入模組 import pymysql # 1.連線到mysql資料庫 conn = pymysql.connect(host='localhost', user='root', password='1234', db='mycommodity', cha

Mysql資料庫如何檢視資料表table被哪些儲存過程procedure使用過

一、摘要 由於程式碼重構,修改了多張表結構,java後臺程式碼做相應修改處理,開發人員內測沒問題提交業務部門測試時發現,新客戶取不到產品價格,原因是儲存過程呼叫的還是就的資料表。為此,需要先找出哪些儲存過程使用到了這些表,然後修改。那麼問題來了,mysql資料庫

Mysql資料庫刪除重複資料

最近因為發現數據庫中的表有髒資料,需要維護。這些髒資料就是重複資料,需要將其刪除。 現假設有一張test表,主鍵欄位為num,還有id,one,two三個欄位。假設id規定只能有一條記錄(即需要為id建立聯合唯一索引)。表中資料如下: 可以看出:表中資料明顯有不滿足條件的重複資料。 解決方法:使用一