17.1 MySQL主從介紹
17.2 準備工做
17.3 配置主
17.4 配置從
17.5 測試主從同步
遇到主從不能正常同步,提示uuid相同的錯誤。這是由於克隆機器致使。
https://www.2cto.com/database/201412/364479.html
擴展部分
不停庫不鎖表在線主從配置
http://seanlook.com/2015/12/14/mysql-replicas/
主從不一樣步
http://www.rfyy.net/archives/2309.html
https://blog.csdn.net/weixin_33857230/article/details/93063899
主主
關於 auto_increment https://blog.csdn.net/leshami/article/details/39779509
http://www.cnblogs.com/ygqygq2/p/6045279.html
mysql-proxy 實現讀寫分離
http://blog.51cto.com/zzclinux/1980487
mysql-proxy相似的產品有:
mycat 基於阿里的開源軟件cobar,官網 www.mycat.io
https://my.oschina.net/ruoli/blog/1789370
mycat實現分庫分表
https://www.cnblogs.com/joylee/p/7513038.html
atlas 出自於360,不維護不更新了 https://blog.csdn.net/AnPHPer/article/details/80566385
mysql環形主從
http://ask.apelearn.com/question/11437
mysql架構演變 http://www.aminglinux.com/bbs/thread-8025-1-1.html
MHA架構
http://blog.51cto.com/xiaoshuaigege/2060768
比較複雜的mysql集羣架構 http://ask.apelearn.com/question/17026html
數據備份連接:https://pan.baidu.com/s/1wlrQuIglJC3WrfI9iayN4A
提取碼:sm9b mysql
MariaDB主從連接:https://pan.baidu.com/s/1q6eUl8TeaIBnxpwSUoVIMA
提取碼:xz3d
複製這段內容後打開百度網盤手機App,操做更方便哦linux
mysql主從有關的文章 關鍵詞 GTID
https://blog.csdn.net/xiaoyi23000/article/details/80521423
https://blog.csdn.net/u013399093/article/details/70568837
https://www.cnblogs.com/abobo/p/4242417.htmlweb
1、 MySQL主從介紹sql
MySQL主從又叫作Replication、AB複製。簡單講就是A和B兩臺機器作主從後,在A上寫數據,另一臺B也會跟着寫數據,二者數據實時同步的 MySQL主從基於binlog,主上須開啓binlog才能進行主從。 MySQL主從過程大體有3個步驟 1)主將更改操做記錄到binlog裏 2)從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏(中繼日誌) 3)從根據relaylog裏面的sql語句按順序執行 MySQL主從有3個線程: 主上有一個log dump線程,用來和從的I/O線程傳遞binlog 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句執行一遍
主從複製原理圖:數據庫
1)數據備份,主機器宕機,從機器還能隨時對web提供服務 2)做爲一個從庫,讀的庫,減輕主庫的壓力,數據備份且能夠分擔主機器被調用數據時的壓力,mysql主從,是有方向性的,寫數據,必須從主機器開始;若是不依照原理會致使數據紊亂
2、準備工做vim
作實驗須要兩臺機器,且都須要mysql;若是沒有安裝mysql 能夠參考此連接安裝:http://www.javashuo.com/article/p-fbqrxxsn-k.html數組
主機1作主庫 : 001 192.168.116.3;bash
主機2作從庫 : 002 192.168.116.33 ;服務器
ps aux |grep mysql 查看兩個機器的mysql是否啓動
啓動:service mysqld start 或 /etc/init.d/mysqld start 關閉:service mysqld stop
若是此處的屬主和數組爲root,須要更改成mysql : chown -R mysql:mysql .
把001做爲主(master),把002做爲從(slave)
編輯主上的配置文件 vim /etc/my.cnf
增長兩行配置
server-id=116 //id任意數字 log_bin=tobe001 //bin_log的前綴
/etc/init.d/mysqld restart 重啓mysql服務
生成tobe001.index和tobe001.000001兩個文件,tobe001.index爲索引頁,必須存在
把zrlog數據庫作備份
mysqldump -uroot -ptobe zrlog > /tmp/zrlog.sql
建立tobe2庫
mysql -uroot -ptobe -e "create database tobe2"
把備份的文件恢復到tobe2庫
mysql -uroot -ptobe tobe2 < /tmp/zrlog.sql
/data/mysql目錄下,備份的數據庫tobe2
進入mysql,建立用戶 ,主從相互同步使用,用戶repl,針對從的ip,密碼123456
grant replication slave on *.* to 'repl'@'192.168.116.33' identified by '123456';
名詞 |
解釋 |
replication slave |
從複製權限 |
*.* |
數據庫.表,即全部數據庫和表 |
repl |
主從複製的用戶 |
IP |
從slave的IP |
首先鎖定數據庫以防止寫入數據
flush tables with read lock;
查看master狀態,須要記住位置(Position)和bin_log的filename
show master status;
把須要主從複製的數據庫都備份
mysqldump -uroot -ptobe tobe > /tmp/tobe.sql
4、配置從
vim /etc/my.cnf 編輯配置文件
server-id=138 //添加此行,id只要和主端不一樣便可
重啓mysql服務;並利用scp命令,複製001上的備份文件到002上的/tmp目錄下
/etc/init.d/mysqld restart
從上操做:
scp 192.168.116.3:/tmp/*.sql /tmp/ 全部sql結尾的文件都複製過來
進入數據庫,若是沒有給mysql命令指定環境變量;所以此時須要設置別名,方便使用
[root@002 ~]# mysql -uroot -bash: mysql: 未找到命令 //沒有設置環境變量 [root@002 ~]# alias 'mysql=/usr/local/mysql/bin/mysql' //別名 [root@002 ~]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump' //別名 [root@002 ~]# mysql -uroot //如今可使用
建立與001上覆制過來的相同的數據庫,並把/tmp下相應的備份數據庫,拷貝到剛建立的數據庫,須要和001一一對應;
mysql -uroot zrlog< /tmp/zrlog.sql
mysql -uroot tobe2< /tmp/tobe2.sql
實現主從:
從上操做,若slave io及sql線程已經啓動,須要先 stop slave;
change master命令設置slave從機與master主機進行通訊,實現主從通訊
change master to master_host='192.168.116.3',master_user='repl',master_password='tobe',master_log_file='tobe001.000007',master_log_pos=120; #此處的master_log_pos爲主上的Position值
語句釋義:
master_host 與 master_port:分別表明master主機名(或IP地址)及mysql實例端口號。端口默認爲3306,則能夠省略;
master_user 與 master_password:鏈接到master主機複製帳戶所對應的用戶名及密碼。
master_log_file 與 master_log_pos:肯定slave的io線程下次開始執行時從master開始讀取的位置座標,若是兩者都沒有指定,slave使用上次slave sql線程保存的位置。
注意:change master to能夠不帶參數,如:只改變了用於複製的用戶密碼,那麼change master to只需針對master_password選項做出修改便可。
主機器
開啓從機上slave io及sql線程;
start slave;
show slave status\G
Slave_IO_Running: Yes Slave_SQL_Running: Yes 都爲yes,即配置成功 還需關注 Seconds_Behind_Master: 0 //爲主從延遲的時間 Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error:
報錯排查:
一、change master to時所填寫的參數是否與主機器一致
二、兩臺機器網絡是否通暢
三、兩臺機器的防火牆及iptables是否關閉,關閉後重啓mysql
systemctl stop iptables
systemctl stop firewalld
setenforce 0
四、兩臺機器的uuid是否相同,見文檔最上面連接
配置成功後,而後到001(主)上,解鎖數據表
unlock tables;
5、測試主從同步
介紹幾個配置參數:
數據庫及表同步也能夠指定,主從上命令不一樣:
my.cnf:
主服務器:
binglog-do-db=1,2 //僅同步指定的庫1和2
bing-ignore-db=3 //忽略指定的庫3
從服務器:
replicate-do-db=
replicate-ignore-db=
replicate-do-table
replicate-ignore-table=
replicate-wild-do-table= // 經常使用 支持通配符%
replicate-wild-ignore-table= // 經常使用
查看主從同步是否正常
分別在001和002機器上進行主從測試:
主上 |
從上 |
use tobe2; 選擇tobe2庫 |
use tobe2; 選擇tobe2庫 |
select count(*) from user; 查詢user表總行數 |
select count(*) from user; 查詢user表總行數 與主一致 |
truncate table websites; 清空websites表內容 select count(*) from website; //此時此表內容爲0 |
select count(*) from website; //在主端清空的website表的內容,此時與主端一致 |
主上繼續drop table website; 刪除 website表 |
從上查看website表:select count(*) from website; 已經刪除 |