實(shí)現(xiàn)目標(biāo)
現(xiàn)在需要搭建兩臺(tái)MySQL服務(wù)器(一主一從),一臺(tái)作為主服務(wù)器,一臺(tái)作為從服務(wù)器,主服務(wù)器進(jìn)行寫(xiě)操作,從服務(wù)器進(jìn)行讀操作。
工作流程
主服務(wù)器:
開(kāi)啟二進(jìn)制日志
配置唯一的server-id
獲得master二進(jìn)制日志文件名及位置
創(chuàng)建一個(gè)用于slave和master通信的用戶(hù)賬號(hào)。
從服務(wù)器:
配置唯一的server-id
使用master分配的用戶(hù)賬號(hào)讀取master二進(jìn)制日志
啟用slave服務(wù)。
(免費(fèi)學(xué)習(xí)視頻教程推薦:mysql視頻教程)
準(zhǔn)備工作
主從數(shù)據(jù)庫(kù)版本最好一樣
主從數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)保持一致
主數(shù)據(jù)庫(kù):192.168.244.201 : 3306
從數(shù)據(jù)庫(kù):192.168.244.202 : 3306
開(kāi)始配置
配置 Master 主服務(wù)器
找到主數(shù)據(jù)庫(kù)的配置文件my.cnf(Windows中是my.ini),我的在/etc/my.cnf
在[mysqld]部分插入如下兩行:
[mysqld] log-bin=mysql-bin #開(kāi)啟二進(jìn)制日志 server-id=201 #設(shè)置server-id,唯一值,標(biāo)識(shí)主機(jī)
重啟mysql服務(wù)
systemctl restart mysqld
創(chuàng)建用于主從同步的賬號(hào)/密碼
進(jìn)入MySQL : mysql -u root -p 回車(chē)輸入密碼。
我創(chuàng)建的用戶(hù)名叫“master_root”密碼是“MySql@6688”
【注意:由于之前把密碼改成支持簡(jiǎn)單密碼123456的了,導(dǎo)致這里新建用戶(hù)出現(xiàn)一些問(wèn)題,說(shuō)密碼不符合策略等,后來(lái)干脆我重裝mysql,使用默認(rèn)復(fù)雜密碼了,就沒(méi)有這么多問(wèn)題了。習(xí)慣就好其實(shí)。】
下面我都用的%,沒(méi)有寫(xiě)具體ip,你可以自行決定。
#創(chuàng)建用戶(hù)(IP為可訪問(wèn)該master的IP,任意IP就寫(xiě)'%') mysql> CREATE USER 'master_root'@'192.168.244.202' IDENTIFIED BY 'MySql@6688'; #分配權(quán)限(IP為可訪問(wèn)該 master的IP,任意IP就寫(xiě)'%') mysql> GRANT REPLICATION SLAVE ON *.* TO 'master_root'@'192.168.244.202'; #刷新權(quán)限 mysql>flush privileges;
查看master狀態(tài),記錄二進(jìn)制文件名(mysql-bin.000001)和位置(154).后面配從庫(kù)要用。
show master status;
配置 Slave 主服務(wù)器
修改my.cnf 文件
vim /etc/my.cnf
[mysqld] server-id=202 #設(shè)置server-id,唯一值,唯一標(biāo)識(shí)從庫(kù)
重啟mysql服務(wù)
systemctl restart mysqld
登錄進(jìn)入mysql,執(zhí)行同步sql語(yǔ)句(主服務(wù)器名,用于主從的用戶(hù)名,密碼,二進(jìn)制文件名,位置)
mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.244.201', -> MASTER_USER='master_root', -> MASTER_PASSWORD='MySql@6688', -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=154;
啟動(dòng)slave同步進(jìn)程
mysql>start slave;
查看slave狀態(tài)
show slave statusG
注意后面不要分號(hào);否則最后一行顯示報(bào)錯(cuò)如下:
ERROR: No query specified
當(dāng)Slave_IO_Running和Slave_SQL_Running都為YES的時(shí)候就表示主從同步設(shè)置成功了。
接下來(lái)就可以進(jìn)行一些驗(yàn)證了,比如在主master數(shù)據(jù)庫(kù)的test數(shù)據(jù)庫(kù)的一張表中插入一條數(shù)據(jù),在slave的test庫(kù)的相同數(shù)據(jù)表中查看是否有新增的數(shù)據(jù)即可驗(yàn)證主從復(fù)制功能是否有效,還可以關(guān)閉slave(mysql>stop slave;),然后再修改master,看slave是否也相應(yīng)修改(停止slave后,master的修改不會(huì)同步到slave),就可以完成主從復(fù)制功能的驗(yàn)證了。
其他相關(guān)參數(shù):
master開(kāi)啟二進(jìn)制日志后默認(rèn)記錄所有庫(kù)所有表的操作,可以通過(guò)配置來(lái)指定只記錄指定的數(shù)據(jù)庫(kù)甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項(xiàng):
不同步哪些數(shù)據(jù)庫(kù)
binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema
只同步哪些數(shù)據(jù)庫(kù),除此之外,其他不同步
binlog-do-db = game
如之前查看master狀態(tài)時(shí)就可以看到只記錄了test庫(kù),忽略了manual和mysql庫(kù)。
相關(guān)文章教程推薦:mysql教程