MySql 主从复制与读写分离_lizhen1114的博客-程序员宅基地

技术标签: 数据库技术  

点击查看 : 安装mysql(Linux+windows)的详细教程

一:mysql的常用命令:

service iptables stop      ----关闭防火墙 建议操作之前先把防火墙关掉

service mysqld start   ----- 启动mysql

service mysqld stop    ----- 关闭mysql

mysql -u root –p      ----连接 mysql,然后输入密码

show databases;        ----查询所有数据库

use mysql;             ----使用哪个库

show tables;           ----展示这个库的所有的表

二:mysql主从复制的原理

mysql主从复制的原理:二进制sql执行文件


三:主从复制步骤

1.配置主节点信息

修改主(master)服务器

vi /etc/my.cnf         修改mysql的配置文件,新增以下内容

server_id=132         ###服务器id

log-bin=mysql-bin  ###开启日志文件

service mysqld stop 关闭mysql

service mysqld start 重启mysql

SHOW VARIABLES LIKE 'server_id'  sql语句查询服务器server_id 


2.设置从服务器的读写权限

修改从(slave)服务器

server_id=178      ----标记服务器的id

log-bin=mysql-bin  ----开启日志文件,就是一旦有insert,update,create,delete操作都会存放在这个日志当中
binlog_do_db=test  ----同步test库(我是对于这个有疑问的)

service mysqld stop  -----关闭mysql

service mysqld start -----重启mysql

SHOW VARIABLES LIKE 'server_id'  ------sql语句查询服务器server_id 

3.同步主服务器

主服务器给从服务器账号授权,如果通过Navicat Premium工具执行报错很可能是因为权限不够建议直接通过CRT通过命令执行   GRANT REPLICATION SLAVE ON *.* to 'lizhen'@'%' identified by 'admin';

通过Navicat Premium报错,然后我们通过CRT登录root账户然后执行

通过root账户执行sql命令

 

查看主服务器的状态,如图说明账户开通

4.同步从服务器

sql命令执行以下三句

stop slave     -----关闭同步

建立连接,master_host=主服务器ip,master_user=刚才主服务开通的用户名,master_password=刚开设置的密码,master_log_file=刚才查询出的文件,master_log_pos=从第几行开始读取文件,这个应该重新查询主服务器的状态,然后根据查询出来的行数进行填写.

change master to master_host='192.168.91.132',master_user='lizhen',

master_password='admin',master_log_file='mysql-bin.000002',master_log_pos=249;

start slave   ----开始同步

Slave_IO_Running: Yes    //此状态必须YES
Slave_SQL_Running: Yes     //此状态必须YES



查看效果



四:读写分离

1.首先需要安装mycat数据库中间件

中间件  链接:https://pan.baidu.com/s/11ODW0I6Q_TY1j5ejxEAr9A 密码:bkrp

2.读写分离原理分析,是mycat虚拟出来的数据库


3.创建数据库和表

在主服务器上创建一个库,然后创建两张表.

CREATE DATABASE IF NOT EXISTS weibo_simple;

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

-- Table structure for `t_users` 用户表
-- ------------------------------------
USE weibo_simple;


DROP TABLE IF EXISTS `t_users`;
CREATE TABLE `t_users` (
  `user_id` varchar(64) NOT NULL COMMENT '注册用户ID',
  `user_email` varchar(64) NOT NULL COMMENT '注册用户邮箱',
  `user_password` varchar(64) NOT NULL COMMENT '注册用户密码',
  `user_nikename` varchar(64) NOT NULL COMMENT '注册用户昵称',
  `user_creatime` datetime NOT NULL COMMENT '注册时间',
  `user_status` tinyint(1) NOT NULL COMMENT '验证状态  1:已验证  0:未验证',
  `user_deleteflag` tinyint(1) NOT NULL COMMENT '删除标记  1:已删除 0:未删除',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- -------------------------------------
-- Table structure for `t_message`微博表
-- -------------------------------------
DROP TABLE IF EXISTS `t_message`;
CREATE TABLE `t_message` (
  `messages_id` varchar(64) NOT NULL COMMENT '微博ID',
  `user_id` varchar(64) NOT NULL COMMENT '发表用户',
  `messages_info` varchar(255) DEFAULT NULL COMMENT '微博内容',
  `messages_time` datetime DEFAULT NULL COMMENT '发布时间',
  `messages_commentnum` int(12) DEFAULT NULL COMMENT '评论次数',
  `message_deleteflag` tinyint(1) NOT NULL COMMENT '删除标记 1:已删除 0:未删除',
  `message_viewnum` int(12) DEFAULT NULL COMMENT '被浏览量',
  PRIMARY KEY (`messages_id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `t_message_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_users` (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



4.修改mycat的server.xml配置文件

F:\1kaifa\Mycat-server-1.4-release-20151019230038-win\mycat\conf\server.xml

需要将其它的user删除,否则一会启动mycat的时候回报错.

<!-- 添加mycat的user -->

<user name="mycat">

   <!--密码 -->
    <property name="password">mycat</property>
    <property name="schemas">mycat</property>
    </user>

<!-- 添加mycat_red的user -->
   <user name="mycat_red">
    <!--密码 -->
    <property name="password">mycat_red</property>
    <property name="schemas">mycat</property>
<!--说明只能做读的操作 -->
<property name="readOnly">true</property>

    </user>


5.修改mycat的schema.xml配置文件

F:\1kaifa\Mycat-server-1.4-release-20151019230038-win\mycat\conf\schema.xml

完全替换就行

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
    <!-- 与server.xml中user的schemas名一致 -->
    <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">
        <table name="t_users" primaryKey="user_id" dataNode="dn1" rule="rule1"/>
        <table name="t_message" type="global" primaryKey="messages_id" dataNode="dn1" />
    </schema>
<dataNode name="dn1" dataHost="jdbchost" database="weibo_simple" />
   
    <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="1"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"
                slaveThreshold="100">
         <heartbeat>select user()</heartbeat>  
   <!-- 更换成自己的ip端口以及用户名和密码 -->
        <writeHost host="hostMaster" url="192.168.91.132:3306" user="lizhen" password="admin"/>
        <writeHost host="hostSlave" url="192.168.91.133:3306" user="lizhen" password="admin"/>
    </dataHost>
    

</mycat:schema>


6.配置策略文件rule.xml

F:\1kaifa\Mycat-server-1.4-release-20151019230038-win\mycat\conf\rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
- you may not use this file except in compliance with the License. - You 
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
- - Unless required by applicable law or agreed to in writing, software - 
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
License for the specific language governing permissions and - limitations 
under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/">
<tableRule name="rule1">
        <rule>
            <columns>user_id</columns>
            <algorithm>func1</algorithm>
        </rule>
    </tableRule>
    <function name="func1" class="org.opencloudb.route.function.AutoPartitionByLong">
  <property name="mapFile">autopartition-long.txt</property>
    </function>
</mycat:rule>


7.为了更好地定位错误,修改log4j.xml

F:\1kaifa\Mycat-server-1.4-release-20151019230038-win\mycat\conf\log4j.xml

<level value="debug" />     开启日志权限,这样一旦有什么错误我们就可以查看日志

双击startup_nowrap.bat开始启动

8.启动mycat



9.链接mycat


如图所示


测试从服务器是否能进行写的操作


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lizhen1114/article/details/79553595

智能推荐

VS code可以输入中文,但是输出不了中文_vs不能输出中文_登 风的博客-程序员宅基地

vscode用printf可以直接输出中文,但是用scanf从控制台接收中文写入后,再用printf输出会乱码掉或者直接就不显示

批量搜狗提交软件-让搜狗快速收录你的网站_搜狗提交工具_147SEO的博客-程序员宅基地

用批量搜狗提交工具实现快速收录!搜狗收录应该怎么做?最近有几个朋友咨询我,提交后搜狗不收录网站,是怎么回事?问:知道搜狗搜索引擎喜欢什么样的网站吗?答:知道(其实就那么几点)问:搜狗提交网站有用吗会收录吗?答:肯定有用!不然官方不会开发提交入口。网站收录是多维度的,下面我们一起来了解搜狗喜欢什么样的网站!搜狗推送实现搜狗收录一、网站布局指南【搜狗官方】每个网页都需要有合适的标题,网站首页标题建议使用站点名称或者站点代表的公司、机构名称;其余的内容页面,标题建议做成与正文.

Vuex使用教程(直接上代码)_vuex教程_半兽先生的博客-程序员宅基地

vuex是使用vue中必不可少的一部分,基于父子、兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决了我们这种问题,它相当于一个公共仓库,保存着所有组件都能共用的数据。 Vuex是单向数据流.........

JS变量对象_胖胖a的博客-程序员宅基地

经历了春招的摧残后,感觉自己综合知识有所欠缺,之前学的js也不扎实,所以决定戒骄戒躁,从现在起开始每天写点什么,有什么错误还请指出,博主虚心接受。在学习js执行上下文的时候看到的,之前都没听过,所以就去查阅一番,看过后觉得可以加深对js运行机制理解,在此总结记下。什么是变量对象?由执行上下文创建,用来存储执行上下文中定义的变量和函数声明。变量对象不能在JavaScript环境中访问,只有进...

随便推点

gdb+gdbserver方式进行ARM程序调试_yi412的博客-程序员宅基地

gdb+gdbserver方式进行ARM程序调试(收藏)gdb+gdbse总体介绍远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。就目前而言,嵌入式Linux

获取JDBC连接失败;嵌套异常是java.sql。SQLException异常:服务器时区价值”Oйu±e×¼e±¼的识别或代表多个时区。如果您想利用时区支持,您必须配置服务器或JDBC驱动程序(通_斑马森林m的博客-程序员宅基地

org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or rep...

【LiteOS】10-移植-NB模组_"#define cn_app_server \"119.3.250.80"_塞上苍鹰的博客-程序员宅基地

此笔记由个人整理华为IOT LiteOS开发实战营第四天一、NB-IoT模组BC35-GBC35-G是移远基于海思芯片研发的一款NB-Iot模组,支持全球频段B1、B3、B5、B20、B28,同时符合3Gpp R14标准物联网卡通过物联网卡和BG35-G模块连接NB网络实现上云二、具体步骤包含头文件#include &lt;oc_lwm2m_al.h&gt;#include &lt;link_endian.h&gt;ip地址和端口号#define cn_endpo.

Day920.结构化日志&业务审计日志 -SpringBoot与K8s云原生微服务实践_k8s springboot 日志_阿昌喜欢吃黄桃的博客-程序员宅基地

结构化日志(Structured Logging)是一种将日志信息组织为结构化数据的技术。传统的日志通常是一些文本信息,比如一行记录一个错误或者事件,这些信息往往是自由格式的。相比之下,结构化日志则采用一定的数据格式和模式,将日志信息组织为结构化的数据。结构化日志可以提供更多的信息,比如时间戳、请求 ID、日志级别、错误类型等等,并且还可以包含一些自定义字段。这些信息可以用于更好地理解应用程序的行为,从而更快地定位问题并进行故障排除。

推荐文章

热门文章

相关标签