環(huán)境
172.16.144.22(master)
172.16.144.168(slave)
系統(tǒng):centos7.7
創(chuàng)建個(gè)數(shù)據(jù)庫(kù)激挪,演示對(duì)已有的數(shù)據(jù)進(jìn)行數(shù)據(jù)同步
在master中create database wu;
在主服務(wù)器開啟二進(jìn)制日志并設(shè)置編號(hào)
vim /etc/my.cnf.d/server.cnf
[mysqld]
log-bin=master-bin\\開啟二進(jìn)制
log-bin-index=master-bin.index \\二進(jìn)制索引文件筛峭,保存所有binlog文件列表
server-id=1 \\設(shè)置服務(wù)器唯一編號(hào)
sync_binlog=1(確保binlog日志寫入以后與硬盤同步)
binlog_format=mixed(bin-log日志文件格式艰猬,設(shè)置為mixed婶希,可以防止主鍵重復(fù))
binlog-do-db=zhi(表示同步的庫(kù)為zhi) #只同步該庫(kù)
log-bin 不設(shè)置的話锅铅,默認(rèn)值 hostname-bin草娜。修改主機(jī)名陪踩,binlog文件名也會(huì)隨之改變咐低。但索引文件log-bin-index會(huì)獲取正確的值揽思。(只是binlog文件序列中途改名會(huì)混亂)
log-bin-index 沒賦值,默認(rèn)值與binlog文件同名见擦。索引文件名會(huì)隨主機(jī)名的改變而改變钉汗。改變主機(jī)名在重啟羹令,將找不到索引文件。而認(rèn)為索引文件不存在损痰,導(dǎo)致二進(jìn)制日志為空福侈。
service mysql restart
service iptables stop
創(chuàng)建復(fù)制賬號(hào)數(shù)據(jù)復(fù)制時(shí),從服務(wù)器都需要使用賬戶與密碼連接MySQL主服務(wù)器
且必須有replication slave權(quán)限
grant replication slave,replication client on *.* to root@'172.16.144.168 ' identified by 'cnhope';
有replication slave權(quán)限能夠獲取master上的二進(jìn)制日志卢未,就沒啥了肪凛。
可執(zhí)行show master/slave status
從服務(wù)器設(shè)置服務(wù)器編號(hào)
vim /etc/my.cnf.d/server.cnf
[mysqld]
#relay-log-index=slave-relay-bin.index
#relay-log=slave-relay-bin //作用跟上面的一樣
server-id=2 \\(主機(jī)唯一的標(biāo)識(shí)碼,不能重復(fù))
log-bin=mysql-bin(開啟二進(jìn)制日志系統(tǒng))
slave-skip-errors=all(跳過所有的錯(cuò)誤辽社,繼續(xù)執(zhí)行復(fù)制操作)
replicate-do-db=zhi(需要同步的數(shù)據(jù)庫(kù)名字伟墙,和Master要一致)
獲取主服務(wù)器二進(jìn)制日志信息
myql -uroot –pcnhope
flush tables with read lock; \\設(shè)置對(duì)所有數(shù)據(jù)庫(kù)表只讀
【圖1】
show master status;
unlock tables; \\解鎖
配置從服務(wù)器連接主服務(wù)器進(jìn)行數(shù)據(jù)復(fù)制
MariaDB [(none)]>stop slave;
MariaDB [(none)]> change master to
-> master_host=' 172.16.144.22',
-> master_user='wu',
-> master_password='cnhope',
-> master_log_file='Jacob-bin.000004', \\主服務(wù)器二進(jìn)制日志位置
-> master_log_pos=327;
MariaDB [(none)]> start slave; \\開啟主從連接
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G; \\查看從服務(wù)器狀態(tài)
驗(yàn)證數(shù)據(jù)同步
在master創(chuàng)建create database zhi; slave同步
Master創(chuàng)建其他庫(kù),則不同步
問題
1
在centos7.7版本10.4.10-MariaDB中在/etc/my.cnf填寫
[mysql]
log_bin=mysql-bin
log-bin-index=master-bin.index
啟動(dòng)成功但 不生效 mysql時(shí)提示該字段不生效
該字段要在/etc/my.cnf.d/server.cnf配置才生效
2
Start slave或者change master to厖報(bào)錯(cuò)時(shí)
reset slave; 再重新change master to 設(shè)置即可
3
vim /etc/my.cnf.d/server.cnf
[mysqld]
datadir=/var/lib/mysql
mysql在啟動(dòng)時(shí)沒有指定配置文件時(shí)會(huì)使用/etc/my.cnf配置文件關(guān)閉進(jìn)程
ps –ef |grep mysql
知識(shí)點(diǎn)
優(yōu)點(diǎn)支持myisam和innodb存儲(chǔ)引擎
二進(jìn)制日志:記錄服務(wù)器數(shù)據(jù)庫(kù)上所有變更滴铅。
記錄數(shù)據(jù)庫(kù)中表的更改(執(zhí)行完畢的語(yǔ)句才會(huì)被寫入二進(jìn)制日志)
show binlog events\G;
或者
show binlog events in 'master-bin.000001'\G
Log_name:存儲(chǔ)事件的文件名(一個(gè)事件只能存儲(chǔ)在一個(gè)文件中)
Pos:事件在文件中的開始位置
Event_type:事件類型
Server_id:創(chuàng)建服務(wù)器ID
End_log_pos:事件在文件中的結(jié)束位置
Info:事件信息的可讀文本前兩個(gè)組成事件二進(jìn)制日志位置
當(dāng)前正在寫入的二進(jìn)制日志文件:
show master status\G
Stop slave 停止slave
Reset slave 重置slave
flush tables with read lock;
刷新所有表并鎖定數(shù)據(jù)庫(kù)戳葵,防止在檢查binlog 位置之前數(shù)據(jù)庫(kù)發(fā)生改變