mysql 主从复制 和基于gtid的mysql主从复制
主从复制
原理:
mysql 无需借助第三方工具,而是其自带的同步复制功能,另外一点,mysql 的主从
复制并不是从硬盘给上文件直接同步,而是逻辑的 binlog 日志同步到本地的应用执行的过
程。 数据从一个 mysql 数据库(master)复制到另一个 mysql 数据库(slave),在
master 与 slave 之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程
(SQL 线程和 IO 线程)在 slave 端,另一个线程(I/O 线程)在 master 端。要实现 mysql
的主从复制,首先必须打开 master 端的 binlog 记录功能,否则将无法实现。因为整个复
制过程实际上就是 slave 从 master 端获取 binlog 日志,然后再在 slave 上以相同顺序执
行获取的 binlog 日志中的记录的各种 SQL 操作。
原理图:
主从复制用途:
- 实时灾难备份,故障切换
- 读写分离,分担master的负载
- 备份,防止业务受影响
主从复制条件:
- master开启binlog日志
- master和slave的server-id不同
- slave主动连接master
主从复制存在的问题:
- master宕机后数据库的数据可能丢失
- 主库写压力时会出现复制延时的可能,导致数据不能完全备份
解决方法:
- 半同步复制-克服数据丢失
- 并行复制-克服复制延
环境:
master(主数据库): test3(172.25.1.3)
slave (从数据库): test4(172.25.1.4)
主从数据库版本最好一致
主从数据库内的数据需保持一致
master---slave 配置相同如下
Master(test3):
[root@test3 ~]# ls
mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
[root@test3 ~]# tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
[root@test3 ~]# rm -rf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
[root@test3 ~]# yum install * -y
[root@test3 ~]# vim /etc/my.cnf
[root@test3 ~]# /etc/init.d/mysqld start
//打开数据库
[root@test3 ~]# grep "temporary password" /var/log/mysqld.log
[root@test3 ~]# mysql_secure_installation
[root@test3 ~]# mysql -p //登陆数据库
slaver(test4)
[root@test4 ~]# ls
mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
[root@test4 ~]# tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
[root@test4 ~]# rm -rf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
[root@test4 ~]# ls
[root@test4 ~]# yum install * -y
[root@test4 ~]# vim /etc/my.cnf
[root@test4 ~]# /etc/init.d/mysqld start //打开数据库,可能出现报错
Initializing MySQL database:
2018-10-18T06:10:52.204846Z 0
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
Please use --explicit_defaults_for_timestamp server option (see
documentation for more details).
2018-10-18T06:10:52.206242Z 0 [ERROR] --initialize specified but
the data directory has files in it. Aborting.
2018-10-18T06:10:52.206268Z 0 [ERROR] Aborting
[FAILED]
//报错原因是已经有了 data 数据
解决方案:
[root@test4 ~]# vim /etc/my.cnf
[root@test4 ~]# cd /var/lib/mysql
[root@test4 mysql]# ls
ib_buffer_pool ibdata1 ib_logfile0
[root@test4 mysql]# ll //确实有数据
total 110596
-rw-r----- 1 mysql mysql 215 Oct 18 13:18 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Oct 18 13:18 ibdata1
-rw-r----- 1 mysql mysql 50331648 Oct 18 13:18 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Oct 18 13:18 ib_logfile1
[root@test4 mysql]# cd ..
[root@test4 lib]# mv mysql mysql.back //备份数据
解释:由于这里是练习,故便于实验将原本数据删除
[root@test4 mysql]# rm -rf *
[root@test4 mysql]# /etc/init.d/mysqld start
Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]
[root@test4 mysql]# grep password /var/log/mysqld.log
2018-10-18T06:21:22.660701Z 1 [Note] A temporary password is
generated for root@localhost: a,NqiGtfZ7D&
[root@test4 mysql]# mysql_secure_installation
test3 给用户名和可链接网段及授权密码(创建用户并授权)
[root@test3 ~]# mysql -p
Enter password:
mysql> grant replication slave on *.* to repl@'172.25.1.%' identified by '@Caoxingxing123'; //master给slave做授权,让slave连接
Query OK, 0 rows affected, 1 warning (0.39 sec)
mysql> quit
Bye
其中,master_user 为 repl
test4(从库)尝试连接
[root@test4 mysql]# mysql -u repl -p -h 172.25.1.3
Enter password: //输入 master 的数据库内中设置的验证密码
ERROR 2003 (HY000): Can't connect to MySQL server on '172.25.1.3' (113)
//此时可能会有报错
//报错原因有可能是没关防火墙。分别将防火墙关闭,再次尝试连接。
[root@test3 ~]# /etc/init.d/iptables stop
[root@test4 ~]# /etc/init.d/iptables stop
[root@test4 ~]# mysql -u repl -p -h 172.25.1.3 //连接成功。
从库连接主库
登陆slave数据库 mysql 会话,执行同步 SQL 语句(需要主服务器主机名,登陆凭
据,二进制文件的名称和位置),其中 master_log_file 和 master_log_pos 参
数不固定,其根据主库参数写。
master: //查看master的二进制日志
slave:
[root@test4 ~]# mysql -p
mysql>change master to master_host='172.25.1.3',master_user='repl',master_password='@ Caoxingxing123',master_log_file='mysql-bin.000005',master_log_pos=738; //slave进行change
Query OK, 0 rows affected, 2 warnings (1.25 sec)
mysql> start slave; //启动 slave 同步进程
Query OK, 0 rows affected (0.16 sec)mysql> show slave status\G //查看 slave 状态
接下来通过验证,证明是否可以实现主从复制的功能,证明方式有两种,分别如下:
1.在 master 数据库的 westos 数据库的一张数据表中插入数据,slave 的
westos 数据库的相同数据表中查看是否有新增的相同数据,从而来验证能否实
现主从复制功能。
2.关闭 slave,然后再修改 master 内容,看 slave 内容是否也相应修改。
验证 1:
未插入时:
master:
salve:
现在给主数据库创建数据库westos,并插入数据
主 mysql:
mysql> create database westos;
mysql> use westos //切换到 westos 数据库
Database changed
mysql> create table userlist(
-> username varchar(10) not null,
-> password varchar(20) not null); //创建表userlist 及插入数据
此时slave:
可见,列表 userlist 中的数据已经由master同步到 slave,实现主从复制功能。
验证 2:
slave:
mysql> stop slave; //停掉slave
master:
mysql> insert into userlist values ('lib',678);
mysql> insert into userlist values ('lily',789);
mysql> select * from userlist; //查看列表的数据内容
slave:
mysql> select * from userlist;
此时,slave 并未将数据同步过来,同样也可以说明其实现了主从复制功能。
基于 GTID 的主从复制
优点:
因为不用手工设置日志偏移量, 可以很方便地进行故障转移,如果启用
log_slave_updates 那么从库不会丢失主库上的任何修改。
缺点:
对执行的 SQL 有一定限制,仅支持 MySQL 5.6 之后的版本, 而且不建议使用早期 5.6 版本。
配置master和slave:
在两边的配置文件/etc/my.cnf 都加上:
gtid_mode=ON
enforce-gtid-consistency=true
并重启数据库
master:
[root@test3 ~]# vim /etc/my.cnf
[root@test3 ~]# /etc/init.d/mysqld restart
slave:
[root@test4 ~]# vim /etc/my.cnf
[root@test4 ~]# /etc/init.d/mysqld restart
[root@test4 ~]# mysql -p //关掉 slave
mysql> change master to master_host='172.25.1.3' master_user='repl', master_password='@Caoxingxing123',
MASTER_AUTO_POSITION=1;
mysql> start slave; //开启 slave
mysql> show slave status\G; //查看slave 的状态,状态正常
master:
给 master 数据库插入内容进行测试。
mysql> use westos
Database changed
mysql> create table gtidlist(
-> username varchar(10) not null,
-> password varchar(20) not null);
mysql> insert into gtidlist values ('gtid1',111);
mysql> insert into gtidlist values ('gtid2',222);
mysql> select * from gtidlist;
slave:
由上可见,数据可以同步过来,实现了主从复制。
相关文章:

使用read write 读写socket
一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用。 由此网络程序里最基本的函数就是read和write函数了。 写函数: ssize_t write(int fd, const void*buf,size_t nbytes); write函数将buf中的nbytes字节内容写入文件…
iOS从通讯录中选择联系人
有时候APP需要用户输入一位联系人的姓名和电话,除了用户手动输入,一般也允许用户从通讯录中选择一位联系人(图1),下面的代码就是使用系统的<AddressBookUI/AddressBookUI.h>库实现这一需求。 图1 完整代码&…

document.readystate
http://www.cnblogs.com/lhb25/archive/2009/07/30/1535420.html http://www.cnblogs.com/haogj/archive/2013/01/15/2861950.html http://jincuodao.baijia.baidu.com/article/2896 电视转载于:https://www.cnblogs.com/daishuguang/p/3523783.html

Openstack安装部署
系统版本 rhel7.4 关闭 iptables 关闭 selinux foundation1: 172.25.254.1 server1: 172.25.254.11 server2: 172.25.254.12 可参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/ //选择的mitaka 虚拟机上网 首先物理机必须可…

在Xcode中使用Git进行源码版本控制
本文翻译自Understanding Git Source Control in Xcode (译者myShire)欢迎您加入我们的翻译小组。 在应用程序开发过程中,很重要的一部分工作就是如何进行源码的版本控制。当代码出现问题时,我们就需要将代码恢复到原先正常的版本…

敏捷开发之道(二)极限编程XP
上次的博文敏捷开发之道(一)敏捷开发宣言中,我们介绍了一下敏捷开发宣言,在其中,我们了解到了关于敏捷开发的几个重要的价值观。今天我们来了解一个敏捷开发的方法——极限编程XP 1、介绍 极限编程(eXtreme…

spring 3.X与jdk 1.8不兼容
1、报错(部分) 2、解决 虽然Spring的jdk要求如下,但是spring 3与jdk1.8不兼容(使用的是spring 3.2) 在eclipse将jdk版本下调。这里将JDK调到1.7(在eclipse如下设置) 同时,需要设置服…

rhel-server-7.5-x86_64-dvd.iso镜像下载及rar压缩包的解压
主机名为server1 [rootserver1 ~]# ls rhel-server-7.5-x86_64-dvd.part1.rar rarlinux-5.6.1.tar.gz rhel-server-7.5-x86_64-dvd.part2.rar 1、如果没有rarlinux-5.6.1.tar.gz包可以去 https://www.rarlab.com/download.htm 这个网站下载RAR 5.61 for Linux 或者RAR 5.…
Expandable Table的Demo
在网上看到一个可点击cell展开的TableView的demo,原文是swift语言,我写了个oc版,有兴趣的朋友可以看下: 效果: oc源码(带中文注释):http://download.csdn.net/detail/dolacmeng/941…

Java对多线程的支持
Java运行时系统实现了一个用于调度线程执行的线程调度器,用于确定某一时刻由哪一个线程在CPU上运行。在Java技术中,线程通常是抢占式的而不需要时间片分配进程(分配给每个线程相等的CPU时间的进程)。抢占式调度模型就是许多线程处…

ESP8266-iot-2
1.SDK概述 复制相关的工程文件到HelloWorld里面 要在版本esp8266_nonos_sdk_v2.0.0_16_07_19上面开发,那么就要复制相应文件 然后打开IDE 导入HelloWorld到工程里面 创建3个文件,如下图 再从lib里面添加文件 复制到我的下面 复制app里面的内容 打算从IoT…

iptables防火墙策略
环境: foundation1 172.25.1.250 172.25.254.1 server1 172.25.1.1 server2 172.25.1.2 server3 172.25.1.3 四个主机都做解析 iptables简介: netfilter/iptables(简称为iptables…

ubuntu(16.04.01)学习-day1
1.修改root用户密码 sudo passwd root 按提示进行设置。 2.从Ubuntu 16.04开始,用户可以实现改变启动器的位置,可以将启动器移到屏幕底部,但是无法移到右边或顶部。打开终端,然后输入下面这个命令,即可将启动器移到屏幕…

HDU 1090 A+B for Input-Output Practice (II)
#include <cstdio> int main() {int n,a,b;scanf("%d",&n);for (int i1; i<n; i){ scanf("%d%d",&a,&b);printf("%d\n",ab);}return 0; } 转载于:https://www.cnblogs.com/forever97/p/3539605.html

监听UIWebView点击视频播放的事件
最近项目需要统计在跳转UIWebView后,用户点击网页上的视频进行播放的概率。找了很多监听进入视频播放的方法,最后在stackoverflow找到下面这个使用Notification的可行方法(如果是弹出): #pragma mark Notification - (void)addNotification {…

linux系统下redhat7之虚拟机控制
基础操作: [kioskfoundation0 Desktop]$ rht-vmctl start desktop ###开启desktop虚拟机 Error: desktop not started (is already running) ###报错,desktop已经运行 [kioskfoundation0 Desktop]$ rht-vmctl view desktop …
如何设计一个 iOS 控件?(iOS 控件完全解析)
前言 一个控件从外在特征来说,主要是封装这几点: 交互方式显示样式数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内;而一个…

Chapter12:动态内存
智能指针——shared_ptr为了更容易地使用动态内存,新的标准提供了智能指针来管理动态对象。智能指针的行为类似常规指针,重要的区别是它负责自动释放指向的对象。 智能指针的使用方式与普通指针类似。解引用一个智能指针返回它指向的对象。 1 if (p1 &am…

判断JS对象是否拥有某属性两种方式
方式,但稍有区别 1,in 运算符 1 2 3 var obj {name:jack}; alert(name in obj); // --> true alert(toString in obj); // --> true 可看到无论是name,还是原形链上的toString,都能检测到返回true。 2,hasOwnP…

Linux之redhat7系统结构
一.linux系统结构 linux是一个倒树结构 linux中所有的东西都是文件 这些文件都在系统顶级目录“/” /就是根目录 /目录以下为二级目录这些目录都是系统装机时系统自动建立的 二级目录的作用 /bin ##二进制可执行文件也就是系统命令 /sbin ##系统管理命令存放位置 /boot …

ASP.NET优化
源地址:http://www.cnblogs.com/wangjingblogs/archive/2013/02/27/2934706.html http://jingyan.baidu.com/article/2d5afd69bfd0ff85a3e28e6d.html转载于:https://www.cnblogs.com/haizine/p/5841771.html
3D Touch介绍: 一个数字压力器App和Quick Actions
随着iPhone 6s and 6s Plus的发布,苹果介绍了全新的手机交互方式:重按手势。你应该知道,这个特性其实早已应用在苹果手表和MacBook产品中,名字叫Force Touch。它给用户交互添加了全新的维度! 或许你对Force Touch为什么…

一些LUA函数(转载)
转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1、assert (v [, message]) 功能:相当于C的断言,当表达式v为nil或false将触发错误, message:发生错误时返回的信息,默认为"assertion f…

cifs------网络文件系统(1)
SMB文件共享 SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层࿰…

Swift 教學:如何使用iOS Charts API 製作漂亮的圖表
在應付許多的資料時,比起只在表格中呈現,使用圖表來顯示資料,可以幫助使用者容易地了解資訊。有了圖表,相對於讀取整個資料表(或幾個資料表)你可以輕鬆地一眼便見到以圖形表示的資料,取得所需的…

在Proteus中添加标号
1.Proteus中添加组件后双击引脚可以快速生成一个最近的端口。 2.按A调出设置界面 3.在String中写:netH#,"H"可以换成自定义前缀。count为起始值,increment为增量。 4.依次点击想要编号的引脚。转载于:https://www.cnblogs.com/viaduct/p/58424…

九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目
题目地址:http://ac.jobdu.com/problem.php?pid1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符…

cifs------网络文件系统(2)
接着上篇博客继续: Samba 基本配置 [rootserver2 ~]# rpm -qc samba-common //查看smb的配置文件 1、黑、白名单的设定 默认白名单,设置的ip是黑名单用户:hosts deny ip 默认黑名单,设置的ip是白名单用户ÿ…
iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
原文地址:https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md 目录 当我们在谈论缓存的时候,我们在谈论什么?GET网络请求缓存 80%的缓存需求:两行代码就可满足…

YARN集群维护部分问题汇总
云梯开发人员在云梯Yarn集群的搭建和维护过程中做了许多工作,本文选择这期间部分较为典型的问题,通过对这些问题的分析和解决方案,为大家分享分布式系统问题调查的经验。 调查的问题 1. 2013年初引入社区0.23时,调查ResourceManag…