Mysql分库分表记录

    一、下载安装mysql(在5.6上作的验证);
java

        Linux上默认安装目录:/usr/share/mysql,安装后能够经过mysql -u root -p登陆mysql:mysql

    

    二、配置master
sql

        a) 将安装后的mysql目录下的my.cnf拷贝到Linux的配置环境/etc/目录下。
数据库

        b) 修改my.cnf配置:网络

         server-id               = 1    #主机标示,整数ide

         log-bin                 = master-bin.log   #slave复制日志文件测试

         log-bin-index       = master-bin.indexthis

         binlog-do-db         =db_test   #须要同步到slave的数据库spa

         binlog-ignore-db    =mysql   #不须要同步的数据库日志

         #innodb_flush_log_at_trx_commit=1

         #sync_binlog=1

        配置完后重启mysql后会在数据库目录/var/lib/mysql生成相应的日志文件:

        

        c) 经过show master status语句查看master信息

        

            红框中就是slave中须要复制的文件以及开始同步数据的起始位置。

        d)在master上建立用户备份的用户并赋值REPLICATION SLAVE权限,用于slave链接master

            GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.63.%' IDENTIFIED BY 'slave';

             --可用show grants for 'backup'@'192.168.63.%';查询用户具备的权限

    三、配置slave环境

        a) 同理经过修改从库中的my.cnf配置:

            port=3307

            server-id = 3

            log-error=slave_log.err

            log-bin =slave_log.log

            report-host = 192.168.63.176  #master地址

            report-port = 3306   #master端口

            report-user = slave   #链接master用户

            report-password = slave #链接master用户密码

            binlog-do-db =db_test

            replicate-do-db =db_test

            binlog-ignore-db=mysql

            binlog-ignore-db=test

            binlog-ignore-db=information_schema

            binlog-ignore-db=performance_schema

            replicate-ignore-db=test

            replicate-ignore-db=mysql

            replicate-ignore-db=information_schema

            replicate-ignore-db=performance_schema

        b) 查看slave的相关状态

            经过配置slave链接master主机的report-host、user好像没用,后面经过sql语句从新赋值链接到master的相关配           置(执行sql以前须要stop slave):

             change master to master_host='192.168.63.176',master_user='slave',

                -> master_password='slave',

                -> master_log_file='master_log.000006',

                -> master_log_pos=120;

        执行以上语句后会在mysql安装目录下生成master.info文件,文件中包含了链接到master的地址、用户名、密码、复制      文件以及复制的起始位置等。

        c) 查看slave的状态

            经过show slave status查看slave链接状态:

            

        备注:这次是经过Linux做为master,本机上的msyql做为slave测试的;刚开始配置是网络有问题一直slave链接master      失败,最后把防火墙关闭后就能连上了。能够经过mysql -uslave -pslave -h192.168.63.176;语句测试可否链接到主服务        器上的数据库

    四、测试

        a) 在master上建立分区表user,安装userid作hash分区:

        b) 查看slave库可见已同步了master中刚建立的user表

            


        五、扩展HA-MYSQL

            经过Keepalived构建高可用的mysql服务;配置mysql互为主从,而后利用Keepalived监控功能,对挂掉的数据库服           务动态切换。

 

   六、基于Spring的AbstractRoutingDataSource抽象类实现动态路由数据源(也能够基于其余第三方包实现ds的路由)

           
public class MultipleRoutingDataSource extends AbstractRoutingDataSource {
    /**
     * 写数据库服务
     */
    private Object writeDataSource;
    /**
     * 读数据库服务
     */
    private List<Object> readDataSources;
    private int counter = 0;
    public void setReadDataSources(List<Object> readDataSources) {
        this.readDataSources = readDataSources;
    }
    public void setWriteDataSource(Object writeDataSource) {
        super.setDefaultTargetDataSource(writeDataSource);
        this.writeDataSource = writeDataSource;
    }
    @Override
    protected Object determineCurrentLookupKey() {
        String routing = RoutingDataSourceUtil.getRouting();
        if(DSEnum.READ_ONLY.getCode().equals(routing)) {
            synchronized (this) {
                int index = counter % readDataSources.size();
                counter++;
                return readDataSources.get(index);
            }
        }
        return writeDataSource;
    }
}
相关文章
相关标签/搜索