明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

什么是mysql集群?說明mysql的集群

[摘要]以前感覺集群、讀寫分離,xxxx 都是狂拽牛逼吊炸天的東西。弄完之后發(fā)現(xiàn)其實(shí)都是很簡單的,只要你感興趣。兩臺機(jī)器:mysql01:192.168.1.222mysql02:192.168.1.223注意,如果你是虛擬機(jī)復(fù)制模擬的,得改下mysql/data下的auto.cnf,兩臺機(jī)器的uuid不...
以前感覺集群、讀寫分離,xxxx 都是狂拽牛逼吊炸天的東西。弄完之后發(fā)現(xiàn)其實(shí)都是很簡單的,只要你感興趣。

兩臺機(jī)器:

mysql01:192.168.1.222

mysql02:192.168.1.223

注意,如果你是虛擬機(jī)復(fù)制模擬的,得改下mysql/data下的auto.cnf,兩臺機(jī)器的uuid不能相同。服務(wù)器的的 selinux 都要 disable(修改/etc/selinux/config,將 SELINUX 改為 disabled)。

MySQL5.6 開始主從復(fù)制有兩種方式:基于日志(binlog)、基于 GTID(全局事務(wù)標(biāo)示符)。
主從復(fù)制(也稱 A/B 復(fù)制)的原理
(1) Master將數(shù)據(jù)改變記錄到二進(jìn)制日志(binary log)中,也就是配置文件log-bin指定的文件,這些記錄叫做二進(jìn)制日志事件(binary log events);
(2) Slave 通過 I/O 線程讀取 Master 中的 binary log events 并寫入到它的中繼日志(relay log);
(3) Slave 重做中繼日志中的事件,把中繼日志中的事件信息一條一條的在本地執(zhí)行一次,完
成數(shù)據(jù)在本地的存儲(chǔ),從而實(shí)現(xiàn)將改變反映到它自己的數(shù)據(jù)(數(shù)據(jù)重放)。

mysql01:

vi /etc/my.cnf
## 在 [mysqld] 中增加以下配置項(xiàng)
## 設(shè)置 server_id,一般設(shè)置為 IP
server_id=222
## 復(fù)制過濾:需要備份的數(shù)據(jù)庫,輸出 binlog
#binlog-do-db=roncoo
## 復(fù)制過濾:不需要備份的數(shù)據(jù)庫,不輸出(mysql 庫一般不同步)
binlog-ignore-db=mysql
## 開啟二進(jìn)制日志功能,可以隨便取,最好有含義
log-bin=master-mysql
## 為每個(gè) session 分配的內(nèi)存,在事務(wù)過程中用來存儲(chǔ)二進(jìn)制日志的緩存
binlog_cache_size=1M
## 主從復(fù)制的格式(mixed,statement,row,默認(rèn)格式是 statement)

binlog_format=mixed
## 二進(jìn)制日志自動(dòng)刪除/過期的天數(shù)。默認(rèn)值為 0,表示不自動(dòng)刪除。
expire_logs_days=7
## 跳過主從復(fù)制中遇到的所有錯(cuò)誤或指定類型的錯(cuò)誤,避免 slave 端復(fù)制中斷。
## 如:1062 錯(cuò)誤是指一些主鍵重復(fù),1032 錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062

## relay_log 配置中繼日志
relay_log=relay01
## log_slave_updates 表示 slave 將復(fù)制事件寫進(jìn)自己的二進(jìn)制日志
log_slave_updates=1

啟動(dòng)/重啟 Master 數(shù)據(jù)庫服務(wù),登錄數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)同步用戶,并授予相應(yīng)的權(quán)限

service mysql restart
mysql -uroot -p

##創(chuàng)建數(shù)據(jù)同步用戶,并授予相應(yīng)的權(quán)限

mysql> grant replication slave, replication client on *.* to 'repl01'@'192.168.1.223' identified by
'123456';
Query OK, 0 rows affected (0.00 sec)

## 刷新授權(quán)表信息

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

## 查看 position 號,記下 position 號(從機(jī)上需要用到這個(gè) position 號和現(xiàn)在的日志文件)

mysql> show master status;
mysql02:

vi /etc/my.cnf
## 在 [mysqld] 中增加以下配置項(xiàng)
## 設(shè)置 server_id,一般設(shè)置為 IP
server_id=223
## 復(fù)制過濾:需要備份的數(shù)據(jù)庫,輸出 binlog
#binlog-do-db=roncoo
##復(fù)制過濾:不需要備份的數(shù)據(jù)庫,不輸出(mysql 庫一般不同步)
binlog-ignore-db=mysql
## 開啟二進(jìn)制日志,以備 Slave 作為其它 Slave 的 Master 時(shí)使用
log-bin=slave-mysql
## 為每個(gè) session 分配的內(nèi)存,在事務(wù)過程中用來存儲(chǔ)二進(jìn)制日志的緩存
binlog_cache_size = 1M
## 主從復(fù)制的格式(mixed,statement,row,默認(rèn)格式是 statement)
binlog_format=mixed
## 二進(jìn)制日志自動(dòng)刪除/過期的天數(shù)。默認(rèn)值為 0,表示不自動(dòng)刪除。
expire_logs_days=7
## 跳過主從復(fù)制中遇到的所有錯(cuò)誤或指定類型的錯(cuò)誤,避免 slave 端復(fù)制中斷。
## 如:1062 錯(cuò)誤是指一些主鍵重復(fù),1032 錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062
## relay_log 配置中繼日志
relay_log=relay02
## log_slave_updates 表示 slave 將復(fù)制事件寫進(jìn)自己的二進(jìn)制日志
log_slave_updates=1

重啟數(shù)據(jù)庫 service mysql restart

添加相關(guān)參數(shù)

mysql> 
change master to master_host='192.168.1.222', master_user='repl01',master_password='123456', master_port=3306, master_log_file='mysql01.000001',master_log_pos=429, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

上面執(zhí)行的命令的解釋:
master_host='192.168.1.222' ## Master 的 IP 地址
master_user='repl' ## 用于同步數(shù)據(jù)的用戶(在 Master 中授權(quán)的用戶)
master_password='123456' ## 同步數(shù)據(jù)用戶的密碼
master_port=3306 ## Master 數(shù)據(jù)庫服務(wù)的端口
master_log_file='master-mysql.000001' ##指定 Slave 從哪個(gè)日志文件開始讀復(fù)制數(shù)據(jù)(可
在 Master 上使用 show master status 查看到日志文件名)
master_log_pos=429 ## 從哪個(gè) POSITION 號開始讀
master_connect_retry=30 ##當(dāng)重新建立主從連接時(shí),如果連接建立失敗,間隔多久后重試。
單位為秒,默認(rèn)設(shè)置為 60 秒,同步延遲調(diào)優(yōu)參數(shù)。
## 查看主從同步狀態(tài)
mysql> show slave status\G;
可看到 Slave_IO_State 為空, Slave_IO_Running 和 Slave_SQL_Running 是 No,表明 Slave 還
沒有開始復(fù)制過程。
## 開啟主從同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
## 再查看主從同步狀態(tài)
mysql> show slave status\G;

主要看以下兩個(gè)參數(shù),這兩個(gè)參數(shù)如果是 Yes 就表示主從同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

可查看 master 和 slave 上線程的狀態(tài)。在 master 上,可以看到 slave 的 I/O 線程創(chuàng)建的連接:

mysql01: mysql> show processlist\G;
mysql02: mysql> show processlist\G;

完成,測試在mysql01上新建數(shù)據(jù)庫db1,查看mysql02。

從mysql02到mysql01是一樣的步驟:

切換到mysql02上

##創(chuàng)建數(shù)據(jù)同步用戶,并授予相應(yīng)的權(quán)限

mysql> grant replication slave, replication client on *.* to 'repl02'@'192.168.1.222' identified by
'123456';
Query OK, 0 rows affected (0.00 sec)

## 刷新授權(quán)表信息

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

## 查看 position 號,記下 position 號(從機(jī)上需要用到這個(gè) position 號和現(xiàn)在的日志文件)

mysql> show master status;
change master to master_host='192.168.1.223', master_user='repl02',master_password='123456', master_port=3306,master_log_file='mysql02.000002',master_log_pos=567,
master_connect_retry=30;
mysql> start slave;Query OK, 0 rows affected (0.00 sec)

## 再查看主從同步狀態(tài)

mysql> show slave status\G;

在mysql02上創(chuàng)建數(shù)據(jù)庫db2,查看mysql01即可

以上就是什么是mysql集群?介紹mysql的集群的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。