1、增加兩個MySQL,我將C:\xampp\mysql下的MYSQL復制了一份,放到D:\Mysql2\Mysql5.1
修改my.ini(linux下應該是my.cnf):
[client]
port =?3307
[mysqld]
port =?3307
basedir=D:/Mysql2/Mysql5.1/mysql
datadir=D:/Mysql2/Mysql5.1/mysql/data/
之后,再增加MySQL2服務,
mysqld?–install?MySQL2??--defaults-file=D:\Mysql2\Mysql5.1\mysql\my.ini(需要管理員權限,否則會被無情拒絕)
另一個MySQL將端口號設置為3308服務名為MySQL1(打算用做從數據庫)
2、新建了一個test數據庫,新建一張twenty_million表(id,name,value)往里面插入2000W條數據(5min)
3、主從數據庫同步配置, 如果不是同一個臺服務器上的需要設置權限用戶給它。
mysql>?GRANT?REPLICATION?SLAVE?ON?*.*?TO?'slave001'@'192.168.0.99'?IDENTIFIED?BY?'123456';
Query?OK,?0?rows?affected?(0.13?sec)
因為我的是一臺機器上進行測試,所以直接用root用戶了,密碼123
修改主數據庫的配置文件,my.ini,開啟BINLOG,并設置server-id的值,修改之后必須重啟Mysql2服務:
[mysqld]
log-bin=D:/Mysql2/Mysql5.1/mysql/log/mysql-bin.log
server-id=1
之后可以得到主服務器當前二進制日志名和偏移量,這個操作的目的是為了在從數據庫啟動后,從這個點開始進行數據的恢復
接下來停止主數據的更新操作,并生成數據庫的備份,可以通過mysqldump到從數據庫,當然也可以直接用cp命令將數據文件復制到從數據庫中去(1%拷了384秒,情何以堪?我還不如重新插一遍測試數據呢,果斷掐了)
也算學個命令,其實完全可以用navicate里的導出數據庫再導入數據庫
進行從數據庫的配置:
修改my,ini(my.cnf)
[mysqld]
server-id=2
log_bin?=?/var/log/mysql/mysql-bin.log
master-host?=192.168.1.100(本機的話:127.0.0.1//localhost是它的別名!)
master-user=test
master-pass=123456
master-port?=3306
master-connect-retry=60
replicate-do-db?=test
但是,我一直都無法啟動,晚上搞了很久也沒搞出個所以然來,最后只能添加錯誤日志
log-error=D:/Mysql1/Mysql5.1/mysql/log/mysql-bin.log
net?start?mysql1
日志截圖
繼續度娘的干活:
然后我就想知道自己的mysql版本,進入cmd:
我次奧,我一直以為我的mysql是5.1啊.知道了問題原因,解決也比較容易
在從數據庫的my.ini中只需要添加兩項:
server-id?=?2
replicate-do-db?=?mydatabase
之后再在cmd下:
mysql>?change?master?to?master_host='127.0.0.1',master_user='root',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=60,?master_port=3307;
其中master_log_file和master_log_pos通過在主數據庫show?master?status;得到。
端口不是默認端口的話,如master_port=3307,不要加引號。
接下來就是重啟服務,先啟動主數據庫服務(我的是mysql2),再啟動從數據庫服務,然后就算完成了主從配置,在主數據庫中更改test數據庫中數據,理論上,在從數據庫中也會做相應的更改
當然這是理論上的,實際上,我特么又出問題了,從數據庫中的數據并沒有按照理論上做出相應的更改,我仔細看了下show?slave?stats\G和別人成功的截圖對比下,其中slave_IO_Running這項,我的是NO人家的是YES,目測是這個問題,查看log日志
在主數據庫中
再更改從數據庫(建議開兩個CMD,我之前一直都是一個CMD,exit?cd麻煩死)
再
搞定,測試,成功!
4、最后總要說說它的實際作用的么,在我百度之前,我在想,這不就是數據庫的實時備份么,也沒什么大不了的,這樣的想法,只能說明自己對數據庫讀寫壓力完全不了解。
在MySQL數據庫中,支持單項、異步復制。在復制過程中,一個服務器充當主服務器,而另外一臺服務器充當從服務器。如下圖所示。此時主服務器會將更新信息寫入到一個特定的二進制文件中。并會維護文件的一個索引用來跟蹤日志循環。這個日志可以記錄并發送到從服務器的更新中去。當一臺從服務器連接到主服務器時,從服務器會通知主服器從服務器的日志文件中讀取最后一次成功更新的位置。然后從服務器會接收從那個時刻起發生的任何更新,然后鎖住并等到主服務器通知新的更新。
好處一:實現服務器負載均衡
即可以通過在主服務器和從服務器之間切分處理客戶查詢的負荷,從而得到更好的客戶相應時間。通常情況下,數據庫管理員會有兩種思路。
一是在主服務器上只實現數據的更新操作。包括數據記錄的更新、刪除、新建等等作業。而不關心數據的查詢作業。數據庫管理員將數據的查詢請求全部?轉發到從服務器中。這在某些應用中會比較有用。如某些應用,像基金凈值預測的網站。其數據的更新都是有管理員更新的,即更新的用戶比較少。而查詢的用戶數?量會非常的多。此時就可以設置一臺主服務器,專門用來數據的更新。同時設置多臺從服務器,用來負責用戶信息的查詢
二是在主服務器上與從服務器切分查詢的作業。在這種思路下,主服務器不單單要完成數據的更新、刪除、插入等作業,同時也需要負擔一部分查詢作業。而從服務器的話,只負責數據的查詢。當主服務器比較忙時,部分查詢請求會自動發送到從服務器重,以降低主服務器的工作負荷。
好處二:通過復制實現數據的異地備份
如上圖所示,可以定期的將數據從主服務器上復制到從服務器上,這無疑是先了數據的異地備份。在傳統的備份體制下,是將數據備份在本地。此時備份?作業與數據庫服務器運行在同一臺設備上,當備份作業運行時就會影響到服務器的正常運行。有時候會明顯的降低服務器的性能。同時,將備份數據存放在本地,也?不是很安全。如硬盤因為電壓等原因被損壞或者服務器被失竊,此時由于備份文件仍然存放在硬盤上,數據庫管理員無法使用備份文件來恢復數據。這顯然會給企業?帶來比較大的損失。
好處三:提高數據庫系統的可用性
數據庫復制功能實現了主服務器與從服務器之間數據的同步,增加了數據庫系統的可用性。當主服務器出現問題時,數據庫管理員可以馬上讓從服務器作為主服務器,用來數據的更新與查詢服務。然后回過頭來再仔細的檢查主服務器的問題。此時一般數據庫管理員也會采用兩種手段。
一是主服務器故障之后,雖然從服務器取代了主服務器的位置,但是對于主服務器可以采取的操作仍然做了一些限制。如仍然只能夠進行數據的查詢,而?不能夠進行數據的更新、刪除等操作。這主要是從數據的安全性考慮。如現在一些銀行系統的升級,在升級的過程中,只能夠查詢余額而不能夠取錢。這是同樣的道?理。
二是從服務器真正變成了主服務器。當從服務器切換為主服務器之后,其地位完全與原先的主服務器相同。此時可以實現對數據的查詢、更新、刪除等操?作。為此就需要做好數據的安全性工作。即數據的安全策略,要與原先的主服務器完全相同。否則的話,就可能會留下一定的安全隱患