MySQL8.0讀寫(xiě)分離實(shí)例
系統(tǒng)建立初期,我們的架構(gòu)都非常的簡(jiǎn)單,主要滿足業(yè)務(wù)的正常運(yùn)行,但是隨著訪問(wèn)量的升高,人們對(duì)系統(tǒng)的可靠性有了更高的要求,所以,我們?yōu)榱吮苊鈫吸c(diǎn)故障,對(duì)系統(tǒng)應(yīng)用層進(jìn)行了橫向的擴(kuò)展,這樣,保證了系統(tǒng)應(yīng)用層的高可用,在發(fā)生宕機(jī),或者系統(tǒng)升級(jí)時(shí),系統(tǒng)對(duì)外還是可用的。而且在訪問(wèn)量升高的時(shí)候,系統(tǒng)應(yīng)用層的壓力也會(huì)得到分?jǐn)偅沟妹恳粋€(gè)單體的系統(tǒng)應(yīng)用的壓力在一個(gè)合理的區(qū)間范圍內(nèi)。
但是,隨著訪問(wèn)量的升高,所有的壓力都將集中到數(shù)據(jù)庫(kù)這一層。 數(shù)據(jù)庫(kù)這一層將會(huì)成為系統(tǒng)的瓶頸,現(xiàn)在就需要針對(duì)數(shù)據(jù)庫(kù)這一環(huán)節(jié)進(jìn)行擴(kuò)展,以保證其可靠性,高可用性。
同時(shí),有了上面對(duì)應(yīng)用服務(wù)器水平擴(kuò)展的方案,那么能不能 像系統(tǒng)應(yīng)用層那樣 水平 進(jìn)行擴(kuò)展 呢?答案是否定的, 想象一下,如果數(shù)據(jù)庫(kù)層也像系統(tǒng)應(yīng)用層那樣,進(jìn)行橫向擴(kuò)展,如圖:
-
1.MySQL主從配置
主配置log-bin,指定文件的名字
l 主配置server-id 默認(rèn)是1
l 從配置server-id,與主不能重復(fù)。
2.數(shù)據(jù)庫(kù)規(guī)劃:
主庫(kù):192.168.8.100
從庫(kù):192.168.8.112
注意:將db112中的 數(shù)據(jù)庫(kù)刪除, 方便觀察同步數(shù)據(jù)效果
2-1 db100配置my.cnf
vim /etc/my.cnf
[mysqld]標(biāo)簽下配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin=xiaoyege_mysql
server-id=1
保存后重啟db100 mysql服務(wù)器
service mysqld restart
2-2 db112配置my.cnf
vim /etc/my.cnf
[mysqld]標(biāo)簽下配置
只需要配置一個(gè)server-id=2即可
server-id=2
service mysqld restart
3.創(chuàng)建主從配置賬號(hào)&&授權(quán)
主數(shù)據(jù)庫(kù)創(chuàng)建備份賬戶并授權(quán) replication slave
登錄db100
mysql -uroot -p1qaz@WSX;
SELECT DISTINCT User FROM mysql.user;
創(chuàng)建用戶
create user 'repl'@'%' IDENTIFIED BY '1qaz@WSX';
授權(quán)
GRANT replication slave ON *.* TO 'repl'@'%';
刷新權(quán)限
flush privileges;
4.主庫(kù)鎖表
將主庫(kù)的表鎖住,鎖住以后進(jìn)行備份,鎖住以后,寫(xiě)操作就不會(huì)落到主表,然后將主庫(kù)數(shù)據(jù)備份到從庫(kù),接著查詢一下binlog的位置,記錄一下,然后在從庫(kù)中進(jìn)行主從的配置,因?yàn)橹鲝呐渲眯枰付╞inlog的位置
然后把主庫(kù)的請(qǐng)求放開(kāi),因?yàn)榭梢宰x取binlog的位置,鎖表之后發(fā)生的數(shù)據(jù)就可以同步從庫(kù)了;
主庫(kù)鎖表
flush tables with read lock;
在主庫(kù)插入一條數(shù)據(jù)進(jìn)行測(cè)試
INSERT user(id,username) VALUES(6,'db_100 主庫(kù) xiaoyege');
執(zhí)行結(jié)果:
執(zhí)行語(yǔ)句一直卡著,因?yàn)殒i表了;
5.主庫(kù)binlog位置
主數(shù)據(jù)庫(kù)查詢log-bin的位置
mysql> show master status;
xiaoyege_mysql.000001
此文件就是在主庫(kù)設(shè)置的文件名稱;
p osition = 847;
p osition 之后的數(shù)據(jù)開(kāi)始讀取日志,進(jìn)行數(shù)據(jù)同步;
在這個(gè)位置之前的數(shù)據(jù),需要使用mysql.dump將之前的數(shù)據(jù)dump下來(lái),復(fù)制到從庫(kù)當(dāng)中;
主備份數(shù)據(jù)
dump數(shù)據(jù)
需要重新開(kāi)啟一個(gè)會(huì)話進(jìn)行操作
mysqldump --all-databases --master-data > dbdump.db
或者:
mysqldump --all-databases --master-data > dbdump.db -uroot -p1qaz@WSX
密碼:1qaz@WSX
文件dump完成
6.從庫(kù)dump文件
將dbdump.db文件復(fù)制到從庫(kù)112這臺(tái)機(jī)器上
scp [email protected]:~/dbdump.db .
xiaoyege1qaz
將這個(gè)文件加載到112的mysql當(dāng)中
mysql < dbdump.db -uroot -p
1qaz@WSX
查看db112,表里面內(nèi)容已經(jīng)存在了; 和之前db100的內(nèi)容一致;
7.解除主庫(kù)鎖表
mysql -uroot -p1qaz@WSX;
unlock tables;
查詢db100之前的insert語(yǔ)句鎖住的情況,已經(jīng)執(zhí)行成功了;
查詢從庫(kù)還是沒(méi)有同步過(guò)來(lái);
8.從數(shù)據(jù)庫(kù)設(shè)置主從同步
mysql -uroot -p1qaz@WSX;
mysql>
mysql> change master to
-> master_host='192.168. 8 .1 11 ',
-> master_user='repl',
-> master_password='1qaz@WSX',
-> master_log_file='xiaoyege_mysql.00000 9 ',
-> master_log_pos= 18259
-> get_master_public_key=1
-> ;
Query OK , 0 rows affected , 8 warnings (0.05 sec)
mysql>
最后執(zhí)行
start slave;
查看錯(cuò)誤信息;
show slave status;
show slave status \G;
9.常見(jiàn)錯(cuò)誤
9-1 錯(cuò)誤caching_sha2_password
Last_IO_Error : error connecting to master '[email protected]:3306' - retry-time : 60 retries : 1 message : Authentication plugin 'caching_sha2_password' reported error : Authentication requires secure connection.
查看主庫(kù):
SELECT plugin FROM `user` where user = 'repl';
原來(lái)是主庫(kù)repl的plugin是caching_sha2_password導(dǎo)致連接不上,修改為mysql_native_password即可解決。
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX';
flush privileges;
近期熱文
-
JUC1 線程池【治理線程的最大法寶】線程池簡(jiǎn)介+增加線程池
- JUC2 線程池【治理線程的最大法寶】keepAliveTime+內(nèi)存溢出+newSingleThreadExecutor
- JUC3 線程池【治理線程的最大法寶】對(duì)比線程池 收服線程池
- JUC 4 線程池【治理線程的最大法寶】鉤子方法 Executor相關(guān)類 線程池狀態(tài)
- JUC5 ThreadLocal一網(wǎng)打盡(1)
- JUC6 ThreadLocal一網(wǎng)打盡 (2)
- JUC7 AQS, Semaphore和AQS
- JUC8 AQS三要素及簡(jiǎn)要分析
參考資料
1 | JUC
責(zé)編 | 小耶哥
本期作者 | 小耶哥
平臺(tái)建設(shè)及技術(shù)支持 | 小耶哥
