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
來解決這個錯誤