思想部分
(喜歡實(shí)戰(zhàn)的可以先看實(shí)戰(zhàn))
- MySQL復(fù)制能解決什么問題
- MySQL的負(fù)載均衡(分擔(dān)讀負(fù)載)
- 為高可用 災(zāi)難恢復(fù) 備份提供更多的選擇
- 讀寫分離
- 主從配置優(yōu)點(diǎn)
- 解決應(yīng)用系統(tǒng),數(shù)據(jù)庫出現(xiàn)的性能瓶頸势誊,采用數(shù)據(jù)庫集群的方式來實(shí)現(xiàn)查詢負(fù)載调煎;通常情況下一個系統(tǒng)中數(shù)據(jù)庫的查詢操作比更新操作要多得多薯蝎,通過多臺查詢服務(wù)器將 數(shù)據(jù)庫的查詢分擔(dān)到不同的查詢服務(wù)器上從而提高查詢效率踢关。
- 數(shù)據(jù)備份,高可用性和故障切換,增強(qiáng)了數(shù)據(jù)庫的安全性,利用從庫備份來減少主庫負(fù)載,從庫復(fù)制并不能代替?zhèn)浞?,備份是有必要的
- 實(shí)現(xiàn)數(shù)據(jù)庫的在線升級
- MySQL日志
MySQL有很多種日志分為兩類
- MySQL存儲引擎日志
Innodb: 重做日志 , 回滾日志
- MySQL服務(wù)層日志(默認(rèn)只有error日志,其他的需要在配置文件中手動開啟)
慢查詢?nèi)罩究越啤⒍M(jìn)制日志(習(xí)慣稱bin_log日志)煞赢、通用日志等
- 二進(jìn)制日志
- 記錄了所有對MySQL數(shù)據(jù)庫的修改事件,包括增刪改查事件和對表結(jié)構(gòu)的修改事件
- 沒有執(zhí)行成功的SQL是不會記錄到二進(jìn)制日志
還有就是當(dāng)你重啟了mysql之后,會從新生成一個二進(jìn)制文件,舊的會保存一段時間
- 復(fù)制如何工作
- 在主庫上把數(shù)據(jù)更改記錄到二進(jìn)制日志(bin-log)中(這些記錄日志被稱為二進(jìn)制日志事件)
- 從庫將主庫上的日志復(fù)制到自己中繼日志
-
從庫讀取自己的中繼日志中的事件,將其重放到自己數(shù)據(jù)上
流程
-
一主多從
本章實(shí)例僅展示一主一從扼睬, 一主多從是指偷溺,多臺從庫蹋辅;其中從庫不再走主服務(wù)器,而是掛在從服務(wù)器上挫掏。思想架構(gòu)基本一致侦另,大致結(jié)構(gòu)如下:
一主多從
實(shí)戰(zhàn)開始
筆者按量購買了兩臺阿里云服務(wù)器,1小時4毛錢
兩臺機(jī)器都需要安裝mysql
主庫和從庫分別執(zhí)行以下命令:
apt-get update
apt-get install mysql-server
登陸主庫,創(chuàng)建一個從庫可以訪問的帳號
進(jìn)入mysql褒傅,輸入以下命令創(chuàng)建用戶
grant replication slave on *.* to 'USERNAME'@'IP' identified by 'PASSWORD';
Username(帳號)弃锐、IP(服務(wù)器地址)、Password(密碼)需要自己指定殿托。
同源策略霹菊,將主庫的庫文件復(fù)制到從庫
注意,先要停止Mysql服務(wù)支竹,主庫從庫都要停止旋廷。
service mysql stop
庫位置/var/lib/mysql
,mysql文件夾就是這個所有的庫礼搁,需要把這個文件夾復(fù)制到從庫×螅現(xiàn)將這個文件進(jìn)行壓縮。
tar -zcvf mysql.tar.gz ./mysql/
然后叹坦,復(fù)制到從庫。下面這條命令是超服務(wù)器傳輸?shù)膹?fù)制命令
scp ./mysql.tar.gz UserName@IP:/tmp
Username 換成主庫的帳號卑雁,IP主庫的IP募书,/tmp是復(fù)制到主庫的/tmp文件夾下,當(dāng)然可以自己指定测蹲。
首先進(jìn)入從庫莹捡,查看從庫是否有了這個壓縮文件,并進(jìn)行移動到從庫的/var/lib/
cd /tmp/
mv mysql.tar.gz /var/lib/
將從庫mysql文件夾進(jìn)行備份扣甲,以防失敗篮赢。
cd /var/lib/
mv mysql mysql.bak
將主庫傳過來的mysql.tar.gz 解壓,這就完成了同源策略
tar -zxvf mysql.tar.gz
這時琉挖,就可以主從就都可以開啟mysql服務(wù)了启泣。
service mysql start
配置主庫和從庫
主庫配置/etc/mysql/my.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog-ignore-db=mysql //不進(jìn)行主從復(fù)制的庫
# 將bind-address注釋,為了能夠使用從庫服務(wù)器IP登陸主庫
#bind-address = 127.0.0.1
從庫配置/etc/mysql/my.cnf
[mysqld]
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog-ignore-db=mysql
注意配置文件可能因為版本不同示辈,而產(chǎn)生配置文件不對應(yīng)寥茫,只需要自己去找一下,配置中包含[mysqld]選項的進(jìn)行修改就可以了矾麻。
配置主從庫登陸信息
在主庫執(zhí)行命令纱耻,查看bin-log日志寫到了什么位置
show master status;
查看到了File和Position,我們會用到這兩個值险耀。
接下來弄喘,在從庫中執(zhí)行面的命令。配置主庫的信息
CHANGE MASTER TO MASTER_HOST = '120.24.47.140',MASTER_USER = 'test1', MASTER_PASSWORD='123456',MASTER_LOG_FILE = 'mysql-bin.000001',MASTER_LOG_POS=107;
參數(shù)解析
- MASTER_HOST:主服務(wù)器IP
- MASTER_USER:在主服務(wù)器中創(chuàng)建一個帳號甩牺,筆者是test1
- MASTER_PASSWORD:自己定義的密碼蘑志,筆者是123456
- MASTER_LOG_FILE:上一步查看的FILE文件,筆者是mysql-bin.000001
- MASTER_LOG_POS:上一步查看的Postion位置,筆者是107
最后卖漫,成功的最后一步
啟動復(fù)制
mysql > START SLAVE;
停止復(fù)制
STOP SLAVE;
查看狀態(tài)
SHOW SLAVE STATUS;