主從服務器的配置


一、簡介

1 主從服務優勢:

好處一:實現服務器負載均衡

    通過服務器復制功能,可以在主服務器和從服務器之間實現負載均衡。即可以通過在主服務器和從服務器之間切分處理客戶查詢的負荷,從而得到更好的客戶相應時間。通常情況下,數據庫管理員會有兩種思路。

好處二:通過復制實現數據的異地備份 

可以定期的將數據從主服務器上復制到從服務器上,這無疑是先了數據的異地備份。在傳統的備份體制下,是將數據備份在本地。此時備份 作業與數據庫服務器運行在同一台設備上,當備份作業運行時就會影響到服務器的正常運行。有時候會明顯的降低服務器的性能。同時,將備份數據存放在本地,也 不是很安全。如硬盤因為電壓等原因被損壞或者服務器被失竊,此時由於備份文件仍然存放在硬盤上,數據庫管理員無法使用備份文件來恢復數據。這顯然會給企業 帶來比較大的損失。

          好處三:提高數據庫系統的可用性 

  數據庫復制功能實現了主服務器與從服務器之間數據的同步,增加了數據庫系統的可用性。當主服務器出現問題時,數據庫管理員可以馬上讓從服務器作為主服務器,用來數據的更新與查詢服務。然后回過頭來再仔細的檢查主服務器的問題。

二、數據庫配置步驟

1、配置主數據庫

找到mysql安裝目錄,找到my.ini,添加

================================================

#Master Config

server-id=1 //指定服務器ID,必須和從服務器ID不同,唯一,主數據庫一般為1

log-bin=mysql-bin  //指定日志文件

binlog-do-db=xianhua   //指定需要同步的數據庫

================================================

2、安裝從mysql,並配置從數據庫

(1)將免安裝版(綠色版)mysql解壓

(2)一般在解壓后的文件夾中有my-default.ini文件,沒有my.ini文件

(3)新建一個my.ini文件,內容可如下

==========================================

[mysqld]

basedir ="C:/安裝目錄/mysql-5.6.15-64"

datadir = "C:/安裝目錄/mysql-5.6.15-64/data"

port =3307

server_id =2//指定服務器ID,必須和主服務器ID不同,唯一,

 

log-bin=mysql-bin //指定日志文件

binlog-do-db=amusement//同步數據庫

character_set_server = utf8

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[client]

# 設置mysql客戶端的字符集

default-character-set=utf8

======================================

至少包含basedir,datadir這兩個基本的配置,其他可以沒有

(4)配置mysql服務
       執行開始-》運行-》cmd

在mysql的bin目錄下運行以下命令
mysqld --install MySQLSlave --defaults-file=D:/mysql-5.6.13-win32\my.ini
      完成后,即已安裝了mysq服務

(5)從數據庫賬號為:root,沒有密碼

3、實現數據庫主從同步

(1)在主數據庫建立從服務器可以連接的賬號,賦予從數據庫權限

(2)重新啟動主數據庫服務,啟動從數據庫服務

(3)打開主數據庫的圖形化界面

執行命令:show master status

 

記錄File以及Position的值;

(4)打開從數據庫的圖形化界面

執行命令:

change master to master_host='主數據庫端口號',master_user='賬號',master_password='密碼', master_log_file='aaa',master_log_pos=bb;

--  其中xx是在主服務器中創建的一個賬戶,aaa是剛才記錄的File的值,bbb是剛才記錄的Position的值。

stop slave;  -- 停止服務

start slave;        -- 開啟服務

show slave status;      

 

兩個都為yes說明配置成功

三、項目應用

1、ssh框架(hibernate模板工具類)

(1)spring-datasource.xml(主庫作為寫庫,從庫作為讀庫)

<bean id="dataSource-read" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName">

            <value>com.mysql.jdbc.Driver</value>

        </property>

       <property name="url">         <value>jdbc:mysql://localhost:3307/同步數據庫?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull</value>

        </property>

        <property name="username">

            <value>root</value>

        </property>

        <property name="password">

            <value></value>

        </property>

        </bean>

       

       <bean id="dataSource-write" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName">

            <value>com.mysql.jdbc.Driver</value>

        </property>

        <property name="url">

         <value>jdbc:mysql://localhost:3306/同步數據庫?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull</value>

        </property>

        <property name="username">

            <value>賬號</value>

        </property>

        <property name="password">

            <value>密碼</value>

        </property>

        </bean>

(2)spring-config.xml

<!--  2  將讀數據源 交給 sessionfactory  -->

<bean id="sessionFactory-read"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >

    <property name="dataSource" ref="dataSource-read"></property>

    <property name="hibernateProperties">

     <props>

        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

      <prop key="hibernate.show_sql">true</prop>

        <prop key="hibernate.format_sql">true</prop>

    </props>

   </property>

  <!-- 掃描hibernate  實體類  pojo   相當於 hibernate.cfg.xml  配置的映射文件  -->

  <property name="packagesToScan"  value="org.lt.pojo"></property>

       </bean>

<!--  2  將寫數據源 交給 sessionfactory  -->

<bean id="sessionFactory-write"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >

        <property name="dataSource"  ref="dataSource-write"></property>

        <property name="hibernateProperties">

        <props>

        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>               <prop key="hibernate.show_sql">true</prop>

        <prop key="hibernate.format_sql">true</prop>

        </props>

        </property>

        <!-- 掃描hibernate  實體類  pojo   相當於 hibernate.cfg.xml  配置的映射文件  -->

        <property name="packagesToScan"  value="org.lt.pojo"></property>

       </bean>

<!-- 將 sessionfactory  交給 模板工具類   模板工具類 直接在dao 層 使用 -->

        <bean  id="hibernateTemplate-write" class="org.springframework.orm.hibernate3.HibernateTemplate">

          <property name="sessionFactory"  ref="sessionFactory-write"></property>

        </bean>

        <bean  id="hibernateTemplate-read" class="org.springframework.orm.hibernate3.HibernateTemplate">

          <property name="sessionFactory"  ref="sessionFactory-read"></property>

        </bean>

 <!-- 3 將 sessionfactory  交給 事物去管理 -->

         <bean id="transactionManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager">

         <property name="sessionFactory" ref="sessionFactory-write" />

         </bean>

    <!-- 4  指定如何管理事物    指定用注解的方式管理事物-->

    <!-- 使用注解控制事物   -->

      <!-- 和上面的    bean id="transactionManager" 對應 -->

  <tx:annotation-driven transaction-manager="transactionManager" />

(3)DataSourceTemplate.java

package org.lt.utils;

import javax.annotation.Resource;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Component;

@Component

public class DataSourceTemplate {

       @Resource(name="hibernateTemplate-write")

       private HibernateTemplate hibernateTemplateWrite;

       @Resource(name="hibernateTemplate-read")

       private HibernateTemplate hibernateTemplateRead;

       public HibernateTemplate getHibernateTemplateWrite() {

              return hibernateTemplateWrite;

       }

       public HibernateTemplate getHibernateTemplateRead() {

              return hibernateTemplateRead;

       }

}

(4)使用實例

public void saveOrUpdateAllEntity(Collection<T> coll) {       getHibernateTemplateWrite().saveOrUpdateAll(coll);

       }

public T findEntityById(T entity, Integer id) {

       return (T) getHibernateTemplateRead().get(entity.getClass(), id);

       }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM