主從服務(wù)器
什么是主從服務(wù)器
主從服務(wù)器就是多臺(tái)服務(wù)器協(xié)同工作 , 有一臺(tái)是主服務(wù)器 , 其他為從服務(wù)器 , 就是我們的主從服務(wù)器
這個(gè)是我們生活中常見的主從服務(wù)器(一主多從)
- 主從配置的架構(gòu) , 可以讓我們的訪問量提升
- 主從配置的機(jī)構(gòu) , 可以實(shí)現(xiàn)讀寫分離 , 主服務(wù)器寫數(shù)據(jù) , 沖服務(wù)器讀數(shù)據(jù)
- 主從配置的架構(gòu) , 必須實(shí)現(xiàn) server-id , 這個(gè) id 值是在這個(gè)架構(gòu)群里面每一臺(tái) , 都不重復(fù) 總結(jié) : * 主從服務(wù)器架構(gòu) , 可以有效的提升數(shù)據(jù)的安全性 , 數(shù)據(jù)實(shí)現(xiàn)了多臺(tái)服務(wù)器共享 , 每條服務(wù)器保證數(shù)據(jù)的完全一致
主從服務(wù)器的實(shí)現(xiàn)原理
說明 : 主服務(wù)器必須配置一個(gè) server-id 這個(gè)值是架構(gòu)群里面唯一的 , 然后在開啟一個(gè) bin 日志(二進(jìn)制日志) . 主服務(wù)器必須開啟一賬戶讓從服務(wù)器可以連接 , 這個(gè)賬戶必須有權(quán)限去讀取二進(jìn)制文件內(nèi)容 , 從服務(wù)器必須配置鏈接主服務(wù)器的信息 , 并且能夠成功的連接上主服務(wù)器 , 然后 IO 進(jìn)程讀取主服務(wù)器的二進(jìn)制日志文件 , 保存在自己的電腦上的中繼日志文件里面 , 然后 SQL 進(jìn)程讀取中繼日志文件 , 在一起執(zhí)行這個(gè) SQL 語句
主服務(wù)器 配置 : server-id 日志 : bin 日志 (記錄 SQL語句 , 修改數(shù)據(jù)結(jié)構(gòu) , 修改表信息等修改的語句) 配置賬戶 : 這個(gè)賬戶是從服務(wù)器鏈接的時(shí)候使用 (必須要有權(quán)限)
從服務(wù)器 配置 : server-id 配置 : 鏈接主服務(wù)器信息 中繼日志 : 是自行開啟的 , 可以不用配置
注意 : 從服務(wù)器能夠順利的連接主服務(wù)器 網(wǎng)絡(luò)要通 防火墻關(guān)閉或者對(duì)應(yīng)的端口要打開
MySQL服務(wù)器添加(授權(quán))賬號(hào)
grant 權(quán)限 on 庫名.表明 to 用戶名@IP地址 identified by 用戶密碼
這句話意思 : 設(shè)置權(quán)限 , 并給創(chuàng)建這個(gè)用戶 , 同時(shí)設(shè)置密碼 權(quán)限 : all : 所有權(quán)限 ; select : 查詢權(quán)限 庫名 : * : 所有權(quán)限 ; test : 指定 test 庫 表名 : * ; 所有表 ; test : 指定 test 表
用戶名 : 隨便寫必須加引號(hào) IP 地址 : % : 表示所有 IP 地址 , 必須加引號(hào) windows 上面包含 127.0.0.1 , Linux 上面不包含127.0.0.
- 創(chuàng)建一個(gè)用戶 : 并給權(quán)限 , 并給密碼
grant all on *.* to 'xiaoming'@'%' identified by '123456';
查看創(chuàng)建好的用戶
select host, user from mysql.user;
- 使用新創(chuàng)建的賬戶登錄一下
登錄不成功 ! 因?yàn)槭褂玫氖?127.0.0.1 的 IP 再次登錄
驗(yàn)證登錄成功 , 權(quán)限也是相對(duì)應(yīng)的 刪除用戶
drop user 'xiaoming'@'%';
再次創(chuàng)建一個(gè)用戶
bin-log 日志的講解
配置 server-id
- 打開配置文件
說明 : 配置文件所在位置可能有有所不同 , 請(qǐng)根據(jù)自己情況來
保存退出 :
- 停止 mysql 服務(wù)器
- 開啟 mysql 服務(wù)器
- 查看 bin 日志所在路徑 :
- bin 日志就是保存在我們數(shù)據(jù)目錄里面的
- log-bin.000001 這個(gè)就是二進(jìn)制日志文件
- log-bin.index 這個(gè)就是人禁止日志索引文件
- log-bin : 這個(gè)就是我們?cè)?my.cnf 里面配置的名字 使用工具查看 log-bin 里面的信息
使用它查看
- 在mysql 客戶端查看 bin 日志內(nèi)容
- 工具 , 與 mysql 命令對(duì)比 mysql 查看更方便 , 查看更清晰
- 對(duì) mysql 查看命令 , 進(jìn)一步說明
查看指定的日志文件名
和 bin-log 日志相關(guān)的一些函數(shù)
刷新日志文件 , 生成一個(gè)新的日志文件
flush logs;
查看日志文件 :
這個(gè)時(shí)候 , 日志文件就有兩份了 , 0000001 這個(gè)文件就可以保存?zhèn)浞?, 方便以后需要的時(shí)候使用
重啟服務(wù)器 , 也會(huì)生成新的 日志文件
查看日志文件
確定不需要的日志文件 , 刪除 , 重新生成一個(gè)新的
查看日志文件 :
查看正在使用的是按一個(gè)日志文件 :
可以使用 log-bin 日志完成數(shù)據(jù)恢復(fù)
log-bin 里面保存的二進(jìn)制內(nèi)容 , 就是 SQL語句 . 我們的數(shù)據(jù)遺失了 , 就可以通過再一次執(zhí)行這些 SQL 語句 , 完成數(shù)據(jù)的恢復(fù)
創(chuàng)建一個(gè)表
插入數(shù)據(jù) :
查看數(shù)據(jù) :
查看 bin 日志 查看記錄
bin 日志里面完美記錄了我們的操作信息
實(shí)現(xiàn)一個(gè)操作
- 刪除表
- 查看 bin 日志
- 找到恢復(fù)工具
Mysqlbinlog 就是恢復(fù)工具
- 查看幫助信息 :
確認(rèn)使用參數(shù) :
- start-position : 開始位置
- stop-position : 結(jié)束位置
- no-defaults : 不能使用默認(rèn)配置 使用操作 :
開始恢復(fù)數(shù)據(jù)
- 確認(rèn)數(shù)據(jù)庫信息
- 開始恢復(fù)
/usr/local/mysql/bin/mysqlbinlog --no-defaults --start-position=107 --stop-position=1148 /usr/local/mysql/data/log-bin.000001 | /usr/local/mysql/bin/mysql -u root -p
mysqlbinlog 只能讀出數(shù)據(jù) , 需要把讀出來的數(shù)據(jù)通過管道給 mysql 工具來進(jìn)行恢復(fù) 指定的用戶必須要有權(quán)限 , 才可以實(shí)現(xiàn)恢復(fù) !!!
查看數(shù)據(jù)庫
查看數(shù)據(jù)
操作成功
主從復(fù)制的配置
配置主服務(wù)器
授權(quán)權(quán)限 : replication slave 這個(gè)是給從服務(wù)器鏈接主服務(wù)器使用的權(quán)限 , 這個(gè)只能是從服務(wù)器連接主服務(wù)器的時(shí)候使用
在主服務(wù)器上面完成用戶創(chuàng)建操作 , 并且給權(quán)限是 : replication slave
這個(gè)賬戶才有從拂去連接主服務(wù)器的權(quán)限 說明 : 這里我們使用的 IP 地址是 % (所有的) , 但在公司要寫具體的 IP 地址 (公司的 IP地址不變)
確定主服務(wù)器
server-id 與 bin 是否設(shè)置成功
確定設(shè)置成功
確定防火墻
是可以讓從服務(wù)器連接的
目前是啟動(dòng)狀態(tài) , 關(guān)閉
配置從服務(wù)器
確定使用 windows 做從服務(wù)器
找到配置文件
打開配置文件
修改內(nèi)容如上 , 確認(rèn)保存關(guān)閉 , 這里是新加 沒有刪除任何內(nèi)容
重啟 mysql 服務(wù)器
登錄 windows 的 mysql 客戶端
確定數(shù)據(jù)庫中的信息
就可以去配置我們從服務(wù)器連接主服務(wù)器 : 配置信息
- change master to master_host=’主機(jī)IP’,
- master_user=’主機(jī)配置給從機(jī)的賬戶’,
- master_password=’主機(jī)配置給從機(jī)的賬戶密碼’,
- master_port=’主機(jī)的端口號(hào)’,
- master_log_file=’主機(jī)bin日志文件,正在使用的文件名’,
- master_log_pos=’主機(jī)bin日志文件的內(nèi)容,從那個(gè)節(jié)點(diǎn)開始復(fù)制’
- master_log_file :這個(gè)配置的文件办斑,必需是主服務(wù)器正在使用养葵。 確定主服務(wù)器正在使用 : 在主服務(wù)器上面操作 :
master_log_pos :就是配置主服務(wù)器上面bin日志文件的最后的位置庭惜。 配置了值個(gè)位置 , 從服務(wù)器就會(huì)從主服務(wù)器上面的這個(gè)位置開始讀取內(nèi)容 , 所以我們?cè)谂渲弥鲝牡臅r(shí)候 , 一定要從服務(wù)器的數(shù)據(jù)已經(jīng)和主服務(wù)器保存同步 沒有同步數(shù)據(jù) , 去配置主從很危險(xiǎn) , 因?yàn)閺姆?wù)器是執(zhí)行主服務(wù)器拿過來的 SQL 語句 , 這個(gè) SQL語句如果是插入數(shù)據(jù) , 然后 從服務(wù)器沒有沒用同步數(shù)據(jù) , 就沒有這個(gè)表 就不會(huì)插入成功 所以 , 在同步之前 , 一定要做 數(shù)據(jù)同步 , 這個(gè)而是人工操作
開始配置 :
從服務(wù)器上面操作 :
查看從機(jī)狀態(tài)
啟動(dòng)主從配置
查看啟動(dòng)后的狀態(tài)
查看中繼日志文件
這個(gè)生成的原理和主機(jī)是一樣的 , 從其服務(wù)器 , 這個(gè)文件也再次生成
操作主服務(wù)器 : 插入數(shù)據(jù)
查看從服務(wù)器
功能實(shí)現(xiàn)
通知從服務(wù)
查看狀態(tài)
在主服務(wù)器上更新數(shù)據(jù)
查看從服務(wù)器上面的數(shù)據(jù)
停止主從之后 , 就不會(huì)在獲得主服務(wù)器的 bin 日志文件內(nèi)容
在主服務(wù)器上面插入數(shù)據(jù)
在開啟從服務(wù)配置:
查看狀態(tài)
查看數(shù)據(jù)
說明 : 第一次的更新 , 從服務(wù)器也執(zhí)行了 , 因?yàn)楸砝锩鏇]有這個(gè)數(shù)據(jù) ,所以就執(zhí)行失敗了 , 這里再一次說明了 , 表的同步一致性是多么重要 第二條插入 , 就完美執(zhí)行了
從服務(wù)器管理
查看狀態(tài)
show slave status\G
開始從服務(wù)器
start save
停止從服務(wù)器
stop slave
清空從服務(wù)器
reset slave all
重點(diǎn)說明 :
清空之前 , 清先停止服務(wù)器
讀寫分離設(shè)置
$db1 = ‘主服務(wù)器’; $db2 = ‘從服務(wù)器’; $db3 = ‘從服務(wù)器’;
實(shí)現(xiàn)讀寫分離的特別的簡單的膳灶,就是你要連接上所以的服務(wù)器攻柠。 寫數(shù)據(jù)的時(shí)候踊谋,就要指定我們的$db1蝉仇。指定到主服務(wù)器。
查詢數(shù)據(jù)的時(shí)候殖蚕,指定到從服務(wù)器就可以了轿衔。
$db1 = mysqli_connect(‘123.123.123.123’, ‘baqi’, ‘fsaf@*&kjfdk123’, ‘liu’);
$db2 = mysqli_connect(‘123.123.123.124’, ‘baqi’, ‘fsaf@*&kjfdk123’, ‘liu’);
$db3 = mysqli_connect(‘123.123.123.125’, ‘baqi’, ‘fsaf@*&kjfdk123’, ‘liu’);
$sql = “insert into table_name values (值1,值2)”; mysqli_query($db1, $sql);
從服務(wù)器有多臺(tái)的時(shí)候睦疫,就應(yīng)該實(shí)現(xiàn)一個(gè)算法害驹,然后只返回一個(gè)鏈接就可以了。 $sql = “select * from table_name where id in (1,2)”; mysqli_query($db2, $sql);