mysql 主从同步-读写分离

主从同步与读写分离测试 

 

一、  实验环境(主从同步)

Master                   centos 7.3              192.168.138.13

Slave                     centos 7.3               192.168.138.14

二、在master操作

  1. 安装并配置文件

[root@localhost ~]# yum install mariadb-server -y

[root@localhost ~]# cat /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server-id=1                  //必须唯一

log-bin=mysql-bin          //开启binlog日志

character-set-server=utf8         //设置字符集

        2.启动mysql

[root@localhost ~]# systemctl start mariadb

        3. 授权root用户

MariaDB [(none)]> grant all on *.* to root@'localhost' identified by '123456';

MariaDB [(none)]> grant all on *.* to root@'%' identified by '123456';

         4. 刷新权限表

MariaDB [(none)]> flush privileges

5.查看master状态

MariaDB [(none)]> show master status;

+------------------+----------+--------------+------------------+

| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |    521 |                   |                  |

+------------------+----------+--------------+------------------+

           

注意:如果主库中已存在数据,则需要备份拷到从库保持数据一致性

1.锁定数据表,避免在备份过程中,表被更新

mysql>LOCK TABLES tbl_name READ;

为表增加一个写锁定:

mysql>LOCK TABLES tbl_name WRITE;

解锁 : mysql>UNLOCK TABLES;

2.备份数据

方法一

Mysqldump  -uroot  -p –B db1 –T tb1  | gzip  > /mysqlbackup/tb1.sql.gz

方法二

直接备份datadir=/var/lib/mysql

                                                                                        

三、       在slave上操作

  1. 安装并配置/etc/my,cnf

[root@localhost ~]# yum install mariadb-server -y

[root@localhost ~]# cat /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server-id=1                  //必须唯一

character-set-server=utf8         //设置字符集

        2. 启动mysql

[root@localhost ~]# systemctl start mariadb

3. 配置同步参数

MariaDB [(none)]> change master to

 master_host='192.168.138.13',

master_user='root',

master_password='123456',

master_port=3306,

master_log_file='mysql-bin.000003',

master_log_pos=521;

4. 启动主从同步进程

          MariaDB [(none)]> start slave;

        5. 检查状态

MariaDB [(none)]> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.138.13

                  Master_User: root

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000003

          Read_Master_Log_Pos: 521

               Relay_Log_File: mariadb-relay-bin.000002

                Relay_Log_Pos: 529

        Relay_Master_Log_File: mysql-bin.000003

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

看到两个yes说明配置成功

四、 测试

         1.在slave上查看

        MariaDB [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

+--------------------+

3 rows in set (0.00 sec)

2. 在master创建数据库

MariaDB [(none)]> create database testdb1;

Query OK, 1 row affected (0.00 sec)

3.  在slave查看

MariaDB [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| testdb1            |

+--------------------+

4 rows in set (0.00 sec)

-------------------------------------------------------------------------------------------------------------------------------------------- 

 

读写分离

一、环境准备(在主从同步基础上)

        Master       centos7.3                   192.168.138.13

        Slave         centos7.3                   192.168.138.14

       Mycat         centos7.3                    192.168.138.15

       管理端        centos7.3                    192.168.138.16

二、安装并配置mycat

      1.部署jdk环境

         MyCAT用Java开发,需要有JAVA运行环境,mycat依赖jdk1.7的环境

         1)上传jdk
              [root@localhost tools]# ll jdk-7u45-linux-x64.tar.gz

         2)安装jdk
              [root@localhost tools]# mkdir /usr/java
              [root@localhost tools]# tar xf jdk-7u45-linux-x64.tar.gz -C /usr/java/

        3)设置环境变量
             [root@localhost tools]# vim /etc/profile.d/java.sh
             内容如下:
               export JAVA_HOME=/usr/java/jdk1.7.0_45/
               export PATH=$JAVA_HOME/bin:$PATH
               export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

           使环境变量当前终端生效
            [root@localhost tools]# source /etc/profile.d/java.sh

      4)测试
           [root@localhost tools]# java -version
             java version "1.7.0_45"
            Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
            Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

    2.安装mycat

      1)下载mycat源码包

          [root@localhost ~]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6

     2)解压

          [root@localhost ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz  -C /usr/local

         解压内容

          [root@localhost ~]# ll /usr/local/mycat/

total 12

drwxr-xr-x 2 root root  190 Dec  3 16:17 bin

drwxrwxrwx 2 root root    6 Mar  1  2016 catlet

drwxrwxrwx 4 root root 4096 Dec  3 16:17 conf

drwxr-xr-x 2 root root 4096 Dec  3 16:17 lib

drwxrwxrwx 2 root root    6 Oct 28  2016 logs

-rwxrwxrwx 1 root root  217 Oct 28  2016 version.txt

     3)添加环境变量

[root@localhost local]# cat  /etc/profile.d/mycat.sh

export PATH=$PATH:/usr/local/mycat/bin

[root@localhost tools]# source /etc/profile.d/mycat.sh

 

   3.读写分离配置

[root@localhost local]# cd /usr/local/mycat/

[root@localhost mycat]# ls

bin  catlet  conf  lib  logs  version.txt

[root@localhost conf]# cp schema.xml{,.bak}

[root@localhost conf]# vim schema.xml

主要修改:

1)balance="1" writeType="0" switchType="1"

balance
1、balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehostle .

2、balance=1 全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1->S1,M2->S2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。

3、balance=2 所有读操作都随机的在readhost和writehost上分

writeType
负载均衡类型,目前的取值有3种:
1、writeType="0", 所有写操作发送到配置的第一个writeHost。
2、writeType="1",所有写操作都随机的发送到配置的writeHost。
3、writeType="2",不执行写操作。

switchType
1、switchType=-1 表示不自动切换
2、switchType=1 默认值,自动切换
3、switchType=2 基于MySQL 主从同步的状态决定是否切换

 

2)在<schema 最后加上dataNode="dn1"

修改<writeHost

修改<readHost

          注:根据自己实际情况,其他无用的就可删除

配置好的文件如下:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.138.13:3306" user="root"
password="123456">
<readHost host="hostR1" url="192.168.138.14:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>

4、创建管理用户

1)主库上对mycat用户授权如下:

用户:mycat 密码:123456 端口:3306

权限:insert,delete,update,select

命令:grant insert,delete,update,select on TD_OA.* to mycat@'192.168.138.%' identified by '123456';
      flush privileges;

2)从库上mycat用户授权如下:
用户:mycat 密码:123456 端口:3306/3307
权限: select

grant select on TD_OA.* to mycat@'192.168.138.%' identified by '123456';
flush privileges;

测试环境可以直接使用root用户,授予所有权限:
mysql> grant all on *.* to root@'192.168.95.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to root@'localhost' identified by '123456';

 

  1. 修改mycat配置文件

默认配置即可

①这里配置的是可以连接主库的两个用户

用户:root 密码:123456 给予此用户TESTDB数据库增删改查的权限。

用户:user 密码:user 给予此用户TESTDB数据库读的权限。

②这里的TESTDB,不一定是你数据库上的真实库名,可以任意指定,只要接下来和schema.xml的配置文件的库名统一即可。

 

1. 在客户端连接mysql主库服务器:

1)先安装mysql

2)# mysql -uroot –p123456 -h192.168.138.15 -P8066 -DTESTDB

 

      8.主从同步读写分离测试

 

1)管理端创建表

[root@localhost ~]# mysql -uroot –p123456 -h192.168.138.16 -P8066 -DTESTDB
CREATE TABLE test1 (id int(10),name varchar(10),address varchar(20) DEFAULT NULL);

手动停止主从同步:(stop slave)

注意:工作中不能这么干

2)读功能测试:

分别在主从库插入数据:
master: insert into test1 values(1,'test1','master');

slave1: insert into test1 values(2,'test1','slave1');

3)管理端验证
负载均衡:
mysql> select * from test1;
+------+-------+---------+
| id | name | address |
+------+-------+---------+
| 2 | test1 | slave1 |
+------+-------+---------+
1 row in set (0.00 sec)

4)写功能:
管理端再次插入数据
mysql> insert into test1 values(3,'test1','write');
Query OK, 1 row affected (0.00 sec)

在master查看

MariaDB [db1]> select * from test1;

+------+------+---------+

| id   | name | address |

+------+------+---------+

|    1 | test | master  |

|    3 | test | write   |

+------+------+---------+

2 rows in set (0.00 sec)

 

在Slave查看
MariaDB [db1]> select * from test1;

+------+------+---------+

| id   | name | address |

+------+------+---------+

|    2 | test | slave   |

+------+------+---------+

3 rows in set (0.00 sec)
#注意:测试完毕启动主从同步功能。

 

 

 

 

 

转载于:https://www.cnblogs.com/sxchengchen/p/7966046.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

coherence安装_Oracle Coherence:分布式数据管理

coherence安装本文介绍如何使用Oracle Coherence提供分布式&#xff08;分区&#xff09;数据管理。 在下面的示例应用程序中&#xff0c;创建了一个名为OTV的新集群&#xff0c;并且在该集群的两个成员之间分配了一个名为user-map的缓存对象。 二手技术&#xff1a; JDK 1.6.…

AtomicReference 原子引用

原创 2016年03月04日 13:35:2076381.简介 赋值操作不是线程安全的。若想不用锁来实现&#xff0c;可以用AtomicReference<V>这个类&#xff0c;实现对象引用的原子更新。 使用场景&#xff1a;一个线程使用student对象&#xff0c;另一个线程负责定时读表&#xff0c;更新…

MongoDB基础使用

5.MongoDB基础使用 5.1.常用的命令&#xff08;重点&#xff09; > Help 查看帮助 显示数据库列表 > show dbs 创建数据库 > use dbname 如果数据库不存在&#xff0c;则创建数据库dbname&#xff0c;否则切换到指定数据库dbname。创建的数据库并不在数据库的列表中…

使用一些可选的将字符串配置属性转换为其他类型

有一天&#xff0c;您遇到一些代码&#xff0c;并认为这很漂亮&#xff0c;为什么我没有想到呢&#xff1f; 因此&#xff0c;我的长期同事Mark Warner在使用方法引用处理从String进行转换的标准名称/值存储模式方面有一个不错的选择。 int size store.getProperty("cac…

AttributeError: module 're' has no attribute 'sub'

文件不能同名&#xff08;import re re.py)转载于:https://www.cnblogs.com/realmonkeykingsun/p/7992613.html

django-uwsgi配置

一、安装uwsgi uwsgi是一个应用服务器&#xff0c;非静态文件的网络请求就必须通过他完成&#xff0c;他也可以充当静态文件服务器&#xff0c;但不是它的强项。 注意&#xff1a;uwsgi必须安装在系统级别的Python环境中&#xff0c;不要安装到虚拟环境中。 uwsgi是使用pytho…

C++堆和栈详解(转)

一、预备知识—程序的内存分配 一个由C/C编译的程序占用的内存分为以下几个部分 1、栈区&#xff08;stack&#xff09;— 由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区&#xf…

JavaFX技巧来节省内存! 属性和可观察物的阴影场

在 JavaFX的世界中&#xff0c; Properties API允许UI开发人员将值绑定到UI控件。 这种功能非常容易&#xff0c;但是当对象模型经常使用属性时&#xff0c;应用程序可能会很快耗尽内存。 我通常会编写两个单独的对象&#xff0c;例如pojo类和表示模型对象。 此技术通常在基于S…

nginx部署与小程序配置

nginx部署与小程序配置说明 1、安装nginx $ sudo apt-get update $ sudo apt-get install nginx2、配置https: 查看&#xff1a; https://help.aliyun.com/knowledge_detail/95491.html?spm5176.2020520154.cas.64.7dd7Quq8Quq8ap mkdir /opt/cert把证书上传到这个文件夹…

Maven实战:Pom.xml详解

什么是pom? pom作为项目对象模型。通过xml表示maven项目&#xff0c;使用pom.xml来实现。主要描述了项目&#xff1a;包括配置文件&#xff1b;开发者需要遵循的规则&#xff0c;缺陷管理系统&#xff0c;组织和licenses&#xff0c;项目的url&#xff0c;项目的依赖性&…

Liunx 命令大全

1.ifconfig 用于配置和显示Linux内核中网络接口的网络参数 2.type 用来显示指定命令的类型&#xff0c;判断给出的指令是内部 令还是外部指令 3.man Linux下的帮助指令&#xff0c;通过man指令可以查看Linux 中的指令帮助、配置文件帮助和编程帮助等信息 4.help 用于显示 shell…

如何在Hibernate Search 5.5.2 / Apache Lucene 5.4.x中处理停用词?

停用词&#xff0c;例如[“ a”&#xff0c;“ an”&#xff0c;“ and”&#xff0c;“ are”&#xff0c;“ as”&#xff0c;“ at”&#xff0c;“ be”&#xff0c;“ but”&#xff0c;“ by”&#xff0c;“ for”&#xff0c;“ if”&#xff0c;“在”&#xff0c;“成…

windows路径操作API函数

路径截断与合并函数 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠“\” PathAddBackslash 在路径最后加上反斜杠“\” PathRemoveBlanks 去除路径前后的空格 PathAddExtension 在文件路径后面加上扩展名 PathRemoveExtensio…

docker安装问题

1、卸载docker重装 将所有含docker的文件找出来 find / -name ‘docker’ 或cd到根目录后搜索&#xff1a; find -name ‘docker 删除搜索的文件或目录&#xff1a; rm -rf … 删除全部的docker有关文件命令 rm -rf $(find -name ‘docker’) 2、安装docker 安装依赖 su…

【BZOJ1814】Ural 1519 Formula 1 插头DP

【BZOJ1814】Ural 1519 Formula 1 题意&#xff1a;一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数。(n,m<12) 题解&#xff1a;插头DP板子题&#xff0c;刷板子&#xff0c;附带题解链接。 如何存放状态呢&#xff1f;可以采用hash&#xff0c;…

docker-compose安装问题

&#xff08;一&#xff09;docker-compose安装超时 1、设置一个timeout pip install --default-timeout100 docker-compos2、下载到本地 docker_compose-1.27.0-py2.py3-none-any.whl首先去下载&#xff1a;https://pypi.org/project/docker-compose/#files 然后用xftp上传…

java更改包名称_更改Java包名称如何改变我的系统架构

java更改包名称即使只是少量更改角度&#xff0c;也可能对您如何使用系统产生深远影响。 假设您正在用Java编写Web应用程序。 在系统中&#xff0c;您处理订单&#xff0c;客户和产品。 作为一个Web应用程序&#xff0c;您的类包括诸如Controller&#xff0c;PersonRepository&…

linux系统界面光标不见了---木有了

直接在界面输入命令 echo -e “\033[?25l” 隐藏光标 echo -e “\033[?25h” 显示光标

Java----前端验证之验证码额实现

验证码是常用的登录验证方式之一,最大的作用就是保证安全,验证码的生成在java中实现的方式有很多种,比如后台生成传输到前端页面,在前台直接生成进行验证,下面写一个最简单实现验证码验证登录的例子. 生成验证码: 验证码验证逻辑: From表单登录: 没错,就这么的简单.在scripts生…

使用Spring Boot隔离集成测试和模拟依赖项

集成测试可能很慢且不可靠&#xff0c;因为它们依赖于系统中过多的组件。 在某种程度上&#xff0c;这是不可避免的&#xff1a;这里的集成测试是为了验证系统的每个部分如何与其他内部或外部组件一起玩。 但是&#xff0c;我们可以通过仅分解所需的依赖关系而不是整个系统来改…