zoukankan      html  css  js  c++  java
  • MySQL主从复制读写分离

    安装多个MySQL服务

    相关资源:

    https://snailclimb.gitee.io/javaguide/#/?id=读写分离amp分库分表

    https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/usage/read-write-splitting/

    参考:https://blog.csdn.net/qq_33101675/article/details/114396476

    采用解压版安装第二个MySQL服务:https://downloads.mysql.com/archives/community/

    注意两个MySQL不要安装在同一路径下,

    自建my.ini文件(端口另起):

    [mysqld]
    # 设置服务端端口
    port=3307
    # 设置mysql的安装目录
    basedir=F:devMySQL_slavemysql-8.0.23-winx64-slave
    # 设置mysql数据库的存放目录
    datadir=F:devMySQL_slavemysql-8.0.23-winx64-slavedata
    # 允许最大连接数
    max_connections=100
    # 允许连接失败的次数
    max_connect_errors=10
    # 服务端使用的字符集默认为utf8mb4
    character-set-server=UTF8MB4
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 默认使用“mysql_native_password”插件认证
    default_authentication_plugin=mysql_native_password
    
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=UTF8MB4
    
    [client]
    # 设置mysql客户端连接服务端时默认使用的端口
    port=3307
    # 设置客户端默认使用的字符集
    default-character-set=UTF8MB4
    

    管理员打开cmd,进入bin,

    初始化mysql:

    F:devMySQL_slavemysql-8.0.23-winx64-slavein>mysqld --defaults-file=F:devMySQL_slavemysql-8.0.23-winx64-slavemy.ini --initialize --console
    2021-09-26T12:48:34.244070Z 0 [System] [MY-013169] [Server] F:devMySQL_slavemysql-8.0.23-winx64-slaveinmysqld.exe (mysqld 8.0.23) initializing of server in progress as process 34396
    2021-09-26T12:48:34.256488Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
    2021-09-26T12:48:34.828093Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
    2021-09-26T12:48:35.998369Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: aF2v!6i0sjLC
    

    记录密码:aF2v!6i0sjLC

    初始化mysql服务:

    F:devMySQL_slavemysql-8.0.23-winx64-slavein>mysqld install MySQL_slave --defaults-file="F:devMySQL_slavemysql-8.0.23-winx64-slavemy.ini"
    Service successfully installed.
    

    启动服务:

    F:devMySQL_slavemysql-8.0.23-winx64-slavein>net start MySQL_slave
    MySQL_slave 服务正在启动 .
    MySQL_slave 服务已经启动成功。
    

    使用navicat建立连接,使用到初始密码,会自动提示改密。

    最终:一主一从。

    MySQL主从复制

    MySQL-master

    my.ini配置:

    [mysqld]
    # 主从复制的数据库的名字
    binlog-do-db=t_ms
    # 忽略mysql数据库
    binlog-ignore-db=mysql
    # 开启二进制日志
    log-bin=mysql-bin
    # 设置server-id 一般取IP最后一段
    server-id=1
    

    重启mysql

    为从服务器创建账号、授权、刷新权限、查看master状态:

    CREATE USER 'dj' @'127.0.0.1' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE ON *.* TO 'dj' @'127.0.0.1';
    FLUSH PRIVILEGES;
    SHOW MASTER STATUS;
    
    File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
    mysql-bin.000001 156

    MySQL-slave

    my.ini:

    [mysqld]
    # 设置server-id,必须唯一
    server-id=2
    

    重启服务

    执行同步语句:

    CHANGE MASTER TO MASTER_HOST = '127.0.0.1',
    MASTER_USER = 'dj',
    MASTER_PASSWORD = '123456',
    MASTER_LOG_FILE = 'mysql-bin.000001',
    MASTER_LOG_POS = 156;
    

    启动/停止slave同步进程、查看slave同步状态:

    START SLAVE;STOP SLAVE;SHOW SLAVE STATUS;
    
    • Slave_IO_Running: Yes
    • Slave_SQL_Running: Yes

    在主库新添一张表,insert、update、delete数据,看看从表;

    然后从表新增数据,看看主表。

    主从复制完成。

    MySQL-DDL

    库:db_ms

    /*
     Navicat Premium Data Transfer
    
     Source Server         : local_mysql
     Source Server Type    : MySQL
     Source Server Version : 80023
     Source Host           : localhost:3306
     Source Schema         : db_ms
    
     Target Server Type    : MySQL
     Target Server Version : 80023
     File Encoding         : 65001
    
     Date: 29/09/2021 12:01:26
    */
    
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for dept
    -- ----------------------------
    DROP TABLE IF EXISTS `dept`;
    CREATE TABLE `dept`  (
      `DEPTNO` int NOT NULL,
      `DNAME` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      `LOC` varchar(13) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`DEPTNO`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of dept
    -- ----------------------------
    INSERT INTO `dept` VALUES (10, 'ACCOUNTING', 'NEW YORK');
    INSERT INTO `dept` VALUES (20, 'RESEARCH', 'DALLAS');
    INSERT INTO `dept` VALUES (30, 'SALES', 'CHICAGO');
    INSERT INTO `dept` VALUES (40, 'OPERATIONS', 'BOSTON');
    
    -- ----------------------------
    -- Table structure for emp
    -- ----------------------------
    DROP TABLE IF EXISTS `emp`;
    CREATE TABLE `emp`  (
      `EMPNO` int NOT NULL,
      `ENAME` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      `JOB` varchar(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      `MGR` int NULL DEFAULT NULL,
      `HIREDATE` date NULL DEFAULT NULL,
      `SAL` double(7, 2) NULL DEFAULT NULL,
      `COMM` double(7, 2) NULL DEFAULT NULL,
      `DEPTNO` int NULL DEFAULT NULL,
      PRIMARY KEY (`EMPNO`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of emp
    -- ----------------------------
    INSERT INTO `emp` VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800.00, NULL, 20);
    INSERT INTO `emp` VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600.00, 300.00, 30);
    INSERT INTO `emp` VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250.00, 500.00, 30);
    INSERT INTO `emp` VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975.00, NULL, 20);
    INSERT INTO `emp` VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250.00, 1400.00, 30);
    INSERT INTO `emp` VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850.00, NULL, 30);
    INSERT INTO `emp` VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450.00, NULL, 10);
    INSERT INTO `emp` VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000.00, NULL, 20);
    INSERT INTO `emp` VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000.00, NULL, 10);
    INSERT INTO `emp` VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500.00, 0.00, 30);
    INSERT INTO `emp` VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100.00, NULL, 20);
    INSERT INTO `emp` VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950.00, NULL, 30);
    INSERT INTO `emp` VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000.00, NULL, 20);
    INSERT INTO `emp` VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300.00, NULL, 10);
    
    -- ----------------------------
    -- Table structure for salgrade
    -- ----------------------------
    DROP TABLE IF EXISTS `salgrade`;
    CREATE TABLE `salgrade`  (
      `GRADE` int NULL DEFAULT NULL,
      `LOSAL` int NULL DEFAULT NULL,
      `HISAL` int NULL DEFAULT NULL
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of salgrade
    -- ----------------------------
    INSERT INTO `salgrade` VALUES (1, 700, 1200);
    INSERT INTO `salgrade` VALUES (2, 1201, 1400);
    INSERT INTO `salgrade` VALUES (3, 1401, 2000);
    INSERT INTO `salgrade` VALUES (4, 2001, 3000);
    INSERT INTO `salgrade` VALUES (5, 3001, 9999);
    
    -- ----------------------------
    -- Table structure for t_val
    -- ----------------------------
    DROP TABLE IF EXISTS `t_val`;
    CREATE TABLE `t_val`  (
      `t_id` int UNSIGNED NOT NULL AUTO_INCREMENT,
      `t_value` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`t_id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of t_val
    -- ----------------------------
    INSERT INTO `t_val` VALUES (1, 'value');
    INSERT INTO `t_val` VALUES (2, '主库再插入一条数据后,再看看从库。');
    INSERT INTO `t_val` VALUES (3, '233311');
    INSERT INTO `t_val` VALUES (4, 'value不为blank');
    
    SET FOREIGN_KEY_CHECKS = 1;
    
    

    读写分离源码

    gitee:https://gitee.com/DENG-JIAAA/read_write_splitting

    DJOSIMON
  • 相关阅读:
    connect oralce
    monolog php
    js继承
    前后端交互-一些关于接口设计的思考
    zoom:1;
    H5的新特性及部分API详解
    软文参考
    seo细节
    seo每天要做的事情
    seo(每天要干的哪些事)
  • 原文地址:https://www.cnblogs.com/DJOSIMON/p/15340307.html
Copyright © 2011-2022 走看看