博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL主从复制
阅读量:6350 次
发布时间:2019-06-22

本文共 4467 字,大约阅读时间需要 14 分钟。

MySQL主从复制简介

Mysql的主从复制方案,都是数据传输的,只不过MySQL无需借助第三方工具,而是自带的同步复制功能,MySQL的主从复制并不是磁盘上文件直接同步,而是将binlog日志发送给从库,由从库将binlog文件里的内容写入本地数据库。

在生产环境中,MySQL主从复制都是异步方式同步,即不是实时同步数据。

MySQL主从复制原理:

MySQL主从复制
从库读取master.info文件中的信息(连接参数,最后一次请求binlog的位置点),向主库请求binlog文件,主库接受到从库发送过来的信息后(验证通过),将本地对应的binlog日志发送至从库从库接收到binlog文件后,会存储到TCP/IP缓存中,并发送ACK给主库,告诉主库自己已经收到binlog日志了,那么主库收到ACK后接着干别的事了,从库TCP/IP缓存中的内容写入到本地的relaylog日志文件中,从库会将最后一次获取到的binglog位置点更新至master.info文件,然后IO线程读取relay-log.info中的最后一次执行到的relaylog位置点(以这个位置点为起点,往后执行中继日志),最后将relaylog日志文件中对应的位置点的内容写入(恢复)数据库中,执行完数据写入后,将最后最后一次执行数据写入(恢复)的relaylog位置点更新至relay-log.info文件

每一次binlog请求都是按照上面所写的循序来执行

MySQL主从复制部署

MySQL主从复制条件

  1. 两台以上mysql实例(多台物理机或多个mysql实例)
  2. 开启binlog功能,确保所有实例server-id不同
  3. 主库建立同步账号replication slave 特殊的权限)
  4. 将全备文件恢复到从库上(需人为操作)
  5. 从库配置master.info(change master..),复制的binlog位置点(需人为操作)
  6. start slave 复制开关

1.环境规划

所有机器统一centos7.4系统环境,并且都已经安装好了mysql 5.7.20

主机名 IP地址 服务
db01 10.0.0.51 mysql 主库
db02 10.0.0.52 mysql 从库

2.所有mysql都开启binlog功能,确保所有mysql的server-id不同

需要添加的配置如下:#主库 /etc/my.cnf[mysqld]server_id=1log-bin=/application/mysql/data/mysql-binsync_binlog = 1binlog_format = row  skip-name-resolve   #关闭域名解析#从库 /etc/my.cnf[mysqld]server_id=2log-bin=/application/mysql/data/mysql-binsync_binlog = 1binlog_format = rowskip-name-resolve 提示:从库的relay-log路径可自定义,默认在data目录下以主机为前缀保存

server-id 用于全网唯一标识一台mysql机器

2.主库授权主从复制用户

replication slave 一个特殊的权限,专门用于主从复制

mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123456';

3.主库将数据库数据做全备,然后将备份文件推送至从库

  • 主和从同时搭建新的环境,就不需要备份主库数据,恢复从库了,直接从第一个binlog(mysql-bin.000001)开头位置(120)
  • 如果主库已经工作了很长时间了,那么需要备份主库数据,恢复到从库,然后从库从备份的时间点起,自动进行复制
#1.将数据库的数据全备到/backup目录下[root@db01 ~]# mysqldump -uroot -p123456  -A -B -R --master-data=2 --single-transaction |gzip >/backup/full_$(date +%F).sql.gz#2.将全备通过scp推送到从库的/backup目录下[root@db01 ~]# scp /backup/full_2019-01-15.sql.gz  root@10.0.0.52:/backup提示:/backup 目录请自行创建

4.从库将备份文件恢复至数据库

#1.解压备份文件[root@db02 ~]# gunzip /backup/full_2019-01-15.sql.gz#2.进入数据库,将备份文件导入到本地数据库mysql> source /backup/full_2019-01-15.sql#3.检查数据是否恢复成功mysql> show databases;

5.从库上都找到binlog位置点

虽然全备文件已经恢复到了从库,但是全备之后的数据的变化是没有进行备份的,所以从库还需要指定binlog位置点,这样从库才知道该从哪里开始同步数据

#直接在从库的全备文件中找到binlog位置点[root@db02 /]# sed -n '22p' /backup/full_2019-01-15.sql-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

6.从库配置master info

master info就是指配置一系列主从复制参数,该参数为change master to,来实现主从复制

#1.进入数据库配置 change master tochange master tomaster_host='10.0.0.51',    master_port=3306,master_user='rep',  master_password='123456',master_log_file='mysql-bin.000001',  master_log_pos=154; #2.开启主从同步功能(开启IO和SQL线程),mysql> start slave;#3.查看主从复制的状态(截取部分)#当在slave状态中可以看到如下参数,都为yes表明成功,(从库有一个IO和一个SQL)mysql> show slave status\G...Slave_IO_Running: YesSlave_SQL_Running: Yes...change master to参数解释:master_host='10.0.0.51',    #主库的IP地址master_port=3306,    #主库的端口master_user='rep',   #主库上创建的用于复制的用户repmaster_password='123456',      #rep用户的密码master_log_file='mysql-bin.000001', #二进制日志文件的名称master_log_pos=154;  #二进制日志偏移量提示:mysql> help change master to 可获取配置案例

slave的操作命令:

mysql> stop slave; #停止slave

mysql> reset slave; #清空slave的配置参数(change master to)

从库的master.info和relay-log.info文件

#执行完change master to命令后,会自动生成master.info文件,保存change master to的参数和最后一次获取binlog日志文件名和对应的位置点ls /application/mysql/data/master.info#执行完start slave命令后,会自动生成relay-log.info文件,保存已执行过的relaylog的位置点ls /application/mysql/data/relay-log.info

7.主库创建数据库,在到从库验证数据是否同步

#1.主库创建数据库:samplemysql> create database sample;#2.从库查看数据是否同步mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || case1              || case2              || mysql              || performance_schema || sample             || sys                || test               || xmh                |+--------------------+

从库去向主库请求的binlog日志会保存在从库本地的relaylog日志中

[root@db02 /]# ls /application/mysql/data/db02-relay-bin.*/application/mysql/data/db02-relay-bin.000001/application/mysql/data/db02-relay-bin.000002/application/mysql/data/db02-relay-bin.index

扩展:从库开启记录binlog功能

从库需要记录binlog的应用场景为:当前的从库还需要作为其它从库的主库,例如:级联复制和双主互为主从场景的情况下

#从库的my.cnf中加入如下参数,然后重启服务生效即可log-slave-updates  #开启从库记录binlog功能log-bin = /application/mysql/data/mysql-binexpire_logs_days = 7  #bin-log保留时间(只保留7天)

MySQL主从复制故障

主从复制状态信息介绍

mysql> show slave status\GSlave_IO_Running: YesSlave_SQL_Running: YesLast_IO_Errno: 0   #记录最后一次IO的错误代码Last_IO_Error:     #显示导致IO的错误原因Last_SQL_Errno: 0  #记录最后一次SQL的错误代码Last_SQL_Error:    #显示导致SQL的错误原因

转载于:https://blog.51cto.com/12643266/2343810

你可能感兴趣的文章
封装类Select I/O模型反弹方式的class封装
查看>>
nullnullhdu4450-Draw Something
查看>>
Linux进程间通信(四)---信号通信之信号发送捕捉kill()、raise()、alarm()、pause()及其基础实验...
查看>>
无法引入import com.sun.management.OperatingSystemMXBean
查看>>
(原创)C++11改进我们的程序之简化我们的程序(八)
查看>>
ios的@property属性和@synthesize属性
查看>>
WinDbg调试DMP格式文件
查看>>
[转]PHP100视频教程(2012-2013版)下载地址及密码
查看>>
cygwin配置swig开发环境(Android)
查看>>
备份数据库的时候设置 BufferCount 选项不正确导致 out of memory 的情况
查看>>
3D Grid Effect – 使用 CSS3 制作网格动画效果
查看>>
【css】css 背景色渐变兼容写法
查看>>
Django Aggregation聚合
查看>>
JavaScript数据操作--原始值和引用值的操作本质
查看>>
ylbtech-LanguageSamples-Security(安全)
查看>>
[Aaronyang] 写给自己的WPF4.5 笔记7[三巴掌-ItemsControl数据绑定详解与binding二次处理 3/3]...
查看>>
内存表 FDMemTable ClientDataSet CreateDataSet 动态创建字段
查看>>
CodeIgniter - 集成七牛云存储
查看>>
ARM_Instruction_Set_Encoding_hacking(ARM指令集编码格式解读)
查看>>
【转】在Ubuntu 12.04 上为Virtualbox 启用USB 设备支持--不错
查看>>