主从服务器的配置

    xiaoxiao2021-03-26  36

    主从服务器的配置

    一、简介

    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 tomaster_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">

            <propertyname="driverClassName">

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

           </property>

          <property name="url">        <value>jdbc:mysql://localhost:3307/同步数据库?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull</value>

           </property>

           <property name="username">

               <value>root</value>

           </property>

           <property name="password">

               <value></value>

           </property>

           </bean>

           

           <beanid="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&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull</value>

           </property>

           <property name="username">

               <value>账号</value>

           </property>

           <property name="password">

               <value>密码</value>

           </property>

           </bean>

    (2)spring-config.xml

    <!--  2  将读数据源 交给 sessionfactory -->

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

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

       <property name="hibernateProperties">

        <props>

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

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

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

       </props>

      </property>

     <!-- 扫描hibernate  实体类  pojo   相当于 hibernate.cfg.xml  配置的映射文件  -->

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

           </bean>

    <!--  2  将写数据源 交给 sessionfactory -->

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

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

            <propertyname="hibernateProperties">

            <props>

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

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

            </props>

            </property>

            <!-- 扫描hibernate  实体类 pojo   相当于 hibernate.cfg.xml  配置的映射文件  -->

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

           </bean>

    <!-- 将 sessionfactory  交给模板工具类  模板工具类 直接在dao 层 使用 -->

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

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

            </bean>

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

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

            </bean>

     <!-- 3 将 sessionfactory  交给 事物去管理 -->

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

             <propertyname="sessionFactory" ref="sessionFactory-write" />

             </bean>

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

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

          <!-- 和上面的    beanid="transactionManager" 对应 -->

     <tx:annotation-driventransaction-manager="transactionManager" />

    (3)DataSourceTemplate.java

    package org.lt.utils;

    import javax.annotation.Resource;

    importorg.springframework.orm.hibernate3.HibernateTemplate;

    importorg.springframework.stereotype.Component;

    @Component

    public class DataSourceTemplate {

           @Resource(name="hibernateTemplate-write")

           privateHibernateTemplate hibernateTemplateWrite;

           @Resource(name="hibernateTemplate-read")

           privateHibernateTemplate hibernateTemplateRead;

           publicHibernateTemplate getHibernateTemplateWrite() {

                  return hibernateTemplateWrite;

           }

           publicHibernateTemplate getHibernateTemplateRead() {

                  return hibernateTemplateRead;

           }

    }

    (4)使用实例

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

           }

    public T findEntityById(T entity,Integer id) {

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

           }

    转载请注明原文地址: https://ju.6miu.com/read-663747.html

    最新回复(0)