第十七章、mysql主從配置

17.1 MySQL主從介紹
17.2 準備工做
17.3 配置主
17.4 配置從
17.5 測試主從同步
17.6擴展
17.7課堂筆記
 
17.1 MySQL主從介紹
MySQL主從又叫作Replication、AB複製。簡單講就是A和B兩臺機器作主從後,在A上寫數據,另一臺B也會跟着寫數據,二者數據實時同步的
 
MySQL主從是基於binlog的,主上須開啓binlog才能進行主從。
 
主從過程大體有3個步驟
  • 1)主將更改操做記錄到binlog裏
  • 2)從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏
  • 3)從根據relaylog裏面的sql語句按順序執行
 
主從共有3個線程:
  • 主上有一個log dump線程,用來和從的I/O線程傳遞binlog
  • 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句執行
 
主從原理圖
當有寫入操做時,會記錄到Master的binlog裏面,主上(Master)的log dump 線程會和從上(Slave)的I/O線程相互通訊;從上將binlog信息讀到Slave,生成一個Relaylog中繼日誌;從上的SQL線程將Relaylog裏面的sql語句執行
 
主從應用場景:
一、作數據備份;主機器宕機,能夠啓動從機器,給web、客戶端提供服務。
二、不只作數據備份,還要做爲讀庫,讓web、客戶端從從機器讀取數據,減緩主機器讀取壓力
 
 
17.2 準備工做
準備兩臺機器,都要有mysql服務
###注意,進行主從配置同步操做時必定要保持兩邊數據一致
 
17.3 配置主
1、安裝mysql
 
2、修改my.cnf,增長server-id=150和log_bin=xin1
vim /etc/my.cnf
server-id=150
log_bin=xin2
 
3、修改完配置文件後,啓動或者重啓mysqld服務
/etc/init.d/mysqld restart
 
4、把mysql庫備份並恢復成xin庫, 做爲測試數據
mysqldump -uroot -p123456 mysql > /tmp/mysql.sql
mysql -uroot  -p123456 -e "create database xin"
mysql -uroot -p123456 xin < /tmp/mysql.sql
 
5、建立用做同步數據的用戶
grant replication slave on *.* to 'repl'@slave_ip identified by 'password';
#slave_ip爲從機器的ip
grant replication slave on *.* to 'repl'@192.168.233.129 identified by '123456';
 
flush tables with read lock;    
#鎖表,防止表繼續寫入
 
show master status;
#查看binlog的位置和數值,須要記住,待會要用到
 
 
17.4 配置從
1、安裝mysql
 
 
2、編輯my.cnf,配置server-id=129,(要求和主上不同,且從上沒有binlog日誌)
vim /etc/my.cnf
server-id=129
 
 
3、修改完配置文件後,啓動或者重啓mysqld服務
/etc/init.d/mysqld restart
 
4、把主上xin庫同步到從上
scp  192.168.233.150:/tmp/*.sql  /tmp/
[root@xinlinux-01 ~]# scp  192.168.233.150:/tmp/*.sql  /tmp/
root@192.168.233.150's password:
xin.sql                                        100%  649KB   8.6MB/s   00:00
zrlog.sql                                      100% 9863     1.9MB/s   00:00
 
5、能夠先建立xin庫,而後把主上的/tmp/mysql.sql拷貝到從上,而後導入xin庫
mysql -uroot
create database xin;
create database zrlog;
mysql -uroot xin <  /tmp/xin.sql
mysql -uroot zrlog <  /tmp/zrlog.sql
 
6、實現主從同步
mysql -uroot 
stop slave;
 
change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx;
#master_host爲主機器ip,msaster_pasword爲主機器密碼,master_log_file爲binlog日誌名稱,master_log_pos爲binlog日誌數值
 
change master to
master_host='192.168.233.150',master_user='repl',master_password='123456',master_log_file='xin2.000002',master_log_pos=665019;
 
 
start slave;
 
#斷定主從是否配置成功
show  slave status\G
 
查看主從同步是否正常
一、 查看Slave_IO_Running和Slave_SQL_Running是否爲yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
二、關注是否有error信息
Seconds_Behind_Master: 0  #爲主從延遲的時間
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
 
7、還要到主上執行 
unlock tables;        #解鎖表
 
 
17.5 測試主從同步
my.cnf配置文件的幾個配置參數(主從機器均可配置)
主服務器上
binlog-do-db=        #僅同步指定的庫
binlog-ignore-db=   #忽略指定庫
 
從服務器上
replicate_do_db=         #同步指定庫
replicate_ignore_db=    #忽略指定庫
replicate_do_table=      #同步指定表
replicate_ignore_table=  #忽略指定表
replicate_wild_do_table=   #如aming.%, 支持通配符%,同步指定庫 (經常使用)
replicate_wild_ignore_table=  #忽略指定庫,可用通配符% (經常使用)
 
 
測試主從
主上操做
 mysql -uroot  -p123456;
use xin;
show tables;
select count(*)  db;
mysql> select count(*)  db;
+----+
| db |
+----+
|  1 |
+----+
1 row in set (0.06 sec)
 
從上操做
 mysql -uroot
use xin;
select count(*)  db;
mysql> select count(*)  db;
+----+
| db |
+----+
|  1 |
+----+
 
對比可知主從的數據徹底同樣,限制開始對主機器的數據進行操做,查看從機器是否同步操做的數據
主上操做清空db表數據
truncate table db;
select * from  db;
mysql> select * from  db;
Empty set (0.00 sec)
 
從上操做
select * from  db;
mysql> select * from  db;
Empty set (0.00 sec)
#發現從機器的db表數據清空了
 
主上繼續操做
drop table db;
 
從上查看wp_users表
select count(*)  db;
 
若是不當心對從機器進行的誤刪等操做致使主從機器不一致:
一、能夠先stop slave,再start slave;查看slave show slave status 兩個yes是否在;
 
二、若是仍是不行,就須要在從機器從新配置主從同步 (前提是要保持數據一致)
stop slave;
 
change master to master_host='', master_user='repl', msaster_pasword='', master_log_file='', master_log_pos=xx;
 
start slave;
 
 
17.6擴展
#若是遇到主從不能正常同步,提示uuid相同的錯誤。這是由於克隆機器致使。
 
不停庫不鎖表在線主從配置
 
主從不一樣步
 
 
 
主主
 
mysql-proxy 實現讀寫分離
 
mysql-proxy相似的產品有:
mycat  基於阿里的開源軟件cobar,官網 www.mycat.io
 
 
mycat實現分庫分表  
 
atlas   出自於360,不維護不更新了   http://www.javashuo.com/article/p-sofkphwt-m.html
 
mysql環形主從
 
 
MHA架構
 
比較複雜的mysql集羣架構 http://ask.apelearn.com/question/17026
 
 
17.7課堂筆記
1、NFS
案例:nfs服務端鏈接了不少的nfs客戶端,修改了nfs服務端的配置直接重啓rpcbind服務途中致使一個php網站的nfs客戶端訪問不了nfs服務端,用戶訪問網頁一直加載不了網頁在等待,nfs客戶端出現大量php進程請求,致使磁盤佔用高
 
解決方法:在重啓rpcbind服務前,將客戶端掛載的nfs先卸載掉;這樣即便用戶訪問不了界面也不須要等待,會返回404錯誤,客戶端的磁盤佔用也不會高
 
 
2、FTP
#安裝purl-ftpd前須要安裝epel擴展源
 
 
3、Tomcat
基礎概念:
JAVAEE   Java Plateform  Enterprise  Edition  企業版本  用來作網站的
JAVAEE   Java Plateform  Standard  Edition    標準版本  用來作電腦運行的軟件的
JAVAEE   Java Plateform  Micro   Edition    微型版本  作手機軟件的  
 
JDK  Java  Development  kit  java的開發環境  JDK=java開發工具+JRE
 
JRE  Java  Runtime  Environment  java程序的運行環境,包含java運行所須要的類庫和LVM
 
LVM   java虛擬機
 
server 和jsp
編寫java web網站的
在html代碼中內嵌java代碼就是jsp,而servlet是純jsp代碼寫的
jsp主要用來展示頁面效果,而servlet主要負責邏輯控制
用戶第一次運行jsp時,會自動轉換爲servlet代碼,因此說jsp本質上是一種servlet
第一次訪問servlet時,會將其編譯爲類文件,後續能夠直接訪問類文件。
要想使用servlet必須把它放在特定的位置,並且西藥對其配置,jsp放到哪裏均可以(webapps下),不須要配置。
 
tomcat、JDK、java web應用三者關係
tomcat是容許並java web應用的一箇中間件,好比要運行一個java的網站,須要安裝tomcat,就像運行PHP網站須要安裝php。簡單說,jsp程序須要解析須要tomcat。
而tomcat是用java開發的一款軟件,要想讓tomcat運行起來,須要一個運行環境,JDK就是給tomcat提供這個運行環境的。
 
 
4、tomcat 8005端口啓動慢解決方法
編輯$JAVA_HOME/jre/lib/security/java.security,將"securerandom.soure=file:/dev/random"的/dev/random改成"/dev/urandom"
 
$JAVA_HOME的位置:
若是是openjdk(yum安裝的),在/usr/lib/jvm/
若是是下載的二進制包,就在jdk主目錄(如:/usr/local/jdk_1.8)
 
 
5、普通用戶啓動tomcat
#1024之內的端口都必須用root用戶才能啓動,通普通用戶身份啓動不了
一、建立普通用戶
useradd tomcat
 
二、修改tomcat目錄屬主
chown -R tomcat /usr/local/tomcat
 
三、啓動tomcat
  • su -c "/usr/local/tomcat/bin/startup.sh" tomcat
  • 或者先登陸普通用戶,而後運行啓動命令
 
四、關閉tomcat
su -c "/usr/local/tomcat/bin/shutdown.sh"  tomcat
 
#注意:用普通用戶啓動tomcat,監聽端口不能使80,由於80必須以root身份監聽
 
 
6、tomcat目錄介紹
  • bin:主要存放腳本文件,例如經常使用的windows和linux系統中剛啓動和關閉腳本
  • conf:主要存放配置文件,其中個最重要的兩個配置文件是server.xml和web.xml
  • lib:主要存放tomcat運行所依賴的包
  • LICENSE:版權許可證,軟件版權信息及適用方位等信息
  • logs:主要村翁運行時產生的日誌文件,例如catalina.out、catalina.(date).log等
  • NOTICE:通知信息,一些軟件的所屬信息和地址等
  • RELEASE-NOTES:發佈說明,包含一些版本升級功能點
  • RUNNING.txt:運行說明,必需的運行環境等信息
  • temp:存放tomcat運行時產生的臨時文件,例如開啓了緩存的應用城西,會在該目錄下生成一些文件
  • webapps:部署web應用程序的默認目錄,也就是war包所在默認目錄
  • work:主要存放有jsp文件生成的servlet(java文件以及最終編譯生成的class文件)
 
 
7、tomcat配置文件
 
 
8、重定向web應用程序目錄
#在一臺服務器上tomcat跑多個端口
 
一、建立實例目錄
mkdir -p /data/tomcat-instance
mkdir /data/tomcat-instance/www.123.com
cd !$
cp -r /usr/local/tomcat/conf   /data/tomcat-instance/www.123.com
 
二、建立tomcat服務相關目錄
mkdir -p   /data/tomcat-instance/www.123.com/{common,logs,temp,server,shared,webapps,work}
 
三、建立啓動和關閉腳本
 
四、配置編輯文件
vim /data/tomcat-instance/www.123.com/conf/server.xml
#修改三個端口,目的是爲了避免和其餘實例衝突
課堂筆記
1、NFS
案例:nfs服務端鏈接了不少的nfs客戶端,修改了nfs服務端的配置直接重啓rpcbind服務途中致使一個php網站的nfs客戶端訪問不了nfs服務端,用戶訪問網頁一直加載不了網頁在等待,nfs客戶端出現大量php進程請求,致使磁盤佔用高
 
解決方法:在重啓rpcbind服務前,將客戶端掛載的nfs先卸載掉;這樣即便用戶訪問不了界面也不須要等待,會返回404錯誤,客戶端的磁盤佔用也不會高
 
 
2、FTP
#安裝purl-ftpd前須要安裝epel擴展源
 
 
3、Tomcat
基礎概念:
JAVAEE   Java Plateform  Enterprise  Edition  企業版本  用來作網站的
JAVAEE   Java Plateform  Standard  Edition    標準版本  用來作電腦運行的軟件的
JAVAEE   Java Plateform  Micro   Edition    微型版本  作手機軟件的  
 
JDK  Java  Development  kit  java的開發環境  JDK=java開發工具+JRE
 
JRE  Java  Runtime  Environment  java程序的運行環境,包含java運行所須要的類庫和LVM
 
LVM   java虛擬機
 
server 和jsp
編寫java web網站的
在html代碼中內嵌java代碼就是jsp,而servlet是純jsp代碼寫的
jsp主要用來展示頁面效果,而servlet主要負責邏輯控制
用戶第一次運行jsp時,會自動轉換爲servlet代碼,因此說jsp本質上是一種servlet
第一次訪問servlet時,會將其編譯爲類文件,後續能夠直接訪問類文件。
要想使用servlet必須把它放在特定的位置,並且西藥對其配置,jsp放到哪裏均可以(webapps下),不須要配置。
 
tomcat、JDK、java web應用三者關係
tomcat是容許並java web應用的一箇中間件,好比要運行一個java的網站,須要安裝tomcat,就像運行PHP網站須要安裝php。簡單說,jsp程序須要解析須要tomcat。
而tomcat是用java開發的一款軟件,要想讓tomcat運行起來,須要一個運行環境,JDK就是給tomcat提供這個運行環境的。
 
 
4、tomcat 8005端口啓動慢解決方法
相關文章
相關標籤/搜索