Mysql服务器主从相关

一主一从

  1. 准备两台服务器(以53为主,54为从)

  2. 启动主服务器binlog日志

    sql 复制代码
    vim /etc/my.cnf.d/mysql-server.cnf
    [mysqld]
    server-id=53   //指定主服务器的server-id为53
    log-bin=mysql53   //修改binlog日志命名
    :wq
    
    systemctl  restart mysqld  //重载mysqld服务,使得以上配置生效
  3. 创建"复制/同步用户"并授权

    sql 复制代码
        [root@mysql53 ~]# mysql
        mysql> create user repluser@"%" identified by "123qqq...A";
        Query OK, 0 rows affected (0.11 sec)
        mysql> grant replication slave on *.*  to repluser@"%";
        Query OK, 0 rows affected (0.09 sec)
  4. 修改从服务器的server-id为54,方便后续主从同步

    bash 复制代码
    [root@mysql54 ~]# vim /etc/my.cnf.d/mysql-server.cnf
    [mysqld]
    server-id=54
    :wq
    [root@mysql54 ~]# systemctl  restart mysqld
  5. 为从服务器指定主服务器的信息

    bash 复制代码
    [root@mysql54 ~]# mysql
    mysql> change master to  master_host="192.168.88.53" , master_user="repluser" , master_password="123qqq...A" ,master_log_file="mysql53.000001" , master_log_pos=667;
    // 其中的master_log_file和master_log_pos记录保持主服务器binlog日志记录
    Query OK, 0 rows affected, 8 warnings (0.34 sec)
    mysql> start slave ; //启动slave进程
    Query OK, 0 rows affected, 1 warning (0.04 sec)
    mysql> show slave status \G  //查看状态信息
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for source to send event
                      Master_Host: 192.168.88.53  //主服务器
                      Master_User: repluser        //指定的数据同步用户
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql53.000001   //主服务器binlog信息
              Read_Master_Log_Pos: 667
                   Relay_Log_File: mysql54-relay-bin.000002
                    Relay_Log_Pos: 322
            Relay_Master_Log_File: mysql53.000001
                 Slave_IO_Running: Yes   //IO线程
                Slave_SQL_Running: Yes   //SQL线程
  6. 测试
    给主服务器添加测试用户(plj)并授予权限

    bash 复制代码
        [root@mysql53 ~]# mysql
        mysql> create user plj@"%" identified by "123456";
        Query OK, 0 rows affected (0.14 sec)
        mysql> grant all on gamedb.* to plj@"%" ;
        Query OK, 0 rows affected (0.12 sec)
        mysql> create database gamedb;
    Query OK, 1 row affected (0.24 sec)
    mysql> create table gamedb.user(name char(10) , class char(3));
    Query OK, 0 rows affected (1.71 sec)
    mysql> insert into gamedb.user values ("yaya","nsd");
    Query OK, 1 row affected (0.14 sec)
    mysql> select  * from gamedb.user;
    +------+-------+
    | name | class |
    +------+-------+
    | yaya | nsd   |
    +------+-------+
    1 row in set (0.01 sec)
    mysql>

    从服务器查看数据

    bash 复制代码
        [root@mysql50 ~]# mysql -h192.168.88.54 -uplj -p123456 --e 'select  * from gamedb.user'
        +------+-------+
        | name | class |
        +------+-------+
        | yaya | nsd   |
        +------+-------+
        [root@mysql54 ~]# 

一主多从

创建思路同上类似,需要对新的从服务器指定主服务器的信息

主从从

创建思路同上类似,需要对新的从从服务器指定从服务器的信息

读写分离

原理

利用mycat中间件软件提供读写分离功能,一主一从结构实现数据同步/复制,客户端登录mycat服务,访问对应数据库,发送sql请求,交给主master服务器处理写入,收到sql读请求时,交给slave服务器读数据.

步骤

  1. 搭建一主一从结构(实现主从之间的数据复制/同步)
    如:56主57从58为mycat服务器

  2. 对58部署mycat服务并配置
    mycat软件包

    bash 复制代码
        //安装jdk
        [root@mycat58 upload]# yum -y install java-1.8.0-openjdk.x86_64
        //安装解压命令
        [root@mycat58 upload]# which unzip || yum -y  install unzip
        //安装mycat
        [root@mycat58 upload]# unzip mycat2-install-template-1.21.zip
        [root@mycat58 upload]# mv mycat /usr/local/
        //安装依赖
        [root@mycat58 upload]# cp mycat2-1.21-release-jar-with-dependencies.jar  /usr/local/mycat/lib/
        //修改权限
        [root@mycat58 upload]# chmod -R 777 /usr/local/mycat/ 
    
        //定义连接mycat服务使用的用户以及密码
        [root@mycat58 ~]# vim  /usr/local/mycat/conf/users/root.user.json
        {
                "dialect":"mysql",
                "ip":null,
                "password":"654321", 密码
                "transactionType":"proxy",
                "username":"mycat" 用户名
        }
        :wq
    
    //定义连接的数据库服务器
        [root@mycat58 ~]# vim  /usr/local/mycat/conf/datasources/prototypeDs.data
        {
                "dbType":"mysql",
                "idleTimeout":60000,
                "initSqls":[],
                "initSqlsGetConnection":true,
                "instanceType":"READ_WRITE",
                "maxCon":1000,
                "maxConnectTimeout":3000,
                "maxRetryCount":5,
                "minCon":1,
                "name":"prototypeDs",
                "password":"123456", 密码
                "type":"JDBC",
                "url":"jdbc:mysql://localhost:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", 连接本机的数据库服务
                "user":"plj", 用户名
                "weight":0
        }
        :wq
    
    //在mycat服务器上运行数据库服务
    [root@mycat58 ~]# yum -y  install  mysql-server  mysql  安装软件
    [root@mycat58 ~]# systemctl start mysqld 启动服务
    [root@mycat58 ~]# mysql  连接服务
    mysql> create user plj@"%" identified by "123456";  创建plj用户
    Query OK, 0 rows affected (0.05 sec)
    mysql> grant all on *.* to plj@"%" ;   授予权限
    Query OK, 0 rows affected (0.39 sec)
    mysql> exit 断开连接
    Bye
    
    //启动mycat服务
        [root@mycat58 ~]# /usr/local/mycat/bin/mycat help
        Usage: /usr/local/mycat/bin/mycat { console | start | stop | restart | status | dump }
        [root@mycat58 ~]# /usr/local/mycat/bin/mycat start
        Starting mycat2...
        //半分钟左右 能看到端口
        [root@mycat58 ~]# netstat  -utnlp  | grep 8066
        tcp6       0      0 :::8066  :::*       LISTEN      57015/java          
    
    //连接mycat服务
    [root@mycat58 ~]# mysql -h127.0.0.1 -P8066 -umycat -p654321
    mysql> show databases;
    +--------------------+
    | `Database`         |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    +--------------------+
    3 rows in set (0.11 sec)
    
    //在mysql服务器上配置读写分离
    //添加数据源
    MySQL> /*+ mycat:createdatasource{
    "name":"whost56", "url":"jdbc:mysql://192.168.88.56:3306","user":"plja","password":"123456"}*/;
    Query OK, 0 rows affected (0.25 sec)
    //添加mysql57数据库服务器
    Mysql>/*+ mycat:createdatasource{
    "name":"rhost57", "url":"jdbc:mysql://192.168.88.57:3306","user":"plja","password":"123456"}*/;
    //查看数据源
    mysql> /*+mycat:showDataSources{}*/ \G
    
    //添加的数据源以文件的形式保存在安装目录下
    [root@mycat58 conf]# ls /usr/local/mycat/conf/datasources/
    prototypeDs.datasource.json  rhost57.datasource.json  whost56.datasource.json
    
    //在主服务器添加plja用户
    [root@mysql56 ~]# mysql 
    mysql> create user plja@"%" identified by "123456";
    Query OK, 0 rows affected (0.06 sec)
    mysql> grant all on *.* to  plja@"%";
    Query OK, 0 rows affected (0.03 sec)
    mysql>exit
    [root@mysql56 ~]#
    //在slave服务器查看是否同步成功
    [root@mysql57 ~]# mysql -e 'select user , host from mysql.user where user="plja"'
    +------+------+
    | user | host |
    +------+------+
    | plja | %    |
    +------+------+
    
    //创建集群
    [root@mycat58 ~]# mysql -h127.0.0.1 -P8066 -umycat -p654321
    //创建集群
    mysql>/*!mycat:createcluster{
    "name":"rwcluster",
    "masters":["whost56"],
    "replicas":["rhost57"]
    }*/ ;
    Mysql>
    //查看集群信息
    mysql> /*+ mycat:showClusters{}*/ \G
    
    //创建的集群以文件的形式保存在目录下
    [root@mycat58 conf]# ls /usr/local/mycat/conf/clusters/
    prototype.cluster.json  rwcluster.cluster.json
    
    //修改master角色主机仅负责写访问
    [root@mycat58 ~]# vim /usr/local/mycat/conf/datasources/whost56.datasource.json
    {"instanceType":"WRITE", 仅负责写访问}
    
    //修改slave角色主机仅负责读访问
    [root@mycat58 ~]# vim /usr/local/mycat/conf/datasources/rhost57.datasource.json
    {
    instanceType":"READ",仅负责读访问
    }
    
    //修改读策略
    [root@mycat58 ~]# vim /usr/local/mycat/conf/clusters/rwcluster.cluster.json 
    { "readBalanceType":"BALANCE_ALL_READ",}  //获取集群中允许读的数据源
    
    //重启mycat服务
    [root@mycat58 ~]# /usr/local/mycat/bin/mycat restart
  3. 测试

    bash 复制代码
    //连接mycat服务,创建testdb测试数据库,并指定该数据库使用的集群
    [root@mycat58 ~]# mysql -h127.0.0.1 -P8066 -umycat -p654321 
    mysql> create database testdb;
    Query OK, 0 rows affected (0.30 sec)
    mysql> exit
    Bye
    //指定testdb库存储数据使用的集群
    [root@mycat58 ~]# vim /usr/local/mycat/conf/schemas/testdb.schema.json
    {
            "customTables":{},
            "globalTables":{},
            "normalProcedures":{},
            "normalTables":{},
            "schemaName":"testdb",
            "targetName":"rwcluster", 添加此行,之前创建的集群名rwcluster
            "shardingTables":{},
            "views":{}
    }
    :wq
    //重启mycat,使得上配置生效
    [root@mycat58 ~]# /usr/local/mycat/bin/mycat restart
    
    //连接mycat数据库服务,并在testdb插入数据,可见主从都有插入的数据
    //另外连接从服务器并插入数据,而主服务器没有该数据,mycat可以查看到该数据.
相关推荐
1024002426 分钟前
ubuntu系统中 jupyter Kernel 频繁崩溃原因
linux·运维·服务器
深圳市恒讯科技35 分钟前
使用站群服务器做SEO,如何避免被搜索引擎判定为“站群作弊”?
服务器·搜索引擎·php
LilySesy40 分钟前
ABAP+如果在join的时候需要表1的字段某几位等于表2的字段的某几位,需要怎么做?
服务器·前端·数据库·sap·abap·alv
大唐荣华1 小时前
工业制造领域的ODM、OEM、EMS、JDM、CM、OBM都是啥
运维·产品运营·制造
z10_141 小时前
海外住宅ip怎么区分干净程度以及怎么选择海外住宅ip
服务器·网络·网络协议·tcp/ip
R-G-B1 小时前
【P7】docker镜像发布和部署
运维·docker·容器·docker镜像·docker镜像发布和部署·镜像发布和部署·docker镜像发布
岸边的风2 小时前
FileRise 让文件管理变简单,搭配cpolar实现远程自由访问
服务器
ZzzZZzzzZZZzzzz…2 小时前
RHCSA---权限管理
linux·运维·权限管理·特殊权限·rhcsa·acl权限·权限掩码原理
Tinyundg2 小时前
WinSCP的简单使用与SFTP自动备份 .bat脚本
运维·服务器
啊吧怪不啊吧3 小时前
SQL之表的时间类内置函数详解
大数据·服务器·数据库·sql