首頁  >  文章  >  資料庫  >  什麼是mysql集群?介紹mysql的集群

什麼是mysql集群?介紹mysql的集群

零下一度
零下一度原創
2017-04-27 09:29:473449瀏覽

以前感覺集群、讀寫分離,xxxx 都是狂拽牛逼吊炸天的東西。弄完後發現其實都是很簡單的,只要你有興趣。

兩台機器:

mysql01:192.168.1.222

mysql02:192.168.1.223

注意,如果你是虛擬機器複製模擬的,得改下mysql/data下的auto.cnf,兩台機器的uuid不能相同。伺服器的的 selinux 都要 disable(修改/etc/selinux/config,將 SELINUX 改為 disabled)。

MySQL5.6 開始主從複製有兩種方式:基於日誌(binlog)、基於 GTID(全域事務標示符)。
主從複製(也稱為A/B 複製)的原理
(1) Master將資料改變記錄到二進位日誌(binary log)中,也就是設定檔log-bin指定的文件,這些記錄叫做二進位日誌事件(binary log events);
(2) Slave 透過I/O 執行緒讀取Master 中的binary log events 並寫入到它的中繼日誌(relay log);
(3) Slave重做中繼日誌中的事件,把中繼日誌中的事件訊息一條一條的在本地執行一次,完
成資料在本地的存儲,從而實現將改變反映到它自己的資料(資料重播)。

mysql01:

vi /etc/my.cnf
## 在[mysqld] 中增加以下組態項目
## 設定server_id,一般設定為IP
server_id=222
## 複製篩選:需要備份的資料庫,輸出binlog
#binlog-do-db=roncoo
## 複製篩選:不需要備份的資料庫,不輸出(mysql 函式庫一般不同步)
binlog-ignore-db=mysql
## 開啟二進位日誌功能,可以隨便取,最好有意義
log-bin=master-mysql
## 為每個session 分配的內存,在事務過程中用來儲存二進位日誌的快取
binlog_cache_size=1M
## 主從複製的格式(mixed,statement,row,預設格式是statement)

binlog_format=mixed
## 二進位日誌會自動刪除/過期的天數。預設值為 0,表示不自動刪除。
expire_logs_days=7
## 跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免 slave 端複製中斷。
## 如:1062 錯誤是指一些主鍵重複,1032 錯誤是因為主從資料庫資料不一致
slave_skip_errors=1062


relay_log 設定中繼日誌
relay_log =relay01
## log_slave_updates 表示slave 將複製事件寫入自己的二進位日誌

log_slave_updates=1


啟動/重啟Master 資料庫服務,登入資料庫,建立資料同步用戶,並授予對應的權限

service mysql restart
mysql -uroot -p

##建立資料同步用戶,並授予對應的權限

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

## 刷新授權表資訊

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

看position 號,記下position 號(從機上需要用到這個position 號碼和現在的日誌檔)


mysql> show master status;
mysql02:

 vi /etc/my.cnf

在[mysqld]中增加以下配置項目
## 設定server_id,一般設定為IP
server_id=223
## 複製過濾:需要備份的資料庫,輸出binlog
#binlog-do-db=roncoo
##複製過濾:不需要備份的資料庫,不輸出(mysql 函式庫一般不同步)
binlog-ignore-db=mysql
## 開啟二進位日誌,以備Slave 作為其它Slave 的Master 時使用
log-bin=slave-mysql
## 為每個session 分配的內存,在事務過程中用來儲存二進位日誌的快取
binlog_cache_size = 1M
## 主從複製的格式(mixed,statement,row,預設格式是statement)
binlog_format=mixed
## 二進位日誌會自動刪除/過期的天數。預設值為 0,表示不自動刪除。
expire_logs_days=7
## 跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免 slave 端複製中斷。
## 如:1062 錯誤是指一些主鍵重複,1032 錯誤是因為主從資料庫資料不一致
slave_skip_errors=1062
## relay_log 設定中繼日誌

relay_log=relay02

# # log_slave_updates 表示slave 將複製事件寫入自己的二進位日誌

log_slave_updates=1


重啟資料庫   service mysql restart

###新增相關參數#######
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)

上面执行的命令的解释:
master_host='192.168.1.222' ## Master 的 IP 地址
master_user='repl' ## 用于同步数据的用户(在 Master 中授权的用户)
master_password='123456' ## 同步数据用户的密码
master_port=3306 ## Master 数据库服务的端口
master_log_file='master-mysql.000001' ##指定 Slave 从哪个日志文件开始读复制数据(可
在 Master 上使用 show master status 查看到日志文件名)
master_log_pos=429 ## 从哪个 POSITION 号开始读
master_connect_retry=30 ##当重新建立主从连接时,如果连接建立失败,间隔多久后重试。
单位为秒,默认设置为 60 秒,同步延迟调优参数。
## 查看主从同步状态
mysql> show slave status\G;
可看到 Slave_IO_State 为空, Slave_IO_Running 和 Slave_SQL_Running 是 No,表明 Slave 还
没有开始复制过程。
## 开启主从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
## 再查看主从同步状态
mysql> show slave status\G;

主要看以下两个参数,这两个参数如果是 Yes 就表示主从同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

可查看 master 和 slave 上线程的状态。在 master 上,可以看到 slave 的 I/O 线程创建的连接:

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

完成,测试在mysql01上新建数据库db1,查看mysql02。

从mysql02到mysql01是一样的步骤:

切换到mysql02上

##创建数据同步用户,并授予相应的权限

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

## 刷新授权表信息

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

## 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现在的日志文件)

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)

## 再查看主从同步状态

mysql> show slave status\G;

在mysql02上创建数据库db2,查看mysql01即可

以上是什麼是mysql集群?介紹mysql的集群的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn