mysql主从数据库配置

来源:互联网 发布:an是什么软件 编辑:程序博客网 时间:2024/05/02 02:36

一、简介

1:什么是主从服务器



mysql内建的复制功能是构建大型,高性能应用程序的基础。将mysqll的数据分布到多个系统上去,这种分布的机制,是通过将mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。





2主从服务优势:


   好处一:实现服务器负载均衡


                  通过服务器复制功能,可以在主服务器和从服务器之间实现负载均衡。即可以通过在主服务器和从服务器之间切分处理客户查询的负荷,从而得到更好的客户相应时间。通常情况下,数据库管理员会有两种思路。


好处二:通过复制实现数据的异地备份 


            可以定期的将数据从主服务器上复制到从服务器上,这无疑是先了数据的异地备份。在传统的备份体制下,是将数据备份在本地。此时备份 作业与数据库服务器运行在同一台设备上,当备份作业运行时就会影响到服务器的正常运行。有时候会明显的降低服务器的性能。同时,将备份数据存放在本地,也 不是很安全。如硬盘因为电压等原因被损坏或者服务器被失窃,此时由于备份文件仍然存放在硬盘上,数据库管理员无法使用备份文件来恢复数据。这显然会给企业 带来比较大的损失。


         好处三:提高数据库系统的可用性 


                                 数据库复制功能实现了主服务器与从服务器之间数据的同步,增加了数据库系统的可用性。当主服务器出现问题时,数据库管理员可以马上让从服务器作为主服务器,用来数据的更新与查询服务。然后回过头来再仔细的检查主服务器的问题。


二、数据库配置步骤



  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


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


至少包含basedirdatadir这两个基本的配置,其他可以没有


4.配置mysql服务
      执行开始-》运行-cmd


mysqlbin目录下运行以下命令
mysqld --install MySQLSlave --defaults-file=D:/mysql-5.6.13-win32\my.ini
     
完成后,即已安装了mysq服务


5.从数据库账号为:root,没有密码



三、实现数据库主从同步


1)在主数据库建立从服务器可以连接的账号,赋予从数据库权限


2)将要同步的数据库从主数据库备份到从数据库


3)重新启动主数据库服务,启动从数据库服务


4)打开主数据库的图形化界面


执行命令:show master status



记录File以及Position的值;


5)打开从数据库的图形化界面


执行命令:


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. 项目应用


  1. ssh框架(hibernate模板工具类)

    1spring-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>


       


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


       </property>


       <property name="username">


           <value>账号</value>


       </property>


       <property name="password">


           <value>密码</value>


       </property>


       </bean>


  1. 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>


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


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


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


       <propertyname="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>


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


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


  1. 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() {

                 returnhibernateTemplateWrite;

          }

          publicHibernateTemplate getHibernateTemplateRead() {

                 returnhibernateTemplateRead;

          }

    }

  2. 使用实例

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

          }

    public T findEntityById(T entity,Integer id) {

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

          }











1 0
原创粉丝点击