mysql主從複製的理解和搭建

醬紫人的理直氣壯發表於2018-08-20

1,mysql主從複製的理解圖:

 

2,mysql主從複製的概念和好處:

mysql的主從複製,是用來建立一個和主資料庫完全一樣的資料庫環境,稱為從資料庫,主資料庫一般是實時的業務資料操作,從資料庫常用的讀取為主。

優點主要有

1,可以作為備用資料庫進行操作,當主資料庫出現故障之後,從資料庫可以替代主資料庫繼續工作,不影響業務流程

2,讀寫分離,將讀和寫應用在不同的資料庫與伺服器上。一般讀寫的資料庫環境配置為,一個寫入的資料庫,一個或多個讀的資料庫,各個資料庫分別位於不同的伺服器上,充分利用伺服器效能和資料庫效能;當然,其中會涉及到如何保證讀寫資料庫的資料一致,這個就可以利用主從複製技術來完成。

3,吞吐量較大,業務的查詢較多,併發與負載較大。

3,windows上的mysql主從複製搭建:

1,所謂mysql的主從,我們首先應該準備好兩個資料庫,為了避免介面衝突,我的一臺mysql的伺服器的埠為3306,另一臺伺服器的埠號為3307,埠號在mysql的配置檔案my.ini中配置。

主伺服器配置:

[mysqld]
#mysqld 配置
port=3307
basedir=D:\laravel\mysql2
datadir=D:\laravel\mysql2\data

從伺服器的埠部分配置:
[mysqld]
port=3306
basedir="F:/myphp_www/PHPTutorial/MySQL/"
datadir="F:/myphp_www/PHPTutorial/MySQL/data/"

2,在我新配置的主資料庫上,需要配置mysql的服務於啟動:

首先使用管理員身份執行cmd,跳轉到mysql中的bin目錄。安裝mysql的服務:mysqld install mysql2 --defaults-file="c:\wamp\bin\mysql2\mysql5.6.17\my.ini"

紅色字型的mysql2是我配置的環境變數:

啟動mysql服務。

        net start mysql   啟動mysql服務

       Net stop mysql   停止mysql服務

             

             

3,配置mysql的主從複製,我的這裡是埠號為3307的為主資料庫,3306的為從資料庫,在主資料庫上新增主從複製的mysql賬號,兩個資料庫連結的鈕釦:

GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*

TO mysql_backup@'%'

IDENTIFIED BY '123456';

一個賬號為mysql_backup的使用者建立成功了,密碼為123456

重新整理資料庫許可權:flush privileges;

4,配置主伺服器,這裡注意兩臺伺服器的server_id不可以一樣,現在我的主伺服器的配置如下:

[mysqld]
#mysqld 配置
port=3307
basedir=D:\laravel\mysql2
datadir=D:\laravel\mysql2\data
server-id=1 
log-bin=mysql-bin#開啟了二進位制檔案
binlog_do_db=follow#主從複製的資料庫
binlog_ignore_db=mysql#不參與數從複製的資料庫,例如mysql
binlog_checksum=none#mysql主從複製版本高
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

配置完成只好在cmd中重啟我的mysql2
navicat中重啟master之後並檢視master的狀態:SHOW MASTER STATUS

重置master:reset master;

5,配置從伺服器,

[mysqld]
port=3306
basedir="F:/myphp_www/PHPTutorial/MySQL/"
datadir="F:/myphp_www/PHPTutorial/MySQL/data/"
character-set-server=utf8
default-storage-engine=MyISAM
server_id=2
log-bin=mysql-bin
binlog-do-db=follow#同步的資料庫
binlog-ignore-db=mysql#同步的資料庫

重啟mysql之後通過配置的賬號密碼連結主資料庫,根據master的狀態自定:CHANGE MASTER TO master_host = '127.0.0.1',
 master_user = 'mysql_backup',
 master_password = '123456',
 master_log_file = 'mysql-bin.000004',
 master_port = 3307;
 master_log_pos = 120;

重啟slave:START SLAVE

重置slave:RESET SLAVE

檢視從資料庫的狀態:show slave status;

當相應的結果中,slave_IO_Running與slave_SQL_Running兩個執行緒都為Yes時,主從配置成功。

Linux的mysql主從複製搭建:

跟本地一樣,搭建mysql主從複製,首先需要兩臺資料庫,我是兩臺服務上直接搭建的mysql主從複製

1,首先在主機上賦予叢機的許可權,如果有多臺從機的話,就賦予多次:GRANT REPLICATION SLAVE ON *.* TO slave@'118.24.89.47' IDENTIFIED BY '1234';

然後進入資料庫執行:select user,host from mysql.user;

可以看到這裡給了從機ip為118的一個許可權,賬號為slave.

2,然後就需要設定主機資料庫的my.cnf,設定主機標識的service-id,確保可寫的二進位制log_bin檔案,具體如下:

server_id=1#主機的標識
log-bin=mysql-bin.log#確保可寫入的日誌檔案
binlog_format=mixed#二進位制日誌的格式,

binlog-do-db=master#允許主從複製資料庫
binlog-ignore-db=mysql#不允許主從複製的資料庫

~~~~~~~~~~~~~~~~~~~~重新啟動mysql服務

3,配置叢機的配置,同樣也是在my.cnf的配置檔案中,注意service_id不可重複:

server_id=2#主機的標識
log-bin=mysql-bin.log#確保可寫入的日誌檔案
binlog_format=mixed#二進位制日誌的格式,
replicate_wild_do_table=oldboy.%
replicate_wild_ignore_table=mysql.%

4,給主機的(1)mysql  鎖表,(2)查詢master的狀態,並(3)解鎖:

(1)flush tables with read lock;

(2)show master status;(是檢視當前bin-log日誌的位置點)

file:生成的二進位制日誌

position:隨著bin_log的日誌檔案更新內容,發生的變化

binlog_do_db:主從複製的資料庫

binlog_ignore_db:不允許主從複製的資料庫

(3)unlock tables;

5,在從庫上鍊接主資料庫,連結資料master_host='是主機的ip' 依次在資料上執行:

stop slave;

change master to master_host='119.27.169.173',master_user='slave',master_password='1234',master_log_file='mysql-bin.000006',master_log_pos=245;

start slave;

6,最後檢視slave的狀態:show slave status\G;

當Slave_IO_Running和Slave_SQL_Running執行緒都為yes是主從複製配置成功!

此博文有待更改,有什麼錯誤還望各位及時指出!!!

相關文章