MySQL主從配置

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語句執行一遍

主從複製原理圖:數據庫

mysql主從使用場景:

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 .

3、配置主

把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; 已經刪除

相關文章
相關標籤/搜索