一 mysql 主从备份原理
一双机热备的概念简单说一下, 就是要保持两个数据库的状态自动同步对任何一个数据库的操作都自动应用到另外一个数据库, 始终保持两个数据库中的数据一致 这样做有如下几点好处:
1. 可以做灾备, 其中一个坏了可以切换到另一个
2. 可以做负载均衡, 可以将请求分摊到其中任何一台上, 提高网站吞吐量 对于异地热备, 尤其适合灾备
二 mysql 主从备份工作原理
简单的说就是把 一个服务器上执行过的 sql 语句在别的服务器上也重复执行一遍, 这样只要两个数据库的初态是一样的, 那么它们就能一直同步
二实现方式
MYSQL 主从同步是在 MySQL 主从复制(Master-Slave Replication)基础上实现的, 通过设置在 Master 上的 binlog, 使其处于打开状态; Slave 通过一个 I/O 线程从 Master 上读取 binlog, 然后传输到 Slave 的中继日志中, 然后使用 SQL 线程读取中继日志, 并应用到自身数据库中, 从而实现主从数据同步功能
有两个服务器, 演示了从一个主服务器 (master) 把数据同步到从服务器 (slave) 的过程
对于一个 mysql 服务器, 一般有两个线程来负责复制和被复制当开启复制这个开关之后(start slave)
1. 作为主服务器 Master, 会把自己的每一次改动都记录到 二进制日志 Binarylog 中 (从服务器会负责来读取这个 log, 然后在自己那里再执行一遍)
2. 作为从服务器 Slave, 会用 master 上的账号登陆到 master 上, 去读取 master 的 Binarylog, 然后写入到自己的中继日志 Relaylog, 然后自己的 sql 线程会负责读取这个中继日志, 并执行一遍到这里主服务器上的更改就同步到从服务器上了
在 mysql 上可以查看当前服务器的主, 从状态 其实就是当前服务器的 Binary(作为主服务器角色)状态和位置以及其 RelayLog(作为从服务器)的复制进度
三复制的过程
该过程的第一部分就是 master 记录二进制日志在每个事务更新数据完成之前, master 在二日志记录这些改变 MySQL 将事务串行的 写入二进制日志, 即使事务中的语句都是交叉执行的在事件写入二进制日志完成后, master 通知存储引擎提交事务 下一步就是 slave 将 master 的 binary log 拷贝到它自己的中继日志首先, slave 开始一个工作线程 I/O 线程 I/O 线程在 master 上打开一个普通的连接, 然后开始 binlog dump processBinlog dump process 从 master 的二进制日志中读取事件, 如果已经跟上 master, 它会睡眠并等待 master 产生新的事件 I/O 线程将这些事件写入中 继日志 SQL slave thread(SQL 从线程)处理该过程的最后一步 SQL 线程从中继日志读取事件, 并重放其中的事件而更新 slave 的数据, 使其与 master 中的数 据一致只要该线程与 I/O 线程保持一致, 中继日志通常会位于 OS 的缓存中, 所以中继日志的开销很小 此外, 在 master 中也有一个工作线程: 和其它 MySQL 的连接一样, slave 在 master 中打开一个连接也会使得 master 开始一个线程复制 过程有一个很重要的限制复制在 slave 上是串行化的, 也就是说 master 上的并行更新操作不能在 slave 上并行操作
实验
实验环境
- server2 master
- server3 slave
master 上下载包
mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
安装数据库
[root@server2~]# yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm
[root@server3 ~]# yum install -y *
修改 mysql 的配置文件
[root@server2 ~]# vim /etc/my.cnf
server-id = n | 给服务器分配一个唯一的 ID 编号 |
log-bin [= filename] | 把对数据进行修改的所有 SQL 命令 (也就是 INSERT、UPDATE 和 DELETE 命令) 以二进制格式记入日志(二进制变更日志,binary update log)。这种日志的文件名是 filename.n 或默认的 hostname.n,其中 n 是一个 6 位数字的整数(日志文件按顺序编号)。 |
开启服务
修改 slave 配置文件
server-id = n | 给服务器分配一个唯一的 ID 编号 |
[root@server3 ~]# vim /etc/my.cnf
开启服务
查看密码
安全配置向导
如下方法修改 slave 密码
mysql> alter user root@localhost identified by 'LH=redhat123';
master 上进行授权
mysql> grant replication slave on *.* to cara@'192.168.122.13' identified by 'LH@redhat123' ; 用户授权
mysql> flush privileges; 刷新
master 授权后, slave 可以远程登录
master 端查看
使 slave 与 master 建立连接, 从而同步:
mysql> change master to master_host='192.168.122.12',master_user='cara',master_password='LH=redhat123',master_log_file='mysql-bin.000003',master_log_pos=1706;
slave 端 mysql -p 登录
查看
- [root@server3 mysql]# pwd
- /var/lib/mysql
- [root@server3 mysql]# cat master.info
[root@server3 mysql]# cat server3-relay-bin.index
mysql> show slave status\G; 查看 slave 状态
mysql> start slave; 开启 slave
创建库 westos, 创建表 usertb
在表中插入数据
更改密码
删除表中数据
[root@server2 mysql]# mysqlbinlog mysql-bin.000003 可查看 master 所做的操作
在 slave 上也可查看 master 上数据
来源: http://www.bubuko.com/infodetail-2518759.html