1、安装mysql8.0

  • 首先需要在192.167.3.171上安装JDK。
  • 下载mysql安装包,https://dev.mysql.com/downloads/,找到以下页面下载。

    

    

    • 下载后放到linux系统中
    • 官网说需要先查看本机是否已安装mysql,删除mysql这里不介绍。
    • yum install libaio  yum install openssl,安装mysql所需的软件包:libaiohe openssl。
    • tar -xvf mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz,解压。
    • mv mysql-8.0.13-linux-glibc2.12-x86_64 /usr/local/mysql,将解压文件移动到local下。
    • groupadd mysql
    • useradd -r -g mysql -s /bin/false mysql
    • cd /usr/local/mysql
    • mkdir mysql-files
    • chown mysql:mysql mysql-files
    • chmod 750 mysql-files
    • bin/mysqld --initialize --user=mysql,初始化数据库,注意此处随机生成的密码,第一次登陆mysql的时候要使用。
    • bin/mysql_ssl_rsa_setup,安装ssl。
    • cp support-files/mysql.server /etc/init.d/mysql.server    将服务文件复制到开机启动目录,实现服务开机自启动。
    • bin/mysqld_safe --user=mysql &     开启服务,&是后台运行的意思,执行命令之后,终端会卡在一个位置,再按一下Enter即可。
    • 如果上面命令报错,什么log,pid文件未找到之类的,就需要执行下面方法。由于mysql服务启动时,会去读取/etc/my.cnf文件中的配置内容,我们打开文件来看,文件内容如下(我已修改):

    • 注意,[mysqld]或[mysqld_safe]下配置了socket路径时,会以此为准,而本地登陆mysql的时候,如果不用 -S指定mysql.sock文件位置,会报错,不能找到/tmp/mysql.sock。所以我们只在[client]里面配置。

       原来的内容地址就是启动mysql服务时报错的路径,我们可以知道,文件不存在问题导致启动失败。这时,就需要新建文件,并设置文件权限了。我这里修改了红框内的路径,具体命令如下:  

      • cd /usr/local/mysql/mysql-files
      • mkdir log ;  mkdir pid
      • touch log/mysql.log ; touch pid/mysql.pid
      • cd /usr/local/mysql
      • chown -R mysql:mysql mysql-files
      • chmod -R 750 mysql-files
      • 然后再次执行:bin/mysqld_safe --user=mysql &
    • bin/mysql -uroot -p   登陆mysql,回车后粘贴之前初始密码。
    • ALTER USER 'root'@'localhost' IDENTIFIED BY 'ibethfy;
    • flush privileges
    • 执行完成后,我又想使用navicat登陆,那好,试试呗,navicat连接直接报找不到服务,2003 cannot。。。。。,行嘛,排除原因,总结如下:

                  1、建立供外部连接的mysql用户。

        • mysql -uroot -pibethfy
        • create user 'ibethfy'@'%' identified by 'ibethfy';
        • grant all on *.* to 'ibethfy'@'%';     注意,mysql8的grant语句和之前版本有差别。
        • flush privileges;

    2、防火墙关了,我用的centos。

        • firewall-cmd --state          查看防火墙状态,发现时running;
        • systemctl stop firewalld.service     关闭防火墙
        • firewall-cmd --state         再次查看,发现not running;

    然后再用navicat连接,好嘛,又报错,caching-sha2-password,看来一下,应该是mysql的加密策略变了,navicat版本没跟上呗,那行,执行下面命令,然后再连接,没问题了!  

        • mysql -uroot -pibethfy
        • alter user 'ibethfy'@'%' identified by 'ibethfy' password expire never;
        • alter user 'ibethfy'@'%' identified with mysql_native_password by 'ibethfy';
        • flush privileges;
    • ps -ef |grep mysql,可以看到mysql服务有两个,mysqld_safe和mysqld。说明启动成功了。
    • 大家在linux装mysql8.0的时候,如果按照步骤来,还出现问题,就分析一下,主要导致的一些原因就是权限问题和文件问题,依次解决一下再试试。

2、mysql主从安装

  • 分别按以上方发安装两个mysql服务,分别为192.167.3.171(主),192.167.3.172(从)。
  • 配置主服务
    • my.conf 文件修改。添加log-bin与server-id,具体配置和上面一致。
    • 重启mysql,service mysql restart;也可用mysqladmin -uroot -pibethfy shutdown;mysqld_safe --user=mysql &;如果没有找到服务,直接用ps -ef|grep mysql,找到对应进程,kill -9强行终止后(不建议),使用mysqld_safe --user=mysql &  重启。
    • 登陆mysql,赋予外部连接的ibethfy用户权限并刷新。grant replication slave on *.* to 'ibethfy'@'%';         flush privileges;
    • 查看主服务信息,从服务配置时需要用到,show master status;

  • 修改从mysql服务配置

    • 修改my.cnf,vi /etc/my.cnf

    • 配置从服务,先登陆后,执行  CHANGE MASTER TO MASTER_HOST='192.167.3.171', MASTER_USER='ibethfy', MASTER_PASSWORD=ibethfy',MASTER_LOG_FILE='binlog.000010',  MASTER_LOG_POS=1179;
    • start slave;
    • show slave status\G;查看从服务状态,如果内容中有Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it);错误,需要执行下面语句:
      • show variables like 'server_id';可以看见server_id=1,这里与主服务id相同,则执行,set global server_id=2;与my.cnf内容相同即可。
      • 重新启动start slave;
      • 如果得到以下信息,则提示主从复制配置成功。
      • 如果启动slave报错,什么文件未删除之类的,可以执行reset slave,然后重新执行上面步骤。

    • 现在可以测试了,在主服务建一个database,从服务可以看见,代表配置成功。

3、springboot+mybatis+shardingsphere搭建主从分离

  • 使用idea创建springboot工程
  • pom.xml依赖jar配置,具体配置如下
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SharingJDBCDemo</name>
    <description>Demo project for Spring Boot</description> <properties>
    <java.version>1.8</java.version>
    </properties> <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- mybatis 依赖jar包-->
    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
    </dependency> <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    <!--shardingsphere的springboot依赖jar-->
    <dependency>
    <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>3.0.0</version>
    </dependency>
    <!--mybatis的自动生成器配置-->
    <dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.5</version>
    </dependency>
    </dependencies> <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.5</version>
    <configuration>
    <!--配置文件的位置-->
    <configurationFile>src/main/resources/generateMybatis.xml
    </configurationFile>
    <overwrite>true</overwrite>
    <verbose>true</verbose>
    </configuration>
    </plugin>
    </plugins>
    </build> </project>
  • application.yml配置,具体如下
    server:
    port: 8888
    spring:
    application:
    name: SharingJdbc
    mybatis:
    type-aliases-package: com.example.demo.entity
    mapper-locations: classpath:mapper/*.xml
    sharding:
    jdbc:
    datasource:
    names: master1,slave1
    master1:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://192.167.3.171:3306/ibethfy?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true
    username: ibethfy
    password: ibethfy
    maxPoolSize: 20
    slave1:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://192.167.3.172:3306/ibethfy?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true
    username: ibethfy
    password: ibethfy
    maxPoolSize: 20
    config:
    masterslave:
    load-balance-algorithm-type: round_robin
    name: db_m1_s1
    master-data-source-name: master1
    slave-data-source-names: slave1
    sharding:
    props:
    sql:
    show: true
  • mybatis自动生成器配置
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration>
    <!--配置连接器jar地址-->
    <classPathEntry
    location="C:\Users\c17763\.m2\repository\mysql\mysql-connector-java\8.0.13\mysql-connector-java-8.0.13.jar"/>
    <context id="my" targetRuntime="MyBatis3" defaultModelType="flat">
    <commentGenerator>
    <property name="suppressDate" value="false"/>
    <property name="suppressAllComments" value="true"/>
    </commentGenerator>
    <!--连接驱动配置-->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
    connectionURL="jdbc:mysql://192.167.3.171:3306/ibethfy?useUnicode=true" userId="ibethfy"
    password="ibethfy"/>
    <!--生成的entity实体类路径-->
    <javaModelGenerator targetPackage="com.example.demo.entity"
    targetProject="E:\test\SharingJDBCDemo\src\main\java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    </javaModelGenerator> <!--mapper.xml文件路径-->
    <sqlMapGenerator targetPackage="\resources\mapper"
    targetProject="E:\test\SharingJDBCDemo\src\main">
    <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator> <!--mapper接口类生成的路径-->
    <javaClientGenerator targetPackage="com.example.demo.mapper"
    targetProject="E:\test\SharingJDBCDemo\src\main\java" type="XMLMAPPER">
    <property name="enableSubPackages" value="true"/>
    </javaClientGenerator> <!--<table tableName="T_FEE_AGTBILL" domainObjectName="FeeAgentBill"
    enableCountByExample="false" enableUpdateByExample="false"
    enableDeleteByExample="false" enableSelectByExample="false"
    selectByExampleQueryId="false"/>-->
    <!--需要生成的table,tableName是表名,domainObjectName是生成的实体类名-->
    <table tableName="people" domainObjectName="People"
    enableCountByExample="false" enableUpdateByExample="false"
    enableDeleteByExample="false" enableSelectByExample="false"
    selectByExampleQueryId="false">
    </table> </context>
    </generatorConfiguration>
  • 项目demo结构图,比较简单,只实现功能

  

  • 自动生成器执行方法,打开maven project,点击运行,具体参考下图

  

  • SharingJdbcDemoApplication,配置mapper扫描路径,也可直接在mapper类上增加@Mapper.
    package com.example.demo;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
    @MapperScan("com.example.demo.mapper")
    public class SharingJdbcDemoApplication { public static void main(String[] args) {
    SpringApplication.run(SharingJdbcDemoApplication.class, args);
    } }
  • DemoController类
    package com.example.demo;
    
            import com.example.demo.entity.People;
    import com.example.demo.mapper.PeopleMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
    public class DemoController { @Autowired
    PeopleMapper peopleMapper; @RequestMapping("/{id}")
    public People getPeople(@PathVariable(value = "id") int id)
    {
    return peopleMapper.selectByPrimaryKey(id);
    } @RequestMapping("/insert/{name}")
    public void insert(@PathVariable(value = "name") String name)
    {
    People p = new People();
    p.setName(name);
    peopleMapper.insert(p);
    }
    }
  • 启动工程后,即可测试读写分离。关于如何查看读写分离效果,可以开启mysql的查询日志,开启方法如下
    •  登陆mysql,执行语句查询日志记录开启情况:show variables like "%general%";
    • +------------------+------------------------------+
      | Variable_name    | Value                        |
      +------------------+------------------------------+
      | general_log      | OFF                          |
      | general_log_file | /var/lib/mysql/localhost.log |
      +------------------+------------------------------+
    • set global general_log = "ON";开启日志记录,可以在/var/lib/mysql中查看日志。
  • 测试:访问http://localhost:8888/1,查询数据,在日志中,可以看到,172从服务日志记录查询语句,171没有日志。
  • 测试:访问http://localhost:8888/insert/ibethfy,插入语句,可以看到171主服务有日志,172从服务没有日志。
  • 注意:io.shardingsphere用3.0.0版本即可,3.1.0引入maven会报关联错误。
  • 之前想使用mycat实现读写分离等,结果发现mycat只支持mysql5版本,其余版本未在其支持列表,并且mycat很久没更新啦!我自己试了很久都没搭建好mycat的环境,哎!
  • 好啦,基本的都搞完了,之后实施shardingsphere的分库分表!

Mysql8.0主从复制搭建,shardingsphere+springboot+mybatis读写分离的更多相关文章

  1. MySQL8.0.12 安装及配置、读写分离,主从复制

    一.安装 1.从网上下载MySQL8.0.12版本,下载地址:https://dev.mysql.com/downloads/mysql/ 2. 下载完成后解压 我解压的路径是:D:\Java\mys ...

  2. SpringBoot Mybatis 读写分离配置(山东数漫江湖)

    为什么需要读写分离 当项目越来越大和并发越来大的情况下,单个数据库服务器的压力肯定也是越来越大,最终演变成数据库成为性能的瓶颈,而且当数据越来越多时,查询也更加耗费时间,当然数据库数据过大时,可以采用 ...

  3. Sharding+SpringBoot+Mybatis 读写分离

    基于Sharding JDBC的读写分离 1.引入pom.xml <dependencies> <!-- mybatis --> <dependency> < ...

  4. 搭建基于springboot轻量级读写分离开发框架

    何为读写分离 读写分离是指对资源的修改和读取进行分离,能解决很多数据库瓶颈,以及代码混乱难以维护等相关的问题,使系统有更好的扩展性,维护性和可用性. 一般会分三个步骤来实现: 一. 主从数据库搭建 信 ...

  5. mysql8.0.主从复制搭建

    搭建主从数据库 一.准备两台以上对的数据库 数据库1(主服务器):192.168.2.2 数据库2(从服务器):192.168.2.4           1.1      配置主服务器 .在 /et ...

  6. 搭建基于MySQL的读写分离工具Amoeba

    搭建基于MySQL的读写分离工具Amoeba: Amoeba工具是实现MySQL数据库读写分离的一个工具,前提是基于MySQL主从复制来实现的: 实验环境(虚拟机): 主机 角色 10.10.10.2 ...

  7. MySQL主从复制配置指导及PHP读写分离源码分析

    开发环境 master环境:ubuntu16.04.5LTS/i5/8G/500G/64位/mysql5.7.23/php7/apache2 slave环境:kvm虚拟机/ubuntu14.04.01 ...

  8. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  9. Mycat搭建负载均衡,读写分离的Mysql集群

    Mycat搭建负载均衡,读写分离的Mysql集群 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.Mycat-server-1.6.7.4-te ...

随机推荐

  1. .WrongArgumentException: Malformed database URL, failed to parse the connection string near ';characterEncoding=UTF-8&;serverTimezone=Asia/Shanghai'.)

    连接mysql库报的异常信息: org.springframework.transaction.CannotCreateTransactionException: Could not open JDB ...

  2. ubuntu 中安装jenkins,基于docker运行jenkins

     本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中,至于docker如何安装,本文不再描述,大家可以上网查询下,如何安装docker,下面先放上一个使用jenkin ...

  3. [Linux] 安装grafana并且添加influxdb监控

    安装grafana,官网提供了ubuntu的安装包,直接进行安装 wget https://dl.grafana.com/oss/release/grafana_6.5.1_amd64.deb dpk ...

  4. github.com/pkg/errors库学习

    为了理解go error,进一步学习github.com/pkg/errors作的训练. http://www.shtml.net/article/content/tok/48369/id/37733 ...

  5. Java之Random类

    什么是Random类 此类的实例用于生成伪随机数,使用此类中的方法能够得到一个随机数. Random使用步骤 查看类 java.util.Random :该类需要 import导入使后使用. 查看构造 ...

  6. asp.net的原理

    Asp.net的作业流是指什么?很多人都不是很了解,也不知道是用来干什么的有怎样运用,其实能够从简略的基础了解. 作业流(Workflow),便是“事务进程的部分或全体在核算机使用环境下的主动化”(i ...

  7. C语言程序设计100例之(12):Eratosthenes筛法求质数

    例12   Eratosthenes筛法求质数 问题描述 Eratosthenes筛法的基本思想是:把某范围内的自然数从小到大依次排列好.宣布1不是质数,把它去掉:然后从余下的数中取出最小的数,宣布它 ...

  8. RMAN详细教程(三):备份脚本的组件和注释

    RMAN详细教程(一):基本命令代码 RMAN详细教程(二):备份.检查.维护.恢复 RMAN详细教程(三):备份脚本的组件和注释 RMAN详细教程(四):备份脚本实战操作 一.基本组件: 1.Ser ...

  9. IT兄弟连 HTML5教程 HTML5的基本语法 了解HTML及运行原理

    了解HTML HTML(HyperText Marked Language)即超文本标记语言,是一种用来制作超文本文档的简单标记语言.我们在浏览网页时看到的一些丰富的影像.文字.图片等内容都是通过HT ...

  10. 【转】linux下使用sqlplus执行包含语句块的sql文件,运行时会不断显示行号,而在plsqldev中能执行

    一.数据库:Oracle数据库 二.sql文件内容: --创建函数 CREATE OR REPLACE function fun_createuid1 return varchar2 is Resul ...