mysql主从怎么实现 mysql80 主从

如何配置两个MySQL数据库之间的主从同步功能?IP的设置:A主机 IP:10.10.0.119mysql主从怎么实现;Mask:255.255.0.0;B主机 IP:10.10.8.112;Mask:255.255.0.0
在IP设置完成以后mysql主从怎么实现,需要确定两主机的防火墙确实已经关闭 。可以使用命令service iptables status查看防火墙状态 。如果防火墙状态 。
为仍在运行 。使用service iptables stop来停用防火墙 。如果想启动关闭防火墙mysql主从怎么实现 , 可以使用setup命令来禁用或定制 。最终以两台主机可以相互ping通为佳 。
3.2 配置A主(master) B从(slave)模式;3.2.1 配置A 为master 。
增加一个用户同步使用的帐号:
GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;
GRANTREPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’ 。
赋予10.10.8.112也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以 。
增加一个数据库作为同步数据库:create database test;
创建一个表结构:create table mytest (username varchar(20),password varchar(20));
修改配置文件:修改A的/etc/my.cnf文件 。
在my.cnf配置项中加入下面配置:
server-id = 1 #Server标识
log-bin
binlog-do-db=test #指定需要日志的数据库
重起数据库服务:
service mysqld restart
查看server-id:
show variable like ‘server_id’ 。
MySQL主从原理系统优化:假如现在用户反映系统太卡
1:如果是请求太多,判断web服务器压力过大,增加前端的web服务器,做负载均衡
2:如果请求静态页面不卡了,但是请求动态数据还是卡,说明MySQL处理的请求太多了,在应用层增加缓存
3:如果请求激增 , 还是有大量的查询到MySQL,想办法处理MySQL ,在一个应用中,大量的消耗MySQL的还是查询,就可以把MySQL拆开 , 就像公路分道 公交车道 , 小轿车道,把MySQL做成主从
1,就算MYSQL拆成了多个,也必须分出主和从,所有的写操作都必须要在主MYSQL 上完成;
2,所有的从MYSQL的数据都来自于(同步于)主MYSQL;
3,既然涉及到同步,那一定有延迟;有延迟,就一定可能在读的时候产生脏数据;所以,能够在从MYSQL上进行的读操作,一定对实时性和脏数据有一定容忍度的数据;比如,登陆日志,后台报表,首页统计信息来源;文章;资讯;SNS消息;
4,[注意]:在MYSQL主从时,如果一个业务(service中的一个方法)中,如果既有R操作,又有W操作,因为W操作一定要在主MYSQL上,所以在一个事务中所有的数据来源都只能来自于一个MYSQL
1,要完成主从同步,就必须让在Master上执行的所有的DML和DDL能够正确的在Salve上再执行一遍;MYSQL选择使用文件来记录SQL;
2,要完成主从同步,第一个事情就是把在主服务器上的bin-log(二进制文件)打开,bin-log文件就可以记录在MYSQL上执行的所有的DML DDL TCL;
3,MYSQL使用被动注册的方式来让从MYSQL请求同步主MYSQL的binlog;原因:被动请求的方式,主的MYSQL不需要知道有哪些从的MYSQL,我额外添加/去掉从MYSQL服务器,对主MYSQL服务器的正常运行没有任何影响;
4,第二步,从MYSQL后台一个线程发送一个请求,到主服务器请求更新数据;最重要的数据(我这次请求,请求你bin-log的哪一行数据之后的数据)
5,第三步,主MYSQL后台一个线程接收到从MYSQL发送的请求,然后读取bin-log文件中指定的内容,并放在从MYSQL的请求响应中;
6,第四步,从MYSQL的请求带回同步的数据,然后写在从MYSQL中的relay-log(重做日志)中;relay-log中记录的就是从主MYSQL中请求回来的哪些SQL数据;
7,第五步,从MYSQL后台一个线程专门用于从relay-log中读取同步回来的SQL,并写入到从MYSQL中,完成同步;
8,MYSQL的主从同步是经过高度优化的,性能非常高;
如何在一台windows主机上实现MySQL的主从复制1、首先要在本地建立两个mysql服务,指定不同的端口 。我这里一个主(3306),一个从(3307) 。
2、然后修改主配置文件:
[mysqld]
server-id = 1
binlog-do-db=test #要同步的数据库
#binlog-ignore-db=mysql#不同步的数据库,如果指定了binlog-do-db这里应该可以不用指定的
log-bin=mysql-bin #要生成的二进制日记文件名称
修改从配置文件:
[mysqld]
server-id = 2
log-bin= mysql-bin
replicate-do-db=test
3、在主库添加一个用户 repl 并指定replication权限
create user 'repl'@'127.0.0.1' identified by 'asdf';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1'; -- --这里我指定数据库(test.*)时报错,而指定全库(*.*)时会成功 。
4、保持主从mysql的test数据库初始状态一致 。
一般是先将所有的表加读锁,然后copy磁盘上的数据库文件夹 。我这里直接停止服务,然后将数据文件拷贝过去 。
5、在主数据库里面运行show master status;记下file和position字段对应的参数 。
mysql show master status;
------------------ ---------- -------------- ------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
------------------ ---------- -------------- ------------------
| mysql-bin.000001 | 107 | test | |
------------------ ---------- -------------- ------------------
1 row in set (0.00 sec)
6、在从库设置它的master:
mysql change master to master_host='127.0.0.1',master_port=3306,master_user='repl',master_password='asdf',master_log_file='mysql-bin.000001',master_log_pos=107;
Query OK, 0 rows affected (0.19 sec)
这里的master_log_file和master_log_pos对应刚才show master status记下的参数 。
7、在从库开启从数据库复制功能 。
slave start;
mysql slave start;
Query OK, 0 rows affected (0.00 sec)
在从库可以通过show slave status来查看一些参数 。
8. 此时在主库创建表或插入数据,在从库就会很快也能看到了 。
-- 主库
mysql create table tianyc_02(b int);
Query OK, 0 rows affected (0.16 sec)
mysql insert into tianyc_02 values(2013);
Query OK, 1 row affected (0.13 sec)
-- 从库
mysql show tables;
----------------
| Tables_in_test |
----------------
| tianyc_01 |
| tianyc_02 |
----------------
2 rows in set (0.00 sec)
mysql select * from tianyc_02;
------
| b |
------
| 2013 |
------
1 row in set (0.00 sec)同理 , 可以搭建第二、第三个从节点 。
mysql主从库与读写分离一.mysql主从库与读写分离的实现理论
二.mysql配置
1.准备两台服务器安装mysql(也可以在一台中装两个mysql修改端口号避免冲突)
2.分别连接mysql
3.配置mysql
1.配置主库 monster
打开binary log
2.配置从库
主库授权
账号repl后面的是从库的ip地址mysql是账号repl的密码
刷新
后面master_log_pos=0 表示从零开始同步 master_log_file 是上面SHOW MASTER STATUS 下面的file文件
在从库中开启主从跟踪
查看从库状态
从库中终止主从同步 stop slave
查看 my.cnf 文件 把 server -id=1 的字段删除保留server-id=2 修改后保存 重启mysql 重新连接开启主从同步start slave
查看从库状态 发现没有错误到此主从同步配置已经完成.
安全最重要!MySQL配置主从复制,主主复制为了保障数据的安全与稳定性,我们常用数据库的主从复制与主主复制来实现 。主从复制为从机实时拷贝一份主机的数据,当主机有数据变化时,从机的数据会跟着变,当从机数据有变化时 , 主机数据不变;同样地,主主复制就是,多个主机之间,只要有一个主机的数据变化了,其它主机数据也会跟着变化 。
添加以下内容
如果你是使用我之前那种方式启动的MySQL,那么你只需要去你相关联的宿主机的配置文件夹里面去建立一个 my.cnf 然后写入上面的类容就好了 。
比如:我的启动命令如下(不应该换行的,这里为了方便查看,我给它分行了)
那么我只需要在 /docker/mysql_master/conf 这个目录下创建 my.cnf 文件就好了 。
这个命令是需要在容器里面执行的
docker重启mysql会关闭容器,我们需要重启容器 。
确保在主服务器上 skip_networking 选项处于 OFF 关闭状态, 这是默认值 。如果是启用的,则从站无法与主站通信 , 并且复制失败 。
我的命令如下
在从服务器配置连接到主服务器的相关信息 (在容器里面的mysql执行)
上面代码的xxxxx你需要换成你的IP,docker 查看容器 IP 的命令如下:
启动的那个从服务器的线程
测试的话 , 你可以在主服务器里面 , 创建一个数据库 , 发现从服务器里面也有了,就成功了 。
如果你还想要一个从服务器 , 那么你只需要按照上面配置从服务器再配置一个就行了 , 新建的从服务器,会自动保存主服务器之前的数据 。(测试结果) 如果你上面的主从复制搞定了,那么这个主主复制就很简单了 。我们把上面的从服务器也改成主服务器
1)、修改上面的从服务器的my.cnf文件,和主服务器的一样(注意这个server-id不能一样)然后重启服务器 2)、在从服务器里面创建一个复制用户创建命令一样(这里修改一下用户名可以改为 repl2) 3)、在之前的主服务器里面运行下面这个代码
上面主要是教你怎么搭建一个MySQL集群 , 但是这里面还有很多其它的问题 。也是我在学习过程中思考的问题,可能有的小伙伴上来看到文章长篇大论的看不下去,只想去实现这样一直集群功能,所以我就把问题写在下面了 。
1)、MySQL的replication和pxc MySQL的集群方案有replication和pxc两种,上面是基于replication实现的 。
replication: 异步复制 , 速度快,无法保证数据的一致性 。pxc: 同步复制,速度慢,多个集群之间是事务提交的数据一致性强 。
2)、MySQL的replication数据同步的原理 我们在配置的时候开启了它的二进制日志,每次操作数据库的时候都会更新到这个日志里面去 。主从通过同步这个日志来保证数据的一致性 。
3)、可否不同步全部的数据 可以配置 , 同步哪些数据库,甚至是哪些表 。
4)、怎么关闭和开始同步
5)、我就我的理解画出了,主从、主从从、主主、复制的图 。
往期推荐:
利用Docker仅花1分钟时间安装好MySQL服务
Linux下MySQL 5.7的离线与在线安装(图文)
Linux下安装MySQL8.0(收藏?。?
MySQL 主从,5 分钟带你掌握MySQL 主从一直是面试常客,里面的知识点虽然基础,但是能回答全的同学不多 。
比如楼哥之前面试小米 , 就被问到过主从复制的原理 , 以及主从延迟的解决方案,因为回答的非常不错 , 给面试官留下非常好的印象 。你之前面试,有遇到过哪些 MySQL 主从的问题呢?
所谓 MySQL 主从,就是建立两个完全一样的数据库 , 一个是主库,一个是从库,主库对外提供读写的操作,从库对外提供读的操作,下面是一主一从模式:
对于数据库单机部署,在 4 核 8G 的机器上运行 MySQL 5.7 时,大概可以支撑 500 的 TPS 和 10000 的 QPS,当遇到一些活动时,查询流量骤然,就需要进行主从分离 。
大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级 , 所以我们可以通过一主多从的方式,主库只负责写入和部分核心逻辑的查询,多个从库只负责查询,提升查询性能,降低主库压力 。
MySQL 主从还能做到服务高可用,当主库宕机时,从库可以切成主库,保证服务的高可用,然后主库也可以做数据的容灾备份 。
整体场景总结如下:
MySQL 的主从复制是依赖于 binlog 的 , 也就是记录 MySQL 上的所有变化并以二进制形式保存在磁盘上二进制日志文件 。
主从复制就是将 binlog 中的数据从主库传输到从库上 , 一般这个过程是异步的,即主库上的操作不会等待 binlog 同步的完成 。
详细流程如下:
当主库和从库数据同步时,突然中断怎么办?因为主库与从库之间维持了一个长链接,主库内部有一个线程 , 专门服务于从库的这个长链接的 。
对于下面的情况,假如主库执行如下 SQL,其中 a 和 create_time 都是索引:
我们知道,数据选择了 a 索引和选择 create_time 索引,最后 limit 1 出来的数据一般是不一样的 。
所以就会存在这种情况:在 binlog = statement 格式时,主库在执行这条 SQL 时,使用的是索引 a,而从库在执行这条 SQL 时,使用了索引 create_time,最后主从数据不一致了 。
那么我们改如何解决呢?
可以把 binlog 格式修改为 row,row 格式的 binlog 日志记录的不是 SQL 原文 , 而是两个 event:Table_map 和 Delete_rows 。
Table_map event 说明要操作的表,Delete_rows event用于定义要删除的行为,记录删除的具体行数 。row 格式的 binlog 记录的就是要删除的主键 ID 信息,因此不会出现主从不一致的问题 。
但是如果 SQL 删除 10 万行数据,使用 row 格式就会很占空间的,10 万条数据都在 binlog 里面,写 binlog 的时候也很耗 IO 。但是 statement 格式的 binlog 可能会导致数据不一致 。
设计 MySQL 的大叔想了一个折中的方案,mixed 格式的 binlog,其实就是 row 和 statement 格式混合使用 , 当 MySQL 判断可能数据不一致时,就用 row 格式,否则使用就用 statement 格式 。
有时候我们遇到从数据库中获取不到信息的诡异问题时,会纠结于代码中是否有一些逻辑会把之前写入的内容删除 , 但是你又会发现,过了一段时间再去查询时又可以读到数据了 , 这基本上就是主从延迟在作怪 。
主从延迟,其实就是“从库回放” 完成的时间,与 “主库写 binlog” 完成时间的差值,会导致从库查询的数据,和主库的不一致。
谈到 MySQL 数据库主从同步延迟原理,得从 MySQL 的主从复制原理说起:
总结一下主从延迟的主要原因:主从延迟主要是出现在 “relay log 回放” 这一步,当主库的 TPS 并发较高,产生的 DDL 数量超过从库一个 SQL 线程所能承受的范围 , 那么延时就产生了,当然还有就是可能与从库的大型 query 语句产生了锁等待 。
我们一般会把从库落后的时间作为一个重点的数据库指标做监控和报警 , 正常的时间是在毫秒级别,一旦落后的时间达到了秒级别就需要告警了 。
解决该问题的方法,除了缩短主从延迟的时间,还有一些其它的方法,基本原理都是尽量不查询从库 。
具体解决方案如下:
在实际应用场景中 , 对于一些非常核心的场景,比如库存,支付订单等 , 需要直接查询从库,其它非核心场景,就不要去查主库了 。
两台机器 A 和 B,A 为主库,负责读写,B 为从库,负责读数据 。
如果 A 库发生故障 , B 库成为主库负责读写,修复故障后 , A 成为从库,主库 B 同步数据到从库 A 。
一台主库多台从库 , A 为主库,负责读写,B、C、D为从库,负责读数据 。
如果 A 库发生故障 , B 库成为主库负责读写,C、D负责读,修复故障后,A 也成为从库,主库 B 同步数据到从库 A 。
【mysql主从怎么实现 mysql80 主从】关于mysql主从怎么实现和mysql80 主从的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读