Mysql分库分表记录

自古美人都是妖i 提交于 2019-12-02 17:48:03

    1、下载安装mysql(在5.6上做的验证);

        Linux上默认安装目录:/usr/share/mysql,安装后可以通过mysql -u root -p登录mysql:

    

    2、配置master

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

        b) 修改my.cnf配置:

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

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

         log-bin-index       = master-bin.index

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

         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.%';查询用户具有的权限

    3、配置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;语句测试能否连接到主服务        器上的数据库

    4、测试

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

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

            


        5、扩展HA-MYSQL

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

 

   6、基于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;
    }
}


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!