1. 集群搭建之主從複製 MySQL主從複製是一個非同步的複製過程,主庫發送更新事件到從庫,從庫讀取更新記錄,並執行更新記錄,使得從庫的內容與主庫保持一致。 1.1 主伺服器的配置 1.1.1 第一步:修改my.conf文件: 在[mysqld]段下添加: #啟用二進位日誌 log-bin=mysql ...
1. 集群搭建之主從複製
MySQL主從複製是一個非同步的複製過程,主庫發送更新事件到從庫,從庫讀取更新記錄,並執行更新記錄,使得從庫的內容與主庫保持一致。
1.1 主伺服器的配置
1.1.1 第一步:修改my.conf文件:
在[mysqld]段下添加:
#啟用二進位日誌 log-bin=mysql-bin #伺服器唯一ID,一般取IP最後一段 server-id=133 |
1.1.2 第二步:重啟mysql服務
service mysqld restart
1.1.3 第三步:建立帳戶並授權slave
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';
#一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強安全。
刷新許可權
mysql> FLUSH PRIVILEGES;
查看mysql現在有哪些用戶
mysql>select user,host from mysql.user;
1.1.4 第四步:查詢master的狀態
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | db1 | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set
1.2 從伺服器配置
1.2.1 第一步:修改my.conf文件
[mysqld]
server-id=134
1.2.2 第二步:刪除UUID文件
錯誤處理: 如果出現此錯誤: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 因為是mysql是克隆的系統所以mysql的uuid是一樣的,所以需要修改。 |
解決方法: 刪除/var/lib/mysql/auto.cnf文件,重新啟動服務。 |
1.2.3 第三步:配置從伺服器
mysql>change master to master_host='192.168.25.134',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120
註意語句中間不要斷開,master_port為mysql伺服器埠號(無引號),master_user為執行同步操作的資料庫賬戶,“120”無單引號(此處的120就是show master status 中看到的position的值,這裡的mysql-bin.000001就是file對應的值)。
1.2.4 第四步:啟動從伺服器複製功能
mysql>start slave;
1.2.5 第五步:檢查從伺服器複製功能狀態:
mysql> show slave status
……………………(省略部分)
Slave_IO_Running: Yes //此狀態必須YES
Slave_SQL_Running: Yes //此狀態必須YES
……………………(省略部分)
註:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
2. 集群搭建之讀寫分離
Mysql作為目前世界上使用最廣泛的免費資料庫,相信所有從事系統運維的工程師都一定接觸過。但在實際的生產環境中,由單台Mysql作為獨立的資料庫是完全不能滿足實際需求的,無論是在安全性,高可用性以及高併發等各個方面。
因此,一般來說都是通過 主從複製(Master-Slave)的方式來同步數據,再通過讀寫分離(MySQL-Proxy)來提升資料庫的併發負載能力 這樣的方案來進行部署與實施的。
2.1 配置讀寫分離
首先我們在前面當中已經運行了mysql-proxy我們需要先殺死這個進程:sudo killall mysql-proxy
#!bash/bin
/opt/mysql-proxy/bin/mysql-proxy \
--proxy-address=1.0.0.3:4040 \
--proxy-backend-addresses=17.16.15.112:3125 \ #在3125埠的伺服器中配置可讀可寫
--proxy-read-only-backend-addresses=172.16.15.112:3126 \ #在3126埠的伺服器中配置只讀
--proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua \ #用這個lua腳本來實現讀寫分離
--log-level=info \
--log-file=/opt/mysql-proxy/logs/mysql-proxy-12.log \ #這是它的日誌
--daemon
3)我們查看一下日誌,看是否腳本運行成功
sudo vi /opt/mysql-proxy/logs/mysql-proxy-12.log
2017-09-20 03:03:58: (critical) plugin proxy 0.8.5 started
2017-09-20 03:03:58: (message) proxy listening on port 1.0.0.3:4040
2017-09-20 03:03:58: (message) added read/write backend: 17.16.15.112:3125
2017-09-20 03:03:58: (message) added read-only backend: 172.16.15.112:3126
4)獲取連接:mysql -uroot -p123456 -h1.0.0.3 -P4040
分析:我們的用戶名和密碼是使用的是MySQL伺服器的用戶名和密碼,因為是要從他們兩個當中獲取連接,ip和埠都是使用代理的ip和埠。