mysql中的复制(配置主从数据库)
生活随笔
收集整理的這篇文章主要介紹了
mysql中的复制(配置主从数据库)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
一般使用MySQL的時候,如果數據量不大,我們都使用一臺MySQL服務器,備份的時候使用mysqldump工具就可以了,但是隨著業務不斷發展,問題出現了:首先:數據量往往直線上升,單獨一臺數據庫服務器開始出現性能的瓶頸,數據訪問越來越慢。
其次:備份也變得困難了,因為mysqldump是導出一份文本文件,而數據量特別大的時候,這樣的備份往往需要很長時間,可能有人會說,我們可以直接通過拷貝數據文件來備份數據庫,這樣很方便,快捷,不錯,這樣是比mysqldump方便快捷,但是,直接拷貝數據文件備份的方式要求我們必須先關閉mysql服務,然后再拷貝數據文件,否則,你拷貝的文件很可能是壞的。而實際運行的mysql服務往往要求在任何時候都不可以停止服務,所以這樣的備份方式在此情況下不可行。
如果你遇到了類似上面的問題,你就可以使用建立MySQL主從服務器的方式來解決,下面先來看看主從服務器的設置:
前提:MySQL主從服務器最好使用相同的軟件版本,以避免不不可預期的故障。
首先設置MySQL主服務器:
在主服務器上為從服務器建立一個用戶:
grant replication slave on *.* to '用戶名'@'主機' identified by '密碼';
編輯主服務器的配置文件:/etc/my.cnf的mysqld處
server-id = 1
log-bin
binlog-do-db=需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可
binlog-ignore-db=不需要備份的數據庫苦命,如果備份多個數據庫,重復設置這個選項即可
編輯從服務器的配置文件:/etc/my.cnf
server-id=2
master-host=主機
master-user=用戶名
master-password=密碼
master-port=端口
replicate-do-db=需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可
記得先手動同步一下主從服務器中要備份的數據庫,然后重啟主,從服務器。
要驗證主從設置是否已經成功,可以登錄從服務器輸入如下命令:
mysql> show slave status\G
會得到類似下面的列表:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果這兩個選項不全是Yes,那就說明你前面某個步驟配置錯了。
如果你的設置是正確的,嘗試在主服務器上插入若干條記錄,然后你再轉到從服務器,會發現相應的新記錄已經自動同步過來了。
如果你的主從服務器已經配置好了,那么你在應用程序中,只要保證所有的insert/delete/update操作是在主服務器上進行的,那么相應的數據變化會自動同步到從服務器上,這樣,我們就可以把select操作分擔到多臺從數據庫上,從而降低服務器的載荷。
如果你想使用復制數據文件的方式來備份數據庫,只要在從服務器上的mysql命令行先鍵入slave stop;然后復制數據庫文件,復制好了,再 在mysql命令行鍵入slave start;啟動從服務器,這樣就即備份了數據有保證了數據完整性,而且整個過程中主服務器的mysql無需停止。
-----------------------------------------------------------------------------------
提示:如果修改了主服務器的配置,記得刪除從服務器上的master.info文件。否則從服務器使用的還是老配置,可能會導致錯誤。
-----------------------------------------------------------------------------------
注意:關于要復制多個數據庫時,binlog-do-db和replicate-do-db選項的設置,網上很多人說是用半角逗號分隔,經過測試,這樣的說法是錯誤的,MySQL官方文檔也明確指出,如果要備份多個數據庫,只要重復設置相應選項就可以了。
比如:
binlog-do-db=a
binlog-do-db=b
replicate-do-db=a
replicate-do-db=b
-----------------------------------------------------------------------------------
補充:從服務器上my.cnf中的master-*的設置僅在第一次生效,后保存在master.info文件里。
-----------------------------------------------------------------------------------
在從服務器上使用show slave status
Slave_IO_Running,為No,則說明IO_THREAD沒有啟動,請執行slave start [IO_THREAD]
Slave_SQL_Running為No則復制出錯,查看Last_error字段排除錯誤后執行slave start [SQL_THREAD]
查看Slave_IO_State字段
空 //復制沒有啟動
Connecting to master//沒有連接上master
Waiting for master to send event//已經連上
-----------------------------------------------------------------------------------
可以使用LOAD DATA FROM MASTER語句來建立slave。但有約束條件:
數據表要全部是MyISAM表,必須有SUPER權限,master的復制用戶必須具備RELOAD和SUPER權限。
在master端執行RESET MASTER清除已有的日志變更,
此時slave端會因為找不到master日志無法啟動IO_THREAD,請清空data目錄下
relay-log.info,hosname-relay-bin*等文件重新啟動mysql
中繼日志文件默認的文件為hostname-relay-bin.nnn和hostname-relay-bin.index。可用從服務器的--
relay-log和--relay-log-index選項修改。在從服務器中還有一個relay-log.info中繼信息文件,可用
--relay-log-info-file啟動選項修改文件名。
雙機互備則是兩個mysql同時配置為master及slave
-----------------------------------------------------------------------------------
主服務器上的相關命令:
show master status
show slave hosts
show {master|binary} logs
show binlog events
purge {master|binary} logs to 'log_name'
purge {master|binary} logs before 'date'
reset master(老版本flush master)
set sql_log_bin={0|1}
-----------------------------------------------------------------------------------
從服務器上的相關命令:
slave start
slave stop
SLAVE STOP IO_THREAD //此線程把master段的日志寫到本地
SLAVE start IO_THREAD
SLAVE STOP SQL_THREAD //此線程把寫到本地的日志應用于數據庫
SLAVE start SQL_THREAD
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //動態改變master信息
PURGE MASTER [before 'date'] 刪除master端已同步過的日志
-----------------------------------------------------------------------------------
--read-only
該選項讓從服務器只允許來自從服務器線程或具有SUPER權限的用戶的更新。可以確保從服務器不接受來自客戶的更新。
轉載于:https://blog.51cto.com/loveyou913/359931
總結
以上是生活随笔為你收集整理的mysql中的复制(配置主从数据库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件上传及删除
- 下一篇: 谈谈Unicode编码,简要解释UCS、