MySQL主從復(fù)制(Master-Slave)
Mysql作為目前世界上使用最廣泛的免費(fèi)數(shù)據(jù)庫(kù),相信所有從事系統(tǒng)運(yùn)維的工程師都一定接觸過(guò)。但在實(shí)際的生產(chǎn)環(huán)境中,由單臺(tái)Mysql作為獨(dú)立的數(shù)據(jù)庫(kù)是完全不能滿(mǎn)足實(shí)際需求的,無(wú)論是在安全性,高可用性以及高并發(fā)等各個(gè)方面。
因此,一般來(lái)說(shuō)都是通過(guò) 主從復(fù)制(Master-Slave)的方式來(lái)同步數(shù)據(jù),再通過(guò)讀寫(xiě)分離(MySQL-Proxy)來(lái)提升數(shù)據(jù)庫(kù)的并發(fā)負(fù)載能力 這樣的方案來(lái)進(jìn)行部署與實(shí)施的。
如下圖所示:

二、MySQL主從復(fù)制
場(chǎng)景描述:
主數(shù)據(jù)庫(kù)服務(wù)器:120.24.242.45,MySQL已經(jīng)安裝,并且無(wú)應(yīng)用數(shù)據(jù)。
從數(shù)據(jù)庫(kù)服務(wù)器:60.174.206.71,MySQL已經(jīng)安裝,并且無(wú)應(yīng)用數(shù)據(jù)。
2.1 主服務(wù)器上進(jìn)行的操作
啟動(dòng)mysql服務(wù)
/opt/mysql/init.d/mysql start
通過(guò)命令行登錄管理MySQL服務(wù)器
/opt/mysql/bin/mysql -uroot -p'new-password'
授權(quán)給從數(shù)據(jù)庫(kù)服務(wù)器60.174.206.71
mysql> GRANT REPLICATION SLAVE ON *.* to 'root'@'60.174.206.71' identified by ‘password’;
查詢(xún)主數(shù)據(jù)庫(kù)狀態(tài)
Mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 1741226| | |
+------------------+----------+--------------+------------------+
記錄下 FILE 及 Position 的值,在后面進(jìn)行從服務(wù)器操作的時(shí)候需要用到。
2.2 配置從服務(wù)器
修改從服務(wù)器的配置文件/opt/mysql/etc/my.cnf
將 server-id = 1修改為 server-id = 10,并確保這個(gè)ID沒(méi)有被別的MySQL服務(wù)所使用。
啟動(dòng)mysql服務(wù)
/opt/mysql/init.d/mysql start
通過(guò)命令行登錄管理MySQL服務(wù)器
/opt/mysql/bin/mysql -uroot -p'new-password'
執(zhí)行同步SQL語(yǔ)句
change master to master_host='120.24.242.45',master_user='root',master_password='password',master_port=3306,master_log_file='mysql-bin.000004',master_log_pos=1741226;
正確執(zhí)行后啟動(dòng)Slave同步進(jìn)程
mysql> start slave;
主從同步檢查
mysql> show slave status
//其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須為YES,才表明狀態(tài)正常。
如果主服務(wù)器已經(jīng)存在應(yīng)用數(shù)據(jù),則在進(jìn)行主從復(fù)制時(shí),需要做以下處理:
//(1)主數(shù)據(jù)庫(kù)進(jìn)行鎖表操作,不讓數(shù)據(jù)再進(jìn)行寫(xiě)入動(dòng)作
mysql> FLUSH TABLES WITH READ LOCK;
//(2)查看主數(shù)據(jù)庫(kù)狀態(tài)
mysql> show master status;
//(3)記錄下 FILE 及 Position 的值。
將主服務(wù)器的數(shù)據(jù)文件(整個(gè)/opt/mysql/data目錄)復(fù)制到從服務(wù)器,建議通過(guò)tar歸檔壓縮后再傳到從服務(wù)器解壓。
//(4)取消主數(shù)據(jù)庫(kù)鎖定
mysql> UNLOCK TABLES;