Mysql主从复制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、Mysql主从复制解决的问题

二、主从复制的原理

三、主从复制的配置

配置主库

配置从库

三、测试

 四、经历过的错误

总结


前言

提示:这里可以添加本文要记录的大概内容:

今天偶然刷到了一篇文章,看到了mysql主从复制,刚好最近在学springboot开发,主从复制可以用的上,然后试着搞了一下,也是历经磨难,记录一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Mysql主从复制解决的问题

        我们都知道,当一个程序用户查询访问或者对数据库进行增删改查的时候,如果后台开发只应用了一台数据库服务器,但是访问的人数足够多的,会导致数据库服务器的访问压力过大,导致数据出现缓慢甚至死机的情况,而Mysq主从复制就是为了解决这样的一个问题,通过设置一个主数据库和从库的方式,同步更新数据,分摊数据库的压力。

二、主从复制的原理

主从复制是一个异步复制的过程,主要是从库发送更新事件到从库,从库读取更新的数据,然后更新内容与主库保持一致。

大致过程如下:

                        1,每当主库更新的时候,更新的事件日志都会存储在二进制文件,称为binlog,当数据库启动,所有的数据库更新记录都会被保存到binlog中。

                        2,当从库连接主库后,主库会创建一个线程,将binlog发送到从库中并对线程上锁,直到该事件被读取完成,锁才会释放。

                        3,当从库启动slave后,从库会创建一个I/O线程连接到主库并请求主库发送binlog里面的更新记录到从库上,IO线程读取binlog中的记录并更新到本地文件中。

                        4、从库开始进行复制,创建一个SQL线程,根据读取到的文件进行更新。

三、主从复制的配置

配置主库

系统:Ubuntu(从库,IP地址192.168.23.129),kali(主库,IP地址 192.168.23.137)

1、配置/etc/mysql/my.cnf文件

设置log-bin日志,设置唯一的server-id,注意从库的server-id要比主库的大,注意要配置bind_address,否则默认是127.0.0.1,连接数据库会不成功。 

 2、开启kali数据库的外连

GRANT ALL PRIVILEGES ON  *.*  TO 'root'@'%' IDENTIFIED BY  'root'  WITH GRANT OPTION;         赋予root用户所有权限,并且允许所有主机外连。

flush privileges; 执行权限。

记住配置完后要重启数据库。

 3、配置Master

create user xiaoming identified by 'Root@root';

grant replication slave on *.* to xiaoming;

创建一个用户xiaoming,密码为Root@root,并赋予建立复制的用户权限。

show master status; 查看master状态后

 配置从库

1、修改/etc/mysql/my.cnf文件

重启服务

2、 进入从库命令行

change master to master_host='192.168.23.137',master_user='xiaoming',master_password='Root@root',master_log_file='mysql-bin.000003',master_log_pos=1010;  设置连接主库
start slave;启动slave

 Slave_IO_Running和Slave_SQL_Running都为Yes代表成功

假如出现以下错误:

 那是因为节点已经存在了,执行以下重置即可

  

三、测试

1、在主库新建立数据库tests,并建表test

 2、进入从库,查看是否同步

同步成功。 

 四、经历过的错误

假如出现连接不成功的情况,可以看看防火墙,3306端口是否被过滤了,进行开启。

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

开始虽然都出现了yes,但是好像主库更新,从库并没有,远程连接数据还出现了1055错误,是因为对select字段做了限制,只能是group by或者聚合。

set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';


总结

出了很多错,开始各种不行,就百度乱弄一通,结果弄成了,弄这个主要了为了后面开发进行读写分离。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M03-Aiwin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值