MySQL安装与主从配置

网站优化性能升级需求,要将两个Mysql配置成主从关系实现读写分离,现在一台开发服务器上安装两个MySQL和实现主从关系,将安装配置过程记录一下,系统环境是Windows,使用的MySQL版本是mysql-5.7.17-winx64源码版。

MySQL的安装

1:首先将MySQL的压缩包解压到合适的目录,拷贝文件my-default.ini改名为my.ini,打开my.ini编译以下基本内容:

#设置数据库默认字符集

character_set_server=utf8

#打开log-bin功能

log-bin=mysql-bin

#MySQL目录

basedir = D:\mysql-5.7.17-winx64-Read
#Mysql数据目录

datadir = D:\mysql-5.7.17-ReadData
#MySQL运行端口

port = 3307

#可指定任意值但需确保不同的数据库唯一值
server_id = 11

其他性能配置略。

2:接着打开命令行工具切换到MySQL的bin目录下执行数据库初始化

mysqld --initialize-insecure --user=mysql;

默认情况下MySQL5.7初始化时会自动生成一个随机的登陆密码,添加--initialize-insecure 属性指定则指定已非安全的方式初始化数据库,在登陆数据库之后再修改数据库密码。

执行完命令之后正常情况下Mysql的数据目录将新建出数据库的基本文件。

3:接下来安装数据库到系统服务

mysqld -install "MySQL5.7 Read" --defaults-file=D:\mysql-5.7.17-winx64-Read\my.ini 

Mysql5.7 Read 指定服务名称

  --defaults-file 指定默认配置文件

4:启动登陆Mysql服务器

通过Windows系统服务管理页面来启动MySQL,通过命令行登陆MySQL

mysql -P3307 -uroot -p

-P指定端口,默认是3306

由于初始化数据库时指定了--initialize-insecure 属性所以登陆无需密码。

修改MySQL密码

切换到mysql数据库设置数据库的登陆密码。

set password = password('admin');

刷新权限

flush privileges;

退出后用新密码重新登陆数据库。

这样一台数据库就安装成功了,假如启动失败出现错误提示,通过查看MySQL数据目录下的.err文件查看日志,确定问题原因。

按照同样的方式安装另一个数据库,由于当前是在同一台服务器上安装两个MySQL,需要注意在新安装的Mysql的my.ini文件中指定不同port 和server_id。

在开发过程中我们经常需要远程登陆MySQL查看数据:

创建远程链接账号
GRANT ALL PRIVILEGES ON *.* TO remote@"%" IDENTIFIED BY "remote@12345";
刷新权限
flush privileges;

参考:

http://www.cnblogs.com/c3gen/p/6168765.html


--------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------------------------------

主从配置

主数据库

登陆主数据库之后执行:

授权给从数据库服务器
GRANT REPLICATION SLAVE ON *.* to 'rep1'@'127.0.0.1' identified by 'rep1@12345';

查询主数据库状态

show master status;

+------------------+----------+--------------+------------------+---------------
----+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_
Set |
+------------------+----------+--------------+------------------+---------------
----+
| mysql-bin.000001 |      154 |              |                  |
   |
+------------------+----------+--------------+------------------+---------------
----+
记录下 FILE 及 Position 的值,在后面进行从服务器操作的时候需要用到。
如果没有显示主数据库状态,是因为没有配置log-bin

从数据库

登陆从数据库之后执行:

执行同步SQL语句
change master to master_host='127.0.0.1',master_user='rep1',master_password='rep1@12345',master_port=3308,master_log_file='mysql-bin.000001',master_log_pos=154;
正确执行后启动Slave同步进程
start slave;
主从同步检查
show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 127.0.0.1
                  Master_User: rep1
                  Master_Port: 3308
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: USER-20140819IT-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes


        其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常


参考:

http://blog.csdn.net/gavid0124/article/details/51692450

http://yw666.blog.51cto.com/11977292/1870808

http://studys.blog.51cto.com/9736817/1604034

--------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------------------------------

Mybatis + Spring 实现动态读写分离

数据库主从关系配置好之后就需要在程序中实现读写分离,主库写数据,从库读数据,来提高性能数据库的读写性能。

在Spring的配置文件中配置:

<bean id="readDataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${read.jdbc.url}"/>
        <property name="username" value="${read.jdbc.username}"/>
        <property name="password" value="${read.jdbc.password}"/>

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${druid.pool.size.init}"/>
        <property name="minIdle" value="${druid.pool.size.min}"/>
        <property name="maxActive" value="${druid.pool.size.max}"/>

        <!-- 配置监控统计拦截的filters,wall用于防止sql注入,stat用于统计分析 -->
        <property name="filters" value="wall,stat"/>
    </bean>

    <bean id="writeDataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${write.jdbc.url}"/>
        <property name="username" value="${write.jdbc.username}"/>
        <property name="password" value="${write.jdbc.password}"/>

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${druid.pool.size.init}"/>
        <property name="minIdle" value="${druid.pool.size.min}"/>
        <property name="maxActive" value="${druid.pool.size.max}"/>

        <!-- 配置监控统计拦截的filters,wall用于防止sql注入,stat用于统计分析 -->
        <property name="filters" value="wall,stat"/>
    </bean>

    <bean id="dynamicDataSource" class="com.distributed.system.common.datasource.DynamicDataSource">
        <property name="readDataSource" ref="readDataSource"/>
        <property name="writeDataSource" ref="writeDataSource"/>
    </bean>


    <!--3、配置SqlSessionFactory对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据库连接池-->
        <property name="dataSource" ref="dynamicDataSource"/>
        <!--配置mybatis全局配置文件:mybatis-config.xml-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--扫描entity包,使用别名,多个用;隔开-->
        <property name="typeAliasesPackage" value="com.distributed.system.api.xinquan.all.entity"/>
        <!--扫描sql配置文件:mapper需要的xml文件-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>


<!--配置事务管理器(mybatis采用的是JDBC的事务管理器)-->
    <bean id="transactionManager" class="com.distributed.system.common.datasource.DynamicDataSourceTransactionManager">
        <property name="dataSource" ref="dynamicDataSource"></property>
    </bean>

mybatis-config.xml文件中配置

<!-- 配置读写分离动态切换-->
    <plugins>
        <plugin interceptor="com.distributed.system.common.datasource.DynamicPlugin"></plugin>
    </plugins>

DynamicDataSourceTransactionManager,DynamicDataSource,DynamicPlugin 类的实现查看参考链接。

参考:

http://www.jianshu.com/p/2222257f96d3


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值