什么是二进制日志binlog:
记录着mysql数据库中的一些写入性操作,比如一些增删改,但不包括查询!
二进制日志有哪些功能:
数据复制和数据恢复的功能

查看网络状态:
netstat -natp
查看master或slave状态:
show processlist; // 配置主从连接后,根据状态判断是否配置成功
1、binlog(二进制日志):主机配置
relaylog(中继日志):从机
2、每个服务器都有id,也就是Mysql集群每个机器有一个唯一的标识
3、授权信息(用户、密码、ip地址)【微信sdk,将系统在平台申请,获取微信平台秘钥】
3.1、主服务器开通账户,设置权限
create user 'repl'@'172.17.0.%' identified by '123456';
grant replication slave on *.* to 'repl'@'172.17.0.%' identified by '123456';
所有库.所有表
flush privileges;
3.2、从服务器设置访问信息
stop slave; // 关闭同步线程(I/O thread):停止从主服务器继续同步主服务器的binarylog文件
show slave status\G; // 查看从服务器与主服务器通信情况
change master to master_host='主机IP',master_user='repl',master_password='123456',
master_log_file='mysql-bin.000001',master_log_pos=154;

start slave; // 开启同步线程
show slave status\G;
// show master status; 找到binlog文件
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+

// 查看binlog文件内容
mysql> show binlog events in 'binlog文件名' from 0;

show slave status\G;
发现如下问题
Slave_IO_Running: No 
Slave_SQL_Running: Yes

原因:1、The slave I/O thread stops because master and slave have equal MySQL server ids(主从服务器id相同了)
在主机这边,操作:
vim /etc/my.cfg文件中server_id
service mysql restart;
在从机那边,操作:
start slave;

2、Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
在主机那边,执行:
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+

记下File, Position。
在从机这边,执行:
mysql> change master to master_log_file='mysql-bin.000003',master_log_pos=154;
Query OK, 0 rows affected (0.01 sec)
mysql> start slave; // 开启同步IO线程
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 47.105.49.219
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: iZwz97y9qoykzzotubitq3Z-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes // io线程开启了
Slave_SQL_Running: Yes
Seconds_Behind_Master: NULL //从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计

4、查看是否配置成功
从服务器:
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| 8 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 10 | system user | | NULL | Connect | 36 | Slave has read all relay log; waiting for more updates | NULL |
| 11 | system user | | NULL | Connect | 37 | Waiting for master to send event | NULL |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
主服务器:
mysql> show processlist;
+----+------+----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
| 2 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 4 | repl | 39.108.130.154:45454 | NULL | Binlog Dump | 62 | Master has sent all binlog to slave; waiting for more updates | NULL |
+----+------+----------------------+------+-------------+------+---------------------------------------------------------------+------------------+

5、测试主从同步

在主服务器上创建一张表c,查看binlog文件内容如下:
mysql> show binlog events in'mysql-bin.000004' from 0;
+------------------+-----+----------------+-----------+-------------+------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+------------------------------------------------------------+
| mysql-bin.000004 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.24-log, Binlog ver: 4 |
| mysql-bin.000004 | 123 | Previous_gtids | 1 | 154 | |
| mysql-bin.000004 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000004 | 219 | Query | 1 | 336 | use `a`; create table c (id int not null,name varchar(20)) |
| mysql-bin.000004 | 336 | Anonymous_Gtid | 1 | 401 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000004 | 401 | Query | 1 | 470 | BEGIN |
| mysql-bin.000004 | 470 | Table_map | 1 | 514 | table_id: 110 (a.c) |
| mysql-bin.000004 | 514 | Write_rows | 1 | 563 | table_id: 110 flags: STMT_END_F |
| mysql-bin.000004 | 563 | Xid | 1 | 594 | COMMIT /* xid=93 */ |
+------------------+-----+----------------+-----------+-------------+------------------------------------------------------------+

在从服务器上查询是否存在这张表c
mysql> show tables;
+-------------+
| Tables_in_a |
+-------------+
| c |
+-------------+
1 row in set (0.00 sec)

结论:主从同步(复制)配置成功了!!!
注意点:从服务器只读,不要进行写操作。如果插入了数据,主服务器与从服务器插入的数据重复了,同步binlog日志后,
在解析完中继文件执行sql时,可能会发生Duplicate entry '1' for key 'PRIMARY'等问题

6、主从同步延时问题
延迟情况分析:
● show slave status显示参数Seconds_Behind_Master不为0,这个数值可能会很大
● show slave status显示参数Relay_Master_Log_File和Master_Log_File显示bin-log的编号相差很大,说明bin-log在从库上没有及时同步,所以近期执行的bin-log和当前IO线程所读的bin-log相差很大
● mysql的从库数据目录下存在大量mysql-relay-log日志,该日志同步完成之后就会被系统自动删除,存在大量日志,说明主从同步延迟很厉害

使用并行复制解决:
mysql5.6支持从服务器sql线程并行复制,但并行是库级别的,对于单个库的操作,Thread SQL还是串行执行。
mysql5.7支持从服务器sql线程并行复制,并行是事务组级别的,对于单个库的一事务组操作,Thread SQL可以并行执行。
(硬件方面:考虑从服务器性能(cpu,硬盘)、考虑网络带宽)

7、主从同步数据丢失问题
分析:默认情况下,Mysql复制是异步的。主机将事件写入其二进制日志中,但不知道从机是否或何时检索并处理了它们,使用异步复制,如果主服从器奔溃,则它提交的事务可能不会传输到任何从服务器。
因此,在这种情况下,从服务器就无法同步到主服务器上的部分数据了。

● 如果在主服务器端启用了半同步复制,并且至少有一个半同步从服务器,则在主服务器上执行事务提交的线程将阻塞并等待,直到至少一个半同步从服务器确认已接收到该事务的所有事件为止,或者直到发生超时。
● 从属仅在将事件写入其中继日志并刷新到磁盘后,才确认接收到事务的事件。
● 如果发生超时而没有任何从属服务器确认该事务,则主服务器将还原为异步复制。当至少有一个半同步从属服务器赶上时,主服务器将返回到半同步复制。
● 必须在主服务器和从服务器上都启用半同步复制。如果在主服务器上禁用了半同步复制,或者在主服务器上但没有从属服务器上启用了半同步复制,则主服务器将使用异步复制。

使用半同步复制解决:
主服务器事务线程在提交时会被阻塞并等待,从服务器读取binlog日志,然后写入replay中继日志到硬盘,最后给主服务器一个ack通知,此时主服务器才继续进行下一次会话。
(或者等待到配置的超时时间后,半同步复制将会自动关闭,转为异步复制)

linux-mysql-主从同步的更多相关文章

  1. Linux mysql主从同步配置

    一.在两台Ubuntu机器上安装mysql1.检查系统中是否安装了mysql 这个是已经安装了的 没有安装的话执行上条命令===============================MySQL的一些 ...

  2. Linux下的MySQL主从同步

    网上一些关于Linux下的MySQL主从同步教程非常之多,有些很简单的配置却弄的非常复杂,有些根本无法配通,下面是我通过简单的配置完成的主从同步过程,大家可以参考,此文章更适用于新手. 一.测试环境: ...

  3. Linux下MySQL主从同步配置

    Centos6.5 MySQL主从同步 MySQL版本5.6.25 主服务器:centos6.5 IP:192.168.1.101 从服务器:centos6.5 IP:192.168.1.102 一. ...

  4. Linux 安装mysql,mariadb,mysql主从同步

    myariadb安装 centos7 mariadb的学习 在企业里面,多半不会使用阿里云的mariadb版本,因为版本太低,安全性太低,公司会配置myariadb官方的yum仓库 1.手动创建mar ...

  5. Linux 之 MySQL主从同步

    MySQL主从同步 参考教程:[千峰教育] 1.架设两个虚拟服务器,都安装好mysql. 2.关闭防火墙和Selinux. service iptables stop setenforce 0 3.修 ...

  6. mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

    转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有 ...

  7. Docker Mysql主从同步配置搭建

    Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...

  8. 运维派 企业面试题1 监控MySQL主从同步是否异常

    Linux运维必会的实战编程笔试题(19题) 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读 ...

  9. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  10. MySQL主从同步、读写分离配置步骤、问题解决笔记

    MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经 ...

随机推荐

  1. 记录 2020年2月26日 java的一次远程技术面试

    1. 自我介绍 2.String 类型为什么是final类型?String 为啥不可变? String 类型是final类型原因: 1.不可变性支持线程安全(为了线程安全) 2.不可变性支持字符串常量 ...

  2. springboot 后台框架平台 mybatis 集成代码生成器 shiro 权限 websocket

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  3. centos7.x中安装SQL Server

    本文内容是采集的好几位博主的博文进行的一个整合,内容更为精准和详尽,以下是我参照的几篇博文地址: 微软官方文档:https://docs.microsoft.com/zh-cn/sql/linux/s ...

  4. Windows、Linux之间传输文件的几种方式

    常见的文件传输协议有ftp.sftp,sftp就是在ftp的基础上对传输的数据进行了加密. ftp速度快,sftp速度略慢但安全性高. ftp默认使用21端口,sftp默认使用22端口. 我使用的是C ...

  5. 解决“此Flash Player与您的地区不相容”

    1.进入C:\Windows\System32\drivers\etc目录,将hosts文件拷贝到桌面,然后用文本编辑器,比如记事本,打开,在最后一行添加: 127.0.0.1 geo2.adobe. ...

  6. 《自拍教程25》在Linux上配置环境变量

    我们说的环境变量,一般是指的是PATH环境变量, Linux我们用Ubuntu操作系统来举例. 我们从官网下载了Sublime Text的Linux已编译好的包. https://download.s ...

  7. opencv —— setMouseCallback 响应鼠标操作事件

    鼠标操作:setMouseCallback 函数 借助回调函数,实现对鼠标每次操作的相应,即每进行一步鼠标操作,都会执行一次回调函数. void setMouseCallback(const stri ...

  8. 防止或减少过拟合的方式(二)——Dropout

    当进行模型训练的时候,往往可能错过模型的最佳临界点,即当达到最大精度的时候再进行训练,测试集的精度会下降,这时候就会出现过拟合,如果能在其临界点处提前终止训练,就能得到表达力较强的模型,从而也避免了过 ...

  9. 剑指offer-面试题53_2-0~n-1中缺失的数字-二分查找

    /* 题目: 寻找递增数组0~n-1中缺失的数字. */ /* 思路: 变形二分法. */ #include<iostream> #include<cstring> #incl ...

  10. maven的核心概念——继承

    15.1 为什么需要继承机制 由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置.例如: Hello <dependency> <groupI ...