当前位置: 首页 > news >正文

【mysql】mysql之主从部署以及介绍

  本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

 

一、mysql主从

1.主库操作

1.主库配置server_id
2.主库开启binlog
3.主库授权从库连接的用户
4.查看binlog信息
5.导出所有数据

2.从库操作

1.从库配置server_id(跟主库不一致)
2.确认主库授权的用户可以连接主库
3.同步主库数据
4.配置主库信息(change master to)
5.开启slave

3.主从复制原理

1)图解

img

2)文字描述
(1)从库执行change master to语句,然后立即将主库的信息(ip、端口等)记录到master.info中,这个文件就在从库的数据目录下。
(2)从库执行start slave语句的瞬间,会立即生成IO_Thread和SQL_Thread。
(3)IO_Thread读取master.info文件,获取主库的相关信息(IP、端口号等)。
(4)IO_Thread连接主库,连接层开始验证用户名、密码、端口号、IP等是否合法。
一旦合法,主库会立即分配一个dump_thread线程,来与IO_Thread进行交互。
(5)IO_Thread根据master.info中的二进制日志信息,向主库的DUMP_Thread线程请求最新的二进制日志。
(6)DUMP_Thread经过show master status查询,如果发现有新的二进制日志,就截取新的日志并返回给从库的IO_Thread。
(7)从库IO_Thread收到主库发来的binlog,存储在到TCP_IP缓存中,在网络底层返回ACK给主库。
(8)从库IO_Thread会将二进制日志信息写入到relay-log中。
(9)从库IO_Thread更新master.info信息,重置二进制日志位置点信息。
(10)从库SQL_Thread读取relay-log.info文件,获取上次执行过的relay-log.info位置点。
(11)根据获取到的位置点,SQL_Thread按照位置点往下执行relaylog日志。
(12)SQL_Thread执行完后,更新relay-log.info文件。
(13)pwrge线程(非主从线程)把应用过的relay_log定期自动清理

4.主从中涉及到的文件或者线程

1)主库
1.binlog:主库执行的sql语句
2.dump线程:对比binlog是否更新,获取新的binlog
2)从库
1.IO线程:连接主库,询问新数据,获取新数据
2.SQL线程:执行从主库哪来的sql语句
3.relay-log:中继日志,记录从主库拿过来的binlog
4.master.info:记录主库binlog信息,会随着同步进行更新
5.relay-log.info:记录sql线程执行到了那里,下次从哪里开始执行

三、主从复制的搭建

1.主库操作

1)配置

[root@db03 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=/service/mysql/data/mysql-bin[root@db03 ~]# /etc/init.d/mysqld start

2)授权一个用户

mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.03 sec)

3)查看binlog信息

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      326 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4)导出所有数据

[root@db03 data]# mysqldump -uroot -p -A --master-data=2 --single-transaction > /tmp/full.sql[root@db03 data]# scp /tmp/full.sql 172.16.1.52:/tmp/

2.从库操作

1)配置

[root@db02 ~]# vim /etc/my.cnf
[mysqld]
server_id=2[root@db02 ~]# /etc/init.d/mysqld start

2)验证主库用户

[root@db02 ~]# mysql -urep -p -h172.16.1.53

3)同步数据

[root@db02 ~]# mysql -uroot -p123 < /tmp/full.sql

4)配置主从

change master to
master_host='172.16.1.51',
master_user='rep',
master_password='123',
master_log_file='mysql-bin.000001',
master_log_pos=787368;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

5)开启线程

mysql> start slave;
Query OK, 0 rows affected (0.04 sec)

6)查看主从

mysql> show slave status\GSlave_IO_Running: YesSlave_SQL_Running: Yes

3.主从数据库出错

1)IO线程出错
mysql> show slave status\GSlave_IO_Running: NoSlave_SQL_Running: Yesmysql> show slave status\GSlave_IO_Running: ConnectingSlave_SQL_Running: Yes#排查思路
1.网络[root@db02 ~]# ping 172.16.1.53
2.端口[root@db02 ~]# telnet 172.16.1.53 3306
3.防火墙
4.主从授权的用户错误
5.反向解析skip-name-resolve
6.UUID或server_id相同
2)SQL线程出错
mysql> show slave status\GSlave_IO_Running: YesSlave_SQL_Running: No#原因:
1.主库有的数据,从库没有
2.从库有的数据,主库没有#处理方式一:自欺欺人
1.临时停止同步
mysql> stop slave;
2.将同步指针向下移动一个(可重复操作)
mysql> set global sql_slave_skip_counter=1;
3.开启同步
mysql> start slave;#处理方式二:掩耳盗铃
1.编辑配置文件
[root@db01 ~]# vim /etc/my.cnf
#在[mysqld]标签下添加以下参数
slave-skip-errors=1032,1062,1007#处理方式三:正解
重新同步数据,重新做主从

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 无头服务(Headless Service)
  • gen_server补充基础学习
  • linux cmake版本升级教程(Centos7)
  • Vue3:el-table实现日期的格式化
  • 使用python绘制森林图的教程
  • 如何制作Vector Vflash中加载的DLL文件--自动解锁刷写过程中27服务
  • C++类与对象(下)--最后的收尾
  • jmeter依赖jar包找不到类路径
  • SQL入门题
  • 【IPV6从入门到起飞】5-3 IPV6+Home Assistant(ESP32+MQTT+GPIO)远程控制灯
  • Java 抽象类 接口--详解
  • 判断语句有几种写法
  • 【解决】AnimationCurve 运行时丢失数据问题
  • 三十三、Gin的中间件
  • 使用 ECharts 实现响应式图表:优化移动端用户体验
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • ComponentOne 2017 V2版本正式发布
  • CSS 专业技巧
  • Facebook AccountKit 接入的坑点
  • JavaScript创建对象的四种方式
  • Java到底能干嘛?
  • Laravel Mix运行时关于es2015报错解决方案
  • Laravel Telescope:优雅的应用调试工具
  • learning koa2.x
  • MySQL QA
  • React+TypeScript入门
  • ucore操作系统实验笔记 - 重新理解中断
  • 给新手的新浪微博 SDK 集成教程【一】
  • 普通函数和构造函数的区别
  • 前端攻城师
  • 前嗅ForeSpider采集配置界面介绍
  • 网络应用优化——时延与带宽
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 一些关于Rust在2019年的思考
  • linux 淘宝开源监控工具tsar
  • ​浅谈 Linux 中的 core dump 分析方法
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (06)金属布线——为半导体注入生命的连接
  • (C11) 泛型表达式
  • (C语言)字符分类函数
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (备忘)Java Map 遍历
  • (二十四)Flask之flask-session组件
  • (分布式缓存)Redis分片集群
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)jdk与jre的区别
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)为C# Windows服务添加安装程序
  • (自适应手机端)行业协会机构网站模板
  • .mysql secret在哪_MySQL如何使用索引
  • .NET/C# 的字符串暂存池