1.上节基本诉说了mysql主从同步,这里想说明的是,其一从库在请求主库进行同步的时候,是主库的主线程进行用户名、密码的验证,在验证通过后,将请求转交给I/O线程负责同步;其二从库sql线程在读取中继日志relay.log写入数据库后,也会在relay.info中记录自己写入的位置

2.在部署实验时,有一个锁表的语句:flush table with read lock ; 这个锁表的时间,在不同的引擎的情况下,会受参数的控制,如果超过时间,会自动解锁。另外,当前窗口如果关闭,也会解锁。

查看时间参数:show variables like '%timeout%'

修改锁表时间:修改的是内存中的参数,因为没有在配置文件中修改,所以关闭此次修改,退出数据库后,会失效。

set global wait_timeout=10;

set global  interactive_timeout=10;

3.mysqldump -uroot -p'oldboy124' -S /data/3306/mysql.sock  -F -B  oldboy >/dangjingwei/t.sql

上述命令中,-F标识自动刷新bin_log日志,因为如果不是操作数据库,一般binlog的日志位置是不会变得,所以这里加入-F后,操作日志会发生变化,但是实际数据库是没有变化的。

4.如果从库还想级联从库,需要打开log-bin和log-slave-updates参数。

5.怎样做从库?

1)申请设备

2)编写文档和实施方案

3)告知项目经理,然后进行实施就可以了

6.查看线程的同步状态:这只是其中的一种状态,剩下的可以百度

show processlist;(主库)

show processlist;(从库)

7.生产场景mysql主从复制读写分离授权方案与实战

当配置好mysql主从复制以后,所有对数据库内容的更新就必须在主服务器上进行,原因在于数据复制是单向的,只有在主库上更新,才能主从一致

授权分离,让连接主库不连接从库,防止连接从库的3个方法:

方案1:

主库:web oldboy 192.168.0.104  3306 (select,insert,delete,update)

从库:主库的web用户同步到从库,然后回收insert,delete,update权限。

不回收从库权限,设置read-only参数确保从库只读。可以不回收了。

方案2:

主库:web_w oldboy 192.168.0.104  3306 (select,insert,delete,update)

从库:web_r oldboy 192.168.0.104  3306 (select)

风险:web_w连接从库,设置read-only参数确保从库只读。

开发:多套用户密码不专业。

方案3:

不同步mysql库:主从库分别进行如下授权

主库:web oldboy 192.168.0.104  3306 (select,insert,delete,update)

从库:web oldboy 192.168.0.104  3306 (select)

缺陷:从库切换主库时候,连接用户授权问题,保留一个从库专门准备接替主。

8.可以看出,一般情况下,我们的主从同步是进行全部库都的同步。如果想要同步某些库的时候,修改配置文件my.cnf: master端:--binlog-ignore-db=库名:二进制忽略的数据库,多个库用,分隔;--binlig-do-db :二进制日志记录数据库,多个库用,分隔;还有很多情况,不常用,需要的可以百度网上

9.read-only参数防止数据写从库的方法:
      除了给从库仅作selectd的授权外,还可以在slave服务器启动选项增加参数或者在my.cnf配置文件中加入read-only确保从库只读,值得注意的是,read-only参数对于具有super权限的用户是没有效果的,换句话说对不是super的用户是有效果的。

10.重现故障是运维最重要的一个能力。
   例如,如果从库有一个库test,但是这时如果主库创建test,在同步到从库的时候就会报错,通过在从库添加如下命令,让指针向下走一格,忽略此报错:
        stop  slave
        set global  sql slave_skip_counter=1
        start slave
  1)   对于普通的互联网业务,忽略问题不是很大。要确保业务不影响
  2)企业场景解决主从同步,比主从不一致对当前更重要,然后如果主从数据一致也很重要,在找个时间恢复下这个从库
  主从数据不一致更重要还是保持主从同步持续状态更重要,这个我们要根据业务进行选择;当然,我们还可以在参数中配置,也可以忽略此错误,slave-skip-errors=1032,10062,1007

11.忽略解析的参数是在my.cnf中的 skip-name-resolve

12.mysql的slave从库记录binlog方法
     需要记录binlog的情况:
  1)当前从库还要作为其他从库的主库,也就是级联同步
  2)把从库作为备份服务器时需要开启binlog

操作方式:

my.cnf下log-bin打开
log-slave-updates
expire_logs_days=7(linlog自动保存多少天,之后的删除)

13.方案:一主多从,主库宕机切换从库方案

1.)登陆从库show  processlist\G,查看两个线程的状态
2.)看从库哪个的master.info更靠前,作为主库
 cat  /data/3307/data/master.info
3.)切换:登陆从库
  stop slave
  retest master
  quit
4.)进入数据库数据目录,删除master.info relay-log.info
检查授权表,类似read-only
5.)提升主库 :/data/3306/restart
6.)如果主库服务器没宕,需要去主库提取binlog日志补全提升主库的从库
  授权同步用户和主库一样
7.)其他从库 stop  slave
  change master to master-host='ip'
   start slave
   show  slave  status \G
8.)修改程序配置文件,切换主库
9.)修复损坏的主库,完成后作为从库使用或者切换
 
14.主主互备
Master1:
auto_increment_increment     =2#自增ID的间隔,如1 3 5间隔2
auto_increment_offset        =1#ID的初始位置
Master2:
auto_increment_increment     =2#自增ID的间隔,如2,4,6间隔2
auto_increment_offset        =2#ID的初始位置

my.cnf下log-bin打开
log-slave-updates

然后change slave进行配置即可;主键的增长不是有规律的,但是不影响业务,如上,可以是1,3,5,6,8等

九、linux-msyql下的mysql主从复制深度实战的更多相关文章

  1. 1.Mysql集群------Docker下的Mysql主从复制

    前言: 实话说,我想做的是Mysql集群架构. 我的计划是: 1.实现Docker下的Mysql主从复制 2.实现MyCat基于Mysql的读写分离 3.实现MyCat的分库分表 4.实现pxc集群 ...

  2. Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with

    Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Li ...

  3. 使用kettle工具将文本文件的内容插入Linux虚拟机下的mysql表中

    一.      解压kettle包 1.把包拷到Linux系统下 还有mysql的驱动包 2.解压zip后缀的包 输入命令:unzip /software/pdi-ce-7.0.0.0-25.zip ...

  4. Linux平台下卸载MySQL的方法

    转载自: https://www.cnblogs.com/taomylife/p/7234925.html Linux平台下卸载MySQL的方法: MySQL的安装主要有三种方式:二进制包安装.RPM ...

  5. Linux系统下授权MySQL账户访问指定数据库和数据库操作

    Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...

  6. 在linux系统下安装mysql详解,以及远程调用连接不上mysql的解决方法。

    步骤: 1)查看CentOS自带的mysql 输入 rpm -qa | grep mysql 2)将自带的mysql卸载 3)上传Mysql的安装包到linux 4)安装mysql的依赖(不是必须) ...

  7. 虚拟机中ubuntu-16.04 Linux系统下配置mysql数据库,并在windows下使用navicat远程连接

    Linux系统下mysql数据库安装配置步骤: 1.在服务器上安装mysql:sudo apt-get install mysql-server sudo apt-get install mysql- ...

  8. centos7下部署mysql主从复制

    首先大致看一下这个图 环境说明: 系统:centos7 IP:master:192.168.7.235 slave:192.168.7.226 mysql版本MySQL-5.7 1.Master 下载 ...

  9. linux环境下搭建MySQL

    linux下搭建mysql的方式很多,网上也详解了很多种搭建方式,有直接yum的.有rpm的..总之,“坑”是层出不穷,有相关文件依赖性.权限.GPG keys等等. 本人也在今天搭建了一下.是出“坑 ...

随机推荐

  1. iOS基础——通过案例学知识之xib、plist、mvc

    透过案例学习xib的使用.plist的使用.mvc在iOS的使用,今天要做的案例效果图 1.xib和nib xib文件可以被XCode编译成nib文件,xib文件本质上是一个xml文件,而nib文件就 ...

  2. 尝试用kotlin做一个app(三)

    新闻列表 添加新闻列表可以使用RecyclerView.但是有个问题,RecyclerView只会在内部滚动,不会带动整个屏幕滚动.所以在原根布局外层添加androidx.core.widget.Ne ...

  3. [极客大挑战 2019]BabySQL

    0x00 知识点 双写绕过 简单测试一下,发现or在登陆过程被过滤,想到使用oorr试试,结果成了?! 最后多测试一下,发现from union select 这些关键函数都被替换为空 本题直接进行常 ...

  4. 读书笔记 - js高级程序设计 - 第五章 引用类型

      引用类型 和 类 不是一个概念 用typeof来检测属性是否存在 typeof args.name == "string"  需要实验 访问属性的方法 .号和[] 一般情况下要 ...

  5. SeetaFaceQt:写一个简单的界面

    关于这个界面,我用到了几个控件,这些控件通过Qt是非常容易构建的,窗口的话用的是QWidget,之前说了,QWidget是Qt里面几乎大部分控件的父类,QWidget的布局我使用了简单的水平布局(QH ...

  6. OpenCV2基础操作----直线、矩形、圆、椭圆函数的使用

    opencv2几个画图函数的调用 要用到几个随机变量: int fr = rand()%frame.rows; int fc = rand()%frame.cols; int b = rand()%2 ...

  7. SQL基础教程(第2版)第3章 聚合与排序:3-4 对查询结果进行排序

    第3章 聚合与排序:3-4 对查询结果进行排序 ● 使用ORDER BY子句对查询结果进行排序.● 在ORDER BY子句中列名的后面使用关键字ASC可以(通常省略默认)进行升序排序,使用DESC关键 ...

  8. count(1),count(*)和count(列)的比较

    转自:https://www.cnblogs.com/Caucasian/p/7041061.html 1.关于count(1),count(*),和count(列名)的区别 相信大家总是在工作中,或 ...

  9. 2020/1/28 PHP代码审计之命令执行漏洞

    0x00 命令执行漏洞原理 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行 ...

  10. C语言-指针到底是什么?

    1.指针到底是什么?(1).指针变量与普通变量的区别 指针的实质就是一个变量,他跟普通变量没有任何本质区别.指针完整的名字应该叫做指针变量,简称为指针.2.为什么需要指针?(1).指针的出现是为了实现 ...