前言:
眼前各位老铁们对“mysql主从恢复”大致比较珍视,我们都想要分析一些“mysql主从恢复”的相关内容。那么小编也在网上网罗了一些关于“mysql主从恢复””的相关知识,希望大家能喜欢,兄弟们快快来学习一下吧!这个主库和从库是怎么保证数据一致的呢?
MySQL 主从库
其实在搭建一些小的应用软件时,使用一套数据库就够了,那我们先来一起看一下为什么会用到主从库
使用主从库的主要原因有两点:
1、在复杂的业务系统中,如果有一句 sql 语句需要锁表,那么就会导致我们暂时不能使用这张表的读服务,这也就有可能影响到正常运行中的业务。如果此时我们使用主从库,让主库负责写,从库负责读,这样即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
2、架构的扩展,业务量越来越大,单机无法满足高频率的I/O访问,此时做多库的存储,可以降低单个磁盘I/O访问的频率,从而提升效率。
既然我们使用到了主从库,那么我们就需要保证主从库的数据是一致的,这样无论系统读取哪一套 MySQL 的数据都可以保证结果是正确的,此时我们就需要用到主从复制了。
MySQL 主从复制
主从复制的概念很简单,他指的是数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点,说白了就是 CTRL+C、CTRL+V 。
MySQL主从复制是一个异步的复制过程,底层是基于 MySQL 数据库自带的二进制日志功能(也就是 Binlog)。就是一台或多台 MySQL 数据库从另一台 MySQL 数据库进行日志的复制,然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致(主从复制是 MySQL 数据库自带功能,我们无需借助第三方工具)。
接下来我们一起看看主从复制的原理
① master 服务器将数据的改变记录二进制 binlog 日志,当 master 上的数据发生改变时,则将其改变写入二进制日志中。
② slave 服务器会在一定时间间隔内对 master 服务器的二进制日志进行探测,判断其是否发生改变,如果发生改变,则开始一个 I/O Thread 请求 master 二进制文件内容。同时传送过来的信息,会记录到 中。
③ 同时主节点为每个 I/O 线程启动一个 dump 线程,用于向其发送二进制文件,并保存至从节点本地的中继日志(即Relaylog)中,接下来从节点启动 SQL 线程从中继日志中读取二进制日志并在本地重放,并且把应用过的内容记录到 中,使得其数据和主节点的保持一致,最后 I/O Thread 和 SQL Thread 将进入睡眠状态,等待下一次被唤醒。
MySQL 主从同步时,可以选择的 Binlog 模式有3种,分别是 statement、row、mixed。
① statement:会将对数据库操作的 sql 语句写入到 Binlog 中
② row:会将每一条数据的变化写入到 Binlog 中
③ mixed:statement 与 row 的混合。MySQL 决定什么时候写 statement 格式的,什么时候写 row 格式的 Binlog。
根据目前的实际情况来说,建议将 Binlog 模式设置为 ROW。因为现在随着固态硬盘的普及,磁盘 I/O 的性能得到大幅提升,在SSD加持下, I/O 成为瓶颈的可能性比较小,并且 ROW 模式的 Binlog 记录了完整的变更信息,在恢复数据上面将会很容易。即使我不消息误删了一行记录,我也可以通过 Binlog 捞回原来的所有字段信息,然后转变成 insert 进行插入;如果执行的是 update 语句,由于 ROW 模式的 Binlog 会完整记录修改前和修改后的整行数据,所以也可以很容易的进行恢复。语句如下
将 mysql-bin.000001 文件中 position 在1000到1200字节之间的内容解析出来,放到 MySQL 中执行mysqlbinlog /var/log/mysql/mysql-bin.000001 --start-position=1000 --stop-position=1200 | mysql -h127.0.0.1 -P3306 -u$ user -p$ pwd;
MySQL 主从配置步骤
主机配置 修改配置文件:vi /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=ROW
从机配置 修改配置文件:vi /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
重启主、从 MySQL 服务,并关闭防火墙
service mysqld restart
systemctl status firewalld.service
在主机上建立帐户并授权 slave
#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘%’ IDENTIFIED BY ‘slave’;
#查询master的状态,输出的内容在配置从机时会用到
show master status;
在从机上配置需要复制的主机
#复制主机的命令
CHANGE MASTER TO MASTER_HOST=‘主机的IP地址’,
MASTER_USER=‘slave’,
MASTER_PASSWORD=‘slave’,
MASTER_LOG_FILE=‘mysql-bin.xxxx’,MASTER_LOG_POS=xxx;
#启动从服务器复制功能
start slave;
#查看从服务器状态(如果输出的 Slave_IO_Running、Slave_SQL_Running两个参数值都为YES,则说明我们配置成功了)
show slave status;
标签: #mysql主从恢复 #mysql主从锁表 #mysql进入bin