首先在主服務器上添加可登陸的用戶權限:
GRANT REPLICATE SLAVE on *.* to 'username'@'host' identified by 'password'
然後設置主服務器的my.ini文件。
server-id=1 #主服務器標識
log-bin #啟用二進制日志
binlog-do-bin=databasename #要備份的數據庫名稱,多個可以重復該配置過程
binlog-ignore-db=databasename #不備份的數據庫名稱,多個可以重復該配置過程
從服務器的配置
server-id=2 #從服務器標識,范圍1---2E32-1
master-host=hostname/hostip #主服務器ip或主機名稱
master-user=username #登陸主服務器的用戶名
master-password=password #登陸主服務器的密碼
master-port = portid #主服務器的運行端口號
replicate-do-db=databasename #要同步的數據庫名稱,多個可以重復該配置過程
replicate-ignore=db=databasename #不同步的數據庫名稱,多個可以重復該配置
log-bin #從服務器啟動二進制日志記錄
master-connect-retry = seconds #與主服務器斷開連接後,重新自動連接的時間
skip-start-slave #防止隨服務器的啟動而啟動同步程序
至此,一個簡單的主從服務器配置完成。
在master服務器端可運行的命令:
show master status;#查看主服務器的運行狀態
show slave hosts;#查看從服務器主機列表
補充:
在從服務器上使用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 logs
show binlog events
purge logs to ''log_name''
purge logs before ''date''
reset master(老版本flush master)
set sql_log_bin=
從服務器上的相關命令:
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端已同步過的日志