1. 程式人生 > >mysql主從架構搭建

mysql主從架構搭建

背景知識:

  1. 主從這個架構可以實現資料備份,資料在多個伺服器上分佈等等,當然最主要的優點是可以實現負載均衡,將寫操作交給主節點,讀操作交給從節點。
  2. mysql官網有很多版本,例如Enterprise(企業版需要付費,當然可以試用30天),Community(社群版,開源但是官方不提供技術支援),當然我們常用的也是社群版,本文是基於社群版的。
  3. mysql的安裝也有原始碼安裝和二進位制免安裝等等方法,本文的mysql是通過二進位制免安裝的方式安裝的
  4. 本文使用的環境是centos

1.首先下載二進位制免安裝版的mysql:mysql社群版下載,進入社群版下載頁後選擇 MySQL Community Server (GPL),選擇要下載的mysql版本:

 

我這裡使用的是mysql5.7這個版本,點選之後,選擇如下:

嫌麻煩的小夥伴可以直接執行下面的命令安裝:

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

2.下載好之後解壓重新命名為mysql-3306然後複製一份,重新命名為mysql-3307,我們將3306當作主節點,3307當作從節點:

#解壓
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 
#重新命名
mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql-3306
#複製一份
cp -r mysql-3306 mysql-3307

3.建立幾個目錄,data,logs,config,sockets,用來管理mysql的相關檔案:

mkdir data logs config sockets

4.進入config目錄,建立3306.conf以及3307.conf兩個檔案,檔案的內容如下:

[mysqld]
user=root #設定mysql的啟動使用者,我這裡直接使用root,讀者可以建立使用者組和使用者指定操作
character-set-server=utf8 
port=3306
socket=/root/mysql/sockets/3306.sock #設定套位元組(/root/mysql/sockets為剛剛建立的sockets的路徑,3306.sock可以隨意命名,下面的data,logs也是如此)
basedir=/root/mysql/mysql-3306 #mysql-3306所在的位置
datadir=/root/mysql/data/3306 #設定mysql的資料存放目錄(也是bin_log的存放的地方)
server-id=1 #唯一標識,每臺mysql伺服器必須唯一
log-bin=master-bin #開啟bin-log並將此值作為二進位制檔名的字首
binlog_format=ROW #設定binlog的格式,主要有STATEMENT,ROW,FIXED
#設定不需要同步給從節點的資料庫
binlog-ignore-db=mysql 
binlog-ignore-db=sys 
binlog-ignore-db=information_schema 
binlog-ignore-db=performance_schema 

[mysqld_safe]
log-error=/root/mysql/logs/3306.log #錯誤日誌





#以下的3307的配置
[mysqld]
user=root
character-set-server=utf8
port=3307
socket=/root/mysql/sockets/3307.sock
basedir=/root/mysql/mysql-3307
datadir=/root/mysql/data/3307
server-id=2 
read_only=1 #只讀庫

[mysqld_safe]
log-error=/root/mysql/logs/3306.log #錯誤日誌


5.接下來讓我們開啟mysql服務:

#進入mysql-3306目錄,執行如下操作進行初始化
# -insecure的作用是不設定密碼,如果省略的話mysql會生成一個隨機密碼
./bin/mysqld --defaults-file=/root/mysql/config/3306.conf --initialize-insecure

#之後再執行如下命令啟動
./bin/mysqld --defaults-file=/root/mysql/config/3306.conf

#同理啟動3307mysql服務



6.可能有讀者在啟動mysql伺服器的時候會報:error while loading shared libraries: libaio.so,執行如下命令安裝即可:

 yum install libaio

7.連線3306主mysq伺服器:


#進入mysql-3306執行如下命令:
./bin/mysql -uroot --socket=/root/mysql/sockets/3306.sock

#同理連線3307的mysql伺服器


8.執行如下命令檢視master狀態並進行重置:

show master status;
reset master;

9.在主伺服器上設定一個使用者用於從伺服器從主伺服器中複製資料時使用:

#建立使用者
create user 'salve' identified by '666666';
#賦予複製許可權
GRANT REPLICATION SLAVE ON *.* TO 'salve'@'%';


#命令解釋
create user 使用者名稱 identified by '密碼';
grant 許可權 on 資料庫名.表名 to '使用者名稱'@'域名';

*表示所有,*.*表示所有的資料庫和資料庫中的表
'%'所有本地和遠端都可以
localhost 本地
ip地址 指定ip登入

10.以上操作沒有問題之後,我們連線3307伺服器進行從節點的配置:

#首先關閉
stop slave;
#引數配置
change master to 
master_host='127.0.0.1',  #主從服務的地址
master_port=3306,    #主伺服器的埠
master_user='slave', #用於從複製的使用者名稱,即第九步建立的
master_password='666666', #密碼
master_log_file='master-bin.000001', #主伺服器的binlog日誌名稱,檢視第八步
master_log_pos=597; #偏移量
#開啟
start slave;

至此我們的mysql主從架構已經搭建完成。小夥伴可以自行測試,在master節點寫入的資料是否會同步到slave節點。