mysql主从复制&读写分离学习笔记

一、主从复制架构的主要优点

1、解决web应用系统,数据库出现的性能瓶颈,采用数据库集群的方式来实现查询负载;一个系统中数据库的查询操作比更新操作要多得多,通过多台查询服务器将数据库的查询分担到不同的查询服务器上从而提高查询效率。
2、Mysql数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据查询操作,这样可以将更新操作和查询操作分担到不同的数据库上,从而提高了查询效率。

在这里插入图片描述

二、主从复制的架构搭建

启动两台mysql服务器一个为主节点(master)一个为从节点(slave),建议克隆一台虚拟机即可
开始前建议先分别关闭防火墙:systemctl stop firewalld

2.1. 修改mysql的配置文件

vim /etc/my.cnf

2.2. 分别在配置文件中加入如下配置

mysql(master)中
server-id=1                 //架构节点唯一标识 不允许重复
log-bin=mysql-bin           //给日志文件起一个确定的文件名前缀  
log-slave-updates           //当主结点日志变化时,从结点就发生更新 
slave-skip-errors=all       //跳过所有主结点日志错误日志,从节点同步正确即可    如执行错误的sql时  

mysql(slave) 中               (菊花链)
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

在这里插入图片描述
注意:两个机器的server-id不能一致

2.3. 执行重启mysql服务

systemctl restart mysqld

2.4. 重启mysql后执行如下命令检测配置是否生效

show variables like 'server_id';

注意:server_id与前面设置的对应即生效

主节点下
在这里插入图片描述
从结点下
在这里插入图片描述

2.5.在master结点执行如下命令

show master status;

在这里插入图片描述
注意
File字段为主节点详细日志文件
Position字段为从多少行开始写入

2.6. 在从节点登录数据库执行如下命令


change master to
             master_host='主结点ip地址',
             master_user='主节点数据库账号',
             master_password='主结点数据库密码',
             master_log_file='主节点详细日志文件',
             master_log_pos=从多少行开始写入;

在这里插入图片描述

如果此处执行时发现有错误,改正后继续执行即可(只要未执行开启从节点)

2.7. 在从节点登录数据库开启从结点

start slave //开启
stop slave //关闭

2.8. 查看从节点状态

show slave status\G;       /G为格式化后输出信息

注意:出现
Slave_IO_Running: Yes
Slave_SQL_Running:Yes
并且没有任何报错即为成功!

出现错误1
在这里插入图片描述
关闭防火墙

systemctl stop firewalld

出现错误2 (之所以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机所以auto.cnf文件中保存的UUID会出现重复)
在这里插入图片描述
分别在主节点和从节点数据库进行如下操作再分别关闭数据库服务

exit          //退出数据库
systemctl stop mysqld;    //关闭数据库服务
rm -rf /var/lib/mysql/auto.cnf     //删除auto.cnf
systemctl start mysqld;    //开启数据库服务  重启会自动生成auto.cnf

三、主从复制测试

在master中创建test数据库进行更新操作
在这里插入图片描述

在slave中也会自动创建test数据库进行更新操作完全同步
在这里插入图片描述

四、读写分离架构搭建

4.1. MyCat引言

基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。

MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设.

4.2. 下载mycat

http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2. 解压mycat

tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

4.3. 查看解压之后目录

[root@localhost mycat]# ls
	总用量 12
	drwxr-xr-x. 2 root root  190 1014 22:58 bin
	drwxrwxrwx. 2 root root    6 31 2016 catlet
	drwxrwxrwx. 4 root root 4096 1014 22:58 conf
	drwxr-xr-x. 2 root root 4096 1014 22:58 lib
	drwxrwxrwx. 2 root root    6 1028 2016 logs
	-rwxrwxrwx. 1 root root  217 1028 2016 version.txt

4.4. 配置mycat中conf下的配置schema.xml

<!--定义mycat的逻辑库  checkSQLschema:是否校验sql语法  sqlMaxLimit:sql最大长度限制 dataNode:代表真是映射的数据结点 -->
        <schema name="test_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema>
        <!-- 定义MyCat的数据节点 name:名字必须和dataNode值一致 dataHost:映射真实主机 database:映射真实的库 -->
        <dataNode name="testNode" dataHost="dtHost" database="test" />

        <!-- 定义数据主机 name:名字必须和dataHost保持一致 -->
        <dataHost name="dtHost" 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.1.10:3306" user="root" password="12345678">
        <!--从节点-->
        <readHost host="hostS1" url="192.168.1.9:3306" user="root" password="12345678" />
        </writeHost>
        </dataHost>

4.5. 配置登陆mycat的权限server.xml

<system>
    <!-- 这里配置的都是一些系统属性,可以自己查看mycat文-->
    <property name="defaultSqlParser">druidparser</property>
    <property name="charset">utf8mb4</property>
</system>

<user name="root">
    <property name="password">root</property>
    <property name="schemas">test_schema</property>
</user>

4.6. 启动mycat

mycat console

4.7.查看日志

tail -f ../logs/mycat.log

如有错误欢迎指出!


版权声明:本文为m0_45210394原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。