mysql怎么實時同步兩個數(shù)據(jù)庫
創(chuàng)新互聯(lián),是一家集策劃、設(shè)計、技術(shù)開發(fā)一體的專業(yè)互聯(lián)網(wǎng)產(chǎn)品服務(wù)公司,致力于為企業(yè)信息化提供驅(qū)動力。技術(shù)團(tuán)隊10年來致力于為客戶提供企業(yè)網(wǎng)站定制,成都手機(jī)網(wǎng)站制作。先后服務(wù)了成百上千客戶,包括各類中小企業(yè)、高校、政府。 創(chuàng)新互聯(lián)將利用公司在過去10年的資源積累,力爭為客戶打造真正革命性的口碑產(chǎn)品!
實現(xiàn)兩個Mysql數(shù)據(jù)庫之間同步同步原理:
MySQL 為了實現(xiàn)replication 必須打開bin-log 項,也是打開二進(jìn)制的MySQL 日志記錄選項。MySQL 的bin log 二
進(jìn)制日志,可以記錄所有影響到數(shù)據(jù)庫表中存儲記錄內(nèi)容的sql 操作,如insert / update / delete 操作,而不記錄
select 這樣的操作。因此,我們可以通過二進(jìn)制日志把某一時間段內(nèi)丟失的數(shù)據(jù)可以恢復(fù)到數(shù)據(jù)庫中(如果二進(jìn)制日
志中記錄的日志項,包涵數(shù)據(jù)庫表中所有數(shù)據(jù),那么, 就可以恢復(fù)本地數(shù)據(jù)庫的全部數(shù)據(jù)了)。 而這個二進(jìn)制日志,
如果用作遠(yuǎn)程數(shù)據(jù)庫恢復(fù),那就是replication 了。這就是使用replication 而不用sync 的原因。這也是為什么要設(shè)
置bin-log = 這個選項的原因。
IP的設(shè)置:A主機(jī) IP:10.10.0.119;Mask:255.255.0.0;B主機(jī) IP:10.10.8.112;Mask:255.255.0.0
在IP設(shè)置完成以后,需要確定兩主機(jī)的防火墻確實已經(jīng)關(guān)閉??梢允褂妹顂ervice iptables status查看防火墻狀態(tài)。如果防火墻狀態(tài)。
為仍在運(yùn)行。使用service iptables stop來停用防火墻。如果想啟動關(guān)閉防火墻,可以使用setup命令來禁用或定制。最終以兩臺主機(jī)可以相互ping通為佳。
3.2 配置A主(master) B從(slave)模式;3.2.1 配置A 為master。
增加一個用戶同步使用的帳號:
GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;
GRANTREPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’。
賦予10.10.8.112也就是Slave機(jī)器有File權(quán)限,只賦予Slave機(jī)器有File權(quán)限還不行,還要給它REPLICATION SLAVE的權(quán)限才可以。
增加一個數(shù)據(jù)庫作為同步數(shù)據(jù)庫:create database test;
創(chuàng)建一個表結(jié)構(gòu):create table mytest (username varchar(20),password varchar(20));
修改配置文件:修改A的/etc/my.cnf文件。
在my.cnf配置項中加入下面配置:
server-id = 1 #Server標(biāo)識
log-bin
binlog-do-db=test #指定需要日志的數(shù)據(jù)庫
重起數(shù)據(jù)庫服務(wù):
service mysqld restart
查看server-id:
show variable like ‘server_id’。
第一個mysql的my.ini文件默認(rèn)是在如下路徑
C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\my.ini
copy該ini文件存放到E:\MySQL\mysql_base,這個路徑可以隨意定義,并修改如下內(nèi)容:[client]port=3307#第一個數(shù)據(jù)庫的默認(rèn)端口是3306 這里需要另外啟用一個端口
# The TCP/IP Port the MySQL Server will listen onport=3307# Path to installation directory. All paths are usually resolved relative to this.
basedir="E:\MySQL\MySQL Server 5.5\"
#第二個數(shù)據(jù)庫basedir
# Path to the database root
#第二個數(shù)據(jù)庫datadir
Mysql主從配置,實現(xiàn)讀寫分離
原理:主服務(wù)器(Master)負(fù)責(zé)網(wǎng)站NonQuery操作,從服務(wù)器負(fù)責(zé)Query操作,用戶可以根據(jù)網(wǎng)站功能模特性塊固定訪問Slave服務(wù)器,或者自己寫個池或隊列,自由為請求分配從服務(wù)器連接。主從服務(wù)器利用MySQL的二進(jìn)制日志文件,實現(xiàn)數(shù)據(jù)同步。二進(jìn)制日志由主服務(wù)器產(chǎn)生,從服務(wù)器響應(yīng)獲取同步數(shù)據(jù)庫。
具體實現(xiàn):
1、在主從服務(wù)器上都裝上MySQL數(shù)據(jù)庫,windows系統(tǒng)鄙人安裝的是mysql_5.5.25.msi版本,Ubuntu安裝的是mysql-5.6.22-linux-glibc2.5-i686.tar
windows安裝mysql就不談了,一般地球人都應(yīng)該會。鄙人稍微說一下Ubuntu的MySQL安裝,我建議不要在線下載安裝,還是離線安裝的好。大家可以參考 這位不知道大哥還是姐妹,寫的挺好按照這個就能裝上。在安裝的時候可能會出現(xiàn)幾種現(xiàn)象,大家可以參考解決一下:
(1)如果您不是使用root用戶登錄,建議 su - root 切換到Root用戶安裝,那就不用老是 sudo 了。
(2)存放解壓的mysql 文件夾,文件夾名字最好改成mysql
(3)在./support-files/mysql.server start 啟動MySQL的時候,可能會出現(xiàn)一個警告,中文意思是啟動服務(wù)運(yùn)行讀文件時,忽略了my.cnf文件,那是因為my.cnf的文件權(quán)限有問題,mysql會認(rèn)為該文件有危險不會執(zhí)行。但是mysql還會啟動成功,但如果下面配置從服務(wù)器參數(shù)修改my.cnf文件的時候,你會發(fā)現(xiàn)文件改過了,但是重啟服務(wù)時,修改過后的配置沒有執(zhí)行,而且您 list一下mysql的文件夾下會發(fā)現(xiàn)很多.my.cnf.swp等中間文件。這都是因為MySQL啟動時沒有讀取my.cnf的原因。這時只要將my.cnf的文件權(quán)限改成my_new.cnf的權(quán)限一樣就Ok,命令:chmod 644 my.cnf就Ok
(4)Ubuntu中修改文檔內(nèi)容沒有Vim,最好把Vim 裝上,apt-get install vim,不然估計會抓狂。
這時候我相信MySQL應(yīng)該安裝上去了。
2、配置Master主服務(wù)器
(1)在Master MySQL上創(chuàng)建一個用戶‘repl’,并允許其他Slave服務(wù)器可以通過遠(yuǎn)程訪問Master,通過該用戶讀取二進(jìn)制日志,實現(xiàn)數(shù)據(jù)同步。
最簡單的辦法就是用個ACCESS,無論你用什么代碼來寫,或者直接操作SQL,
如果是直接操作SQL那更簡單,他可以直接建立操作查詢,兩個地方的數(shù)據(jù)庫也可以用OpenRowSet關(guān)鍵詞來取得聯(lián)系。如果是用代碼來編譯程序做這樣的操作,我的建議是用如PetShop和直接用個ACCESS來做跨數(shù)據(jù)庫的數(shù)據(jù)表操作。
ACCESS直接做遠(yuǎn)程網(wǎng)絡(luò)連接表(SQL遠(yuǎn)程數(shù)據(jù)庫可以是任意地方的,只樣能與當(dāng)前主機(jī)能PING上)在ACCESS里做查詢語句,或者直接做一個更新查詢,代碼調(diào)用的時候直接查詢更新查詢就達(dá)到了你的目的。如果是不借助ACCESS或者是借助ACCESS要用純代碼也有辦法:
一個是用ACCESS的ODBC()庫功能他的表結(jié)構(gòu)是:
Select * from 表名 IN ODBC[ODBC:Driver={SQL Server};Server=服務(wù)器IP地址;UID=數(shù)據(jù)庫用戶名;PWD=密碼;DataBase=數(shù)據(jù)庫名稱]
你把上面的查詢當(dāng)成一個表,把要插入的表和目的表用上面的格式寫下來,拼接字符串就達(dá)到了目的。
OpenROWSET是SQL官方提供的一種辦法,兩個異地數(shù)據(jù)庫,可以用OPENROWSET關(guān)鍵字來做連接,網(wǎng)上代碼多的是。
PETSHOP是.Net提供的一種方法,直接用.NET連接數(shù)據(jù)庫,用PETSHOP象ACCESS查詢視圖一樣做查詢表,但是我覺得這樣做不好,程序運(yùn)行效率低,而且相當(dāng)不靈活。
一個表更新到另一個表要做更新檢查,一邊插入查詢以便做連接查詢匹配沒有的數(shù)據(jù)才可以查詢,重復(fù)的不允許插入,代碼這么寫:
INSERT INTO 目的表 SELECT 字段名稱, 字段名稱1, ... FROM 處理表 INNER JOIN 目的表 ON 處理表.匹配字段=目的表.匹配字段 WHERE ((目的表.字段) IS NULL)
把篩選好的表插入你的目的表,數(shù)據(jù)庫問題解決了,插入檢查還要解決啊,你琢磨一下。
1、首先我們打開Workbench創(chuàng)一個建數(shù)據(jù)庫(這里都使用閃電1執(zhí)行選定命令行)。
2、先創(chuàng)建Student學(xué)生表。
3、再創(chuàng)建course課程表。
4、然后就可以創(chuàng)建sc關(guān)聯(lián)表了我們先寫上Student的主鍵和course的主鍵,并寫上sc自己的屬性成績。
5、再寫上主鍵約束,以及把sc表的學(xué)號屬性和Studnet的學(xué)號關(guān)聯(lián)、課程號屬性和course的課程號關(guān)聯(lián)。
6、再次運(yùn)行就可以看到我們成功創(chuàng)建了學(xué)生表和課程表的關(guān)聯(lián)表sc。