mysql 主從複製 (1)

Mysql主從配置mysql

大型網站爲了軟解大量的併發訪問,除了在網站實現分佈式負載均衡,遠遠不夠。到了數據業務層、數據訪問層,若是仍是傳統的數據結構,或者只是單單靠一臺服務器扛,如此多的數據庫鏈接操做,數據庫必然會崩潰,數據丟失的話,後果更是不堪設想。這時候,咱們會考慮如何減小數據庫的聯接,一方面採用優秀的代碼框架,進行代碼的優化,採用優秀的數據緩存技術如:memcached,若是資金豐厚的話,必然會想到假設服務器羣,來分擔主數據庫的壓力。今天總結一下利用MySQL主從配置,實現讀寫分離,減輕數據庫壓力.sql

這裏咱們一阿里云爲例來配置主從. mysql和mariadb是同樣的配置的.我這裏一mariadb爲實際案例. 配置的時候兩臺阿里雲使用的是內網地址.數據庫

1.阿里雲部署環境vim

主機( master_mysql ): 192.168.1.200 OS:CentOS 7.4緩存

從機( slave_mysql ): 192.168.1.201 OS: CentOS 7.4安全

主機和從機都須要安裝好mysql 或者Mariadb數據庫服務器

2.主數據庫的配置數據結構

首先使用命令併發

cd /etc負載均衡

而後在執行

ls my.cnf

 

 

在使用編輯器vim打開my.cnf文件

vim my.cnf 按 i 進入編輯模式

 

 

幾條配置文件的含義以下:

#設置主服務 的ID (id能夠本身隨便設置可是要保證和slave的id不同)
server-id=200

innodb_flush_log_at_trx_commit=2  #(參數的含義以下)

# 0:若是innodb_flush_log_at_trx_commit的值爲0,log buffer每秒就會被刷寫日誌文件到磁盤,提交事務的時候不作任何操做(執行是由mysql的master thread線程來執行的。
# 主線程中每秒會將重作日誌緩衝寫入磁盤的重作日誌文件(REDO LOG)中。不論事務是否已經提交)默認的日誌文件是ib_logfile0,ib_logfile1
# 1:當設爲默認值1的時候,每次提交事務的時候,都會將log buffer刷寫到日誌。
# 2:若是設爲2,每次提交事務都會寫日誌,但並不會執行刷的操做。每秒定時會刷到日誌文件。要注意的是,並不能保證100%每秒必定都會刷到磁盤,這要取決於進程的調度。
# 每次事務提交的時候將數據寫入事務日誌,而這裏的寫入僅是調用了文件系統的寫入操做,而文件系統是有 緩存的,因此這個寫入並不能保證數據已經寫入到物理磁盤
# 默認值1是爲了保證完整的ACID。固然,你能夠將這個配置項設爲1之外的值來換取更高的性能,可是在系統崩潰的時候,你將會丟失1秒的數據。
# 設爲0的話,mysqld進程崩潰的時候,就會丟失最後1秒的事務。設爲2,只有在操做系統崩潰或者斷電的時候纔會丟失最後1秒的數據。InnoDB在作恢復的時候會忽略這個值。
# 總結
# 設爲1固然是最安全的,但性能頁是最差的(相對其餘兩個參數而言,但不是不能接受)。若是對數據一致性和完整性要求不高,徹底能夠設爲2,若是隻最求性能,例如高併發寫的日誌服務器,設爲0來得到更高性能


#開啓binlog 志同步功能
sync_binlog=1

#binlog 日誌文件名
log-bin=mysql-bin-200

# 這個表示只同步某個庫 (若是沒有此項,表示同步全部的庫)
binlog-do-db=xxxx
上面的配置寫好以後按鍵盤ESC鍵在按shift+:輸入wq.保存退出.

重啓咱們的主機數據庫看本身的數據庫是什麼選用不一樣的命令

systemctl restart mysql或者 systemctl restart mariadb

完成後使用

mysql -u root -p 登陸mysql或者mariadb.輸入登陸密碼.這個是本身的數據庫的帳戶密碼.

 

 

再來給受權給從數據庫服務 192.168.1.201, 戶名mark,密碼123456

能夠根據本身的狀況來配置

grant replication slave on *.* to 'mark'@'192.168.1.201' identified by '123456';

查看主數據庫的狀態

show master status;

 

 

到這一步咱們就已經完成主數據庫的配置了.

 

3.從數據庫的配置

和前面的主機配置大同小異.

server-id=201
innodb_flush_log_at_trx_commit=2
sync_binlog=1
log-bin=mysql-bin-201
配置完成後同樣的保存退出.在重啓從機的數據庫.

systemctl restart mysql或者 systemctl restart mariadb

mysql -u root -p 登陸mysql或者mariadb.輸入登陸密碼.這個是本身的數據庫的帳戶密碼.

 

 

 

若是配置了同步的數據庫,則在從機數據庫上面要有一個和主機配置的數據庫同樣的數據庫.

配置從機鏈接master

change master to master_host='192.168.1.200',master_user='mark' ,master_password='12345', master_log_file='mysql- bin-200.000004' ,master_log_pos=671;

參數說明:

master_host: 主機的ip

master_user : 主機受權的用戶.

master_password : 主機受權時候填寫的密碼

master_log_file : 主機show master status;中的File

master_log_pos: 主機show master status;中的Position.

配置完成後啓動slave.

start slave;

最後查看slave的狀態

show slave status \G;

 

 

看到上圖的狀態就已經徹底配置好主從數據庫了.

4.驗證是否配置成功

能夠在主庫上建立個庫,再在從庫上刷新查看是否同步

 

5.故障排除.

若是出現1236錯誤

 

 

能夠經過:

中止從機.

stop slave

重置從機

reset slave

啓動從機

start slave

來解決這個錯誤

相關文章
相關標籤/搜索