MySQL的主從複製與讀寫分離
阿新 • • 發佈:2018-12-12
一、主從複製
1.伺服器資訊:主伺服器:192.168.48.4 從伺服器:192.168.48.5 均已安裝mysql
2.配置主伺服器中的 /etc/my.cnf 檔案,設定伺服器id和開啟日誌功能。設定完後儲存。進入mysql客戶端,通過show VARIABLES like 'server_id'。檢視伺服器id是否和設定一樣,此處為 4。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 server_id=4 ###設定伺服器在叢集中的id log-bin=mysql-bin ###開啟日誌檔案,用於主從同步日誌分析 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
3.配置從伺服器中的/etc/my.cnf 檔案
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 server_id=5 ###設定從伺服器id log-bin=mysql-bin ###開啟日誌 binlog_do_db=taotao ###設定要同步的資料庫名稱,資料僅同步該資料庫,且從伺服器應由此資料庫 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
4.而後在mysql客戶端中操作
//在主伺服器MYSQL客戶端新增從伺服器用於同步資料的賬號 GRANT replication SLAVE on *.* to 'slave'@'192.168.48.5' IDENTIFIED by '234568' show MASTER STATUS--檢視主伺服器日誌檔案及開始行數 //在從伺服器客戶端操作 //關閉同步 stop SLAVE //設定主伺服器同步資訊 change MASTER to master_host='192.168.48.4',master_user='slave',master_password='234568', master_log_file='mysql-bin.000002',master_log_pos=738 //開啟同步 start SLAVE
二、mysql的讀寫分離
1.在第三臺伺服器(192.168.48.3)上安裝mycat
2.加壓縮包解壓即可 tar zxvf xxx.tar.gz
3.編輯解壓後 conf 下的 server.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property> <!-- 1為開啟實時統計、0為關閉 -->
<property name="useGlobleTableCheck">0</property> <!-- 1為開啟全加班一致性檢測、0為關閉 -->
<property name="sequnceHandlerType">2</property>
<!-- <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
<!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--設定模擬的MySQL版本號-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--預設為type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
<property name="processorBufferPoolType">0</property>
<!--預設是65535 64K 用於sql解析時最大文字長度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
<!--分散式事務開關,0為不過濾分散式事務,1為過濾分散式事務(如果分散式事務內只涉及全域性表,則不過濾),2為不過濾分散式事務,但是記錄分散式事務日誌-->
<property name="handleDistributedTransactions">0</property>
<!--
off heap for merge/order/group/limit 1開啟 0關閉
-->
<property name="useOffHeapForMerge">1</property>
<!--
單位為m
-->
<property name="memoryPageSize">1m</property>
<!--
單位為k
-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--
單位為m
-->
<property name="systemReserveMemorySize">384m</property>
<!--是否採用zookeeper協調切換 -->
<property name="useZKSwitch">true</property>
</system>
<!-- 全域性SQL防火牆設定 -->
<!--
<firewall>
<whitehost>
<host host="127.0.0.1" user="mycat"/>
<host host="127.0.0.2" user="mycat"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
-->
<!--<user name="root">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>-->
<!-- 表級 DML 許可權設定 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
<!--</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>-->
<!-------------------------只需修改以下內容--------------------------------->
<!--配置具有讀寫許可權的賬號 -->
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">mycat</property>
</user>
<!--配置只有讀許可權的賬號-->
<user name="mycat_read">
<property name="password">mycat_read</property>
<property name="schemas">mycat</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
4.編輯schema.xml檔案
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--此處的name與server.xml中的配置賬號的屬性“schemas”關聯-->
<schema name="mycat" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1" />
<!--database為要讀寫分離的資料庫的名字-->
<dataNode name="dn1" dataHost="localhost1" database="taotao" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!--配置主伺服器資訊-->
<writeHost host="hostMaster" url="192.168.48.4:3306" user="root" password="234568">
<!--配置從伺服器資訊,可以配置多個-->
<readHost host="hostSlave" url="192.168.48.5:3306" user="root" password="234568"/>
</writeHost>
</dataHost>
</mycat:schema>
5.通過安裝mycat的伺服器192.168.48.3:8044 使用者名稱和密碼威威server中配置的即可進行登入資料庫。通過讀和寫的判斷會轉發到對應的資料庫伺服器上。