mysql主从同步、读写分离详解配置

前言:

     应公司产品研发需求,现将数据库主从搭建步骤做一下记录,下次就不用查资料啦

准备工作:

     <1>  Master服务器一台 IP:95

     <2>  Slave服务器一台 IP:80

     <3>  Mycat服务器一台 IP:79

共需三台服务器。

附:主从同步流程图

mysql主从同步、读写分离详解配置_第1张图片

一、958079服务器分别yum在线安装MySQL5.6版本

  1. yum list installed | grep mysql检查服务器是否自带MySQL
  2. yum -y remove mysql-libs.x86_64如果发现自带MySQL、执行此命令删除MySQL
  3. wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm安装MySQL79MB
  4. rpm -ivh mysql-community-release-el6-5.noarch.rpm编译MySQL源文件
  5. yum repolist all | grep mysql查看是否编译成功 如图1.1

mysql主从同步、读写分离详解配置_第2张图片

                                                                                    图1.1

  1. yum install mysql-community-server -y安装MySQL数据库
  2. service mysqld start启动mysql服务
  3. 由于mysql刚刚安装完的时候,mysqlroot用户的密码默认是空的,所以需要及时用mysqlroot用户登录(第一次回车键,不用输入密码),并修改密码
  4.  mysql -u root无密码登录
  5. use mysql;选择mysql数据库
  6. update user set password=password("root") where user='root';设置root用户密码
  7. flush privileges; 刷新设置
  8. exit;退出重新登录系统就会要求你输入密码;

三台服务器按照以上步骤安装即可

二、95Master)、80Slave)配置主从复制

     注意:以下配置及测试适用于新安装MySQL服务器,保证数据库一致

     进入95(master)服务器配置主库

     1.vim /etc/my.cnf进入MySQL配置文件

     2.如图2.1红色箭头所指为必要配置信息,绿色为辅助配置

    • 为MySQL服务唯一标识,主从id不可一致
    • 为启用二进制日志文件,文件名称不强求
    • 为指定二进制索引文件的路径和名称
    • 为MySQL服务指定默认编码
    • 主服务使用INNODB引擎确保事务一致性并提高写效率

                              mysql主从同步、读写分离详解配置_第3张图片

                                                                                      图2.1

     3.退出配置文件、重启MySQL服务(service mysqld restart)并进入MySQL检查主库是否配置成功

     4.MySQL脚本中输入SHOW MASTER STATUS; 回车查看状态如图2.2

                              mysql主从同步、读写分离详解配置_第4张图片

     5.exit;退出

     进入80(slave)服务器配置从库

     1.vim /etc/my.cnf进入MySQL配置文件

     2.如图2.3红色箭头所指为必要配置信息,绿色为辅助配置

    • 为MySQL服务唯一标识,主从id不可一致
    • 从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件
    • 为指定二进制索引文件的路径和名称
    • 为MySQL服务指定默认编码
    • 从服务器使用MyISAM引擎以提高读效率

                                    mysql主从同步、读写分离详解配置_第5张图片

                                                                                            图2.3

     3.退出配置文件、重启MySQL服务(service mysqld restart)并进入MySQL继续配置从库信息

     4.在从库下进入MySQL输入如图2.4用来关联主库

        内容如下:

change master to master_host='123.456.789.95',master_port=3306,master_user='repl',master_password='mysql',master_log_file='master-bin.000001',master_log_pos=0;

                                   

                                                                                          图2.4

        参数说明:

        master_host为主服务器完整IP地址

        master_port为主服务器MySQL端口号,默认3306

        master_user为从服务器访问主服务器MySQL用户(需要手动创建)

        master_password为从服务器访问主服务器MySQL密码(需要手动创建)

        master_log_file和master_log_pos为主服务器生成的得配置信息(主服务器输入SHOW MASTER STATUS;可查看)

       注:输入完以后别急着回车,因为此时主服务器MySQL下没有‘repl’这个用户

     5.切换至主服务器登陆MySQL输入如图2.5来创建用户并赋权限

                                          mysql主从同步、读写分离详解配置_第6张图片

                                                                                             图2.5

     6.刷新权限flush privileges;

     7.返回从服务器执行之前已经输入好的命令

     8.输入start slave;启动主从同步

     9.输入SHOW SLAVE STATUS\G查看主从是否配置成功,如图2.6

                                      mysql主从同步、读写分离详解配置_第7张图片

                                                                                           图2.6

至此,主从同步配置完成,主库(95)执行增删改操作,从库(80)会通过binary_log二进制日志自动同步,可以通过show master status和show slave status观察日志及位置变化。

三、79服务器安装配置Mycat中间件实现读写分离

       注:保证79服务器已经安装配置好MySQL数据库,因为mycat中间件依赖于MySQL数据库

      安装配置Mycat分布式数据库中间件

      1.百度云下载Mycathttps://pan.baidu.com/s/1aBRxkdavwZWiycQFWPAOg

      2.下载好的.tar.gz通过工具上传至/usr/local目录下

      3.tar -zxvf [mycat文件夹名称解压

      4.进入mycat目录下conf文件夹

      5.修改server.xml用户及系统配置文件如下

                                       mysql主从同步、读写分离详解配置_第8张图片

      6.修改schema.xml逻辑库配置文件如下

                                       mysql主从同步、读写分离详解配置_第9张图片

       1>shchema:

       name:需要和server.xml配置下的user标签内shchmas标签内容一致,表示为逻辑库名称

       dataNode:当shchema下无逻辑表配置时,必须加上节点属性及值

       2>dataNode:

       name:自定义节点名称,供schema标签使用

       dataHost:自定义名称,取自dataHost节点

       database:物理(实际)数据库名称

       3>dataHost:

        name:唯一标识dataHost标签,供上层使用

        maxCon:指定每个读写实例连接池的最大连接数

        minCon:指定每个读写实例连接池的最小(初始化)连接数

        balance:负载均衡类型

                        balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上

                        balance="1":全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡

                        balance="2":所有读操作都随机的在writeHost、readHost上分发

                        balance="3":所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力

         writeType:负载均衡类型

                        writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties

                        writeType="1",所有写操作都随机的发送到配置的 writeHost。1.5以后版本废弃不推荐

         4>heartbeat标签

         指明用于和后端数据库进行心跳检查的语句

         5>writeHost/readHost标签

         指定后端数据库的相关配置,用于实例化后端连接池,唯一不同的是,一个指定写实例,一个指定读实例。

         在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。

        另一方面,由于这个 writeHost 宕机,系统会自动的检测到,并切换到备用的 writeHost 上去。

host: 用于标识不同实例,一般 writeHost 我们使用*M1,readHost: 我们用*S1。

        url: 后端实例连接地址。Native:地址:端口 JDBC:jdbc的url

        password: 后端存储实例需要的密码

        user: 后端存储实例需要的用户名字

        weight: 权重 配置在 readhost 中作为读节点的权重

        usingDecrypt: 是否对密码加密,默认0

       7.配置好后,进入bin文件输入 ./mycat start启动mycat服务

         注:跟踪错误请把日志配置文件log4j2.xml记录级别调整为debug方便查看错误及读写分离是否配置成功

                              mysql主从同步、读写分离详解配置_第10张图片

        8.输入 mysql -u用户名 -p密码 -hmycat主机ip -Pmycat端口 -D数据库名称(可选)登录mycat客户端,也可以通过Navicat远程连接mycat,server.xml配置的只读和超级管理员均可登录,只是只读只读管理员无法进行DML操作

           例:mysql -uroot -proot -h127.0.0.1 -P8066 -Dmaptrack

           注:mycat8066为管理端口,9066为监控端口,可监控线程及客户端连接数等等。。。

四、登录8066端口通过查看日志进行读写分离测试

        1.插入一条信息,在95执行

           mysql主从同步、读写分离详解配置_第11张图片

        2.读取表数据,在80执行

           

        通过查看日志文件,主从复制、读写分离配置成功,为了提高效率,主库引擎使用InnoDB保证事务一致性,从库引擎使用MyISAM并设置索引,提高查询效率,最后,别忘了正式上线部署时日志配置文件log4j.xml日志级别重新恢复为info或者warn。

你可能感兴趣的:(linux,Java,分布式/集群)