Mysql的主從複製和讀寫分離
主從複製
1,修改mysql的配置文件
[root@localhost mysql]#vim /etc/my.cnf
2.分別在配置文件中加入如下配置
server-id=1
log-bin=mysql-bin #開啓二進制日誌文件的名字
log-slave-updates #從機隨着日誌文件的變化而變化
slave-skip-errors=all #跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
···
注意:兩個機器的server-id不能一致,自己選擇哪個爲主那些爲從
3.重啓mysql服務
systemctl restart mysqld
4.登錄mysql執行如下命令檢測配置是否生效
SHOW VARIABLES like 'server_id';
5.登錄master節點執行如下命令
show master status;
6.登錄從節點執行如下命令:每個從都要執行使得從機與主機日誌保持一致
change master to
master_host='192.168.150.128',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=120;
7.開啓從節點
start slave;
8.查看從節點狀態
show master status\G;
************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.15.0.9
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注意:
1.出現 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 說名成功,
2.如果在搭建過程出現錯誤,可以查看查看錯誤日誌文件 cat /var/log/mysqld.log
9.通過客戶端工具進行測試
10.關閉主從複製(在從節點執行),如果不手動關閉的話,便會一直保持!
stop slave;
讀寫分離《中間件Mycal》
1.下載mycat
http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2.解壓mycat
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
注意:
以下這些配置只在寫節點配置就行
3.配置mycat中conf下的配置schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 定義MyCat的邏輯庫 name是自定義的mycat邏輯庫名 dataNode 定義數據節點,對應下一行的name -->
<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dataNode"></schema>
<!-- 定義MyCat的數據節點 database配置你的真實數據庫名 -->
<dataNode name="dataNode" dataHost="dtHost" database="project" />
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<!--維持心跳-->
<heartbeat>select user()</heartbeat>
<!--寫節點-->
<writeHost host="hostM1" url="10.10.0.151:3306" user="root" password="root">
<!--從節點-->
<readHost host="hostS1" url="10.10.0.152:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
4,配置登陸mycat的權限server.xml 邏輯庫名一定要和schema.xml的一致
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<!-- 這裏配置的都是一些系統屬性,可以自己查看mycat文獻參考-->
<property name="defaultSqlParser">druidparser</property>
<property name="charset">utf8</property>
</system>
<!--配置mycat的用戶信息-->
<user name="root">
<property name="password">root</property>
<!-- 配置邏輯庫名 -->
<property name="mycat">mycat</property>
</user>
</mycat:server>
5,因爲mycat默認的啓動時間爲5s,超時即失敗。因此我們要自己設置它的啓動等待時間 !進入 wrapper.xml文件進行配置,在任意位置添加即可。
wrapper.startup.timeout=7200
以秒爲單位,7200秒=2小時
6 啓動Mycal
./bin/mycat console
或./bin/mycat start
7.查看日誌
tail -f ../logs/mycat.log
8.數據庫連接配置,測試
用navicat(大黃) 連接MyCal 端口默認爲8066
如果要和SpringBoot 集成的話在 yml 上配置
#配置數據源(讀寫分離數據源)
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.150.128:8066/mycat #連接mycat邏輯庫
username: root
password: root