有不少公司的網站存在大量的併發訪問,通常的解決方式就是利用MySQL主從配置,實現讀寫分離,減輕數據庫壓力,今天就記錄一下,這幾回搭建主從的一些心得mysql
什麼是MySQL主從複製
簡單來講就是保證主SQL(Master)和從SQL(Slave)的數據是一致性的,向Master插入數據後,Slave會自動從Master把修改的數據同步過來(有必定的延遲),經過這種方式來保證數據的一致性,就是主從複製sql
- 第一步固然是安裝MySQL,數據庫版本要一致,減小出現不可預支的問題
- 配置Master主服務器
在Master MySQL上建立一個用戶「slave」,並容許其餘Slave服務器能夠經過遠程訪問Master,經過該用戶讀取二進制日誌,實現數據同步。數據庫
mysql>create user slave; //建立新用戶vim
//repl用戶必須具備REPLICATION SLAVE權限,除此以外沒有必要添加沒必要要的權限,密碼爲mysql。說明一下192.168.0.%,這個配置是指明repl用戶所在服務器,這裏%是通配符,表示192.168.0.0-192.168.0.255的Server均可以以repl用戶登錄主服務器。固然你也能夠指定固定Ip。centos
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.%' IDENTIFIED BY 'mysql';服務器
刷新一下權限 flush privileges;併發
找到MySQL安裝文件夾修改my.ini文件。mysql中有好幾種日誌方式,這不是今天的重點。咱們只要啓動二進制日誌log-bin就ok。網站
在[mysqld]下面增長下面幾行代碼spa
server-id=1 #給數據庫服務的惟一標識,通常爲你們設置服務器Ip的末尾號,若是從數據庫也設置這個參數的話,必定不能相同,隨便給個數字就能夠了rest
log-bin=master-bin
log-bin-index=master-bin.index #開啓二進制日誌功能,能夠隨便取,最好有含義(關鍵就是這裏了)
## 複製過濾:須要備份的數據庫,輸出binlog
#binlog-do-db=roncoo
## 複製過濾:不須要備份的數據庫,不輸出(mysql庫通常不一樣步)
binlog-ignore-db=mysql
查看日誌
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
重啓MySQL服務
4. Slave從服務器(centos)
(1)找到MySQL安裝文件夾修改my.cnf文件,vim my.cnf
server-id= 101 #不可跟其餘主從數據庫相同
log-bin=edu-mysql-slave1-bin # 開啓二進制日誌功能,以備Slave做爲其它Slave的Master時使用
relay-log=mysql-relay-bin #relay_log配置中繼日誌
log-slave-updates=1
read-only=1 #設定以後就是隻讀數據庫了,只有super權限的用戶能夠讀寫
replicate-wild-do-table=db.% #過濾掉不須要同步的數據庫,只同步db數據庫,這個最好在從庫過濾
slave-skip-errors = 1133 #同步過程當中忽略的錯誤碼
(2) 重啓數據庫 service mysql restart;
(3)鏈接Master
change master to master_host='192.168.0.?', //指定主服務器IP地址
master_port=3306,
master_user='slave', //指定在主服務器上能夠進行同步的用戶名
master_password='mysql', //指定在主服務器上能夠進行同步的用戶名的密碼
master_log_file='master-bin.000001', //Master服務器產生的日誌,必須跟主數據庫的file字段一致
master_log_pos=0 //必須跟主數據庫的Position一致
(4)啓動Slave
start slave;
查看狀態 show slave status;
mysql 1236錯誤