【MySQL】——主从模式及复制
2017-07-09 21:01
239 查看
mysql的主从模式
1、 从服务器同步主服务器的数据,可以执行查询操作,分担主服务器的压力
2、 主服务器出现问题,可以快速切换到从服务器提供服务
3、 备份可以在从服务器上执行,避免对主服务器造成影响
主从复制的原理
![](https://img-blog.csdn.net/20170805080010500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXhmbG92ZWdzMjAxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
流程:
master将变化记录到二进制日志binarylog简称为bin log中,slave启动一个IO线程将主库的binary log 拷贝到自己的的Relay log中,slave 重做relay log中的时间,完成和主库数据的同步。
Binary log:
1、 二进制日志,保存数据库 增删改 的所有操作记录
2、 日志文件都是以mysql-bin开头的
3、 除了用作主从数据同步外,binarylog还可以用来恢复数据,其中有一个position的概念可以指定恢复数据的范围
主从服务的配置:
主库配置:
![](https://img-blog.csdn.net/20170805080048134?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXhmbG92ZWdzMjAxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
从库配置:
![](https://img-blog.csdn.net/20170805080113494?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXhmbG92ZWdzMjAxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
使用 mysqldump +bin log完成数据恢复
mysqldump 命令可以完整备份数据库,如果在完整备份数据库之后进行了操作还没有备份,此时数据库宕机了,在备份后的操作可以使用bin log日志进行恢复。
1、使用show master status 命令查看二进制文件的状态,注意其中的position如下:
[root@node1 ~]# mysql -e 'SHOW MASTER STATUS'
2、使用mysqldump命令完整备份数据库
[root@node1 ~]# mysqldump--all-databases --lock-all-tables > backup.sql #备份数据库到backup.sql文件中
3、执行创建数据库操作
mysql> CREATE DATABASETEST1; #创建一个数据库
4、再次查看bin logs,position位置发生变化
mysql> SHOW MASTERSTATUS; #记下现在的position
5、#备份二进制文件
[root@node1 ~]# cp/var/lib/mysql/mysql-bin.000003 /root #备份二进制文件
6、模拟数据丢失
[root@node1 ~]# servicemysqld stop #停止MySQL
[root@node1 ~]# rm -rf/var/lib/mysql/* #删除所有的数据文件
[root@node1 ~]# servicemysqld start #启动MySQL,如果是编译安装的应该不能启动(需重新初始化),
如果rpm安装则会重新初始化数据库
mysql> SHOW DATABASES; #查看数据库,数据丢失!
7、恢复完整备份的数据
mysql> SETsql_log_bin=OFF; #暂时先将二进制日志关闭,最新进行的回复就不会被记录了
mysql> sourcebackup.sql #恢复数据,所需时间根据数据库时间大小而定
mysql> SETsql_log_bin=ON; #开启二进制日志
8、查看
mysql> SHOW DATABASES; #数据库恢复,但是缺少TEST1
数据库恢复的一部分,在完整备份后的新建数据库操作没有被恢复
9、从bin log 日志中恢复建表操作,可以执行position的开始和结束为止
[root@node1 ~]#mysqlbinlog --start-position=106 --stop-position=191 mysql-bin.000003 | mysqlemployees #通过二进制日志增量恢复数据
10、再次查看数据库
mysql> SHOW DATABASES; #现在TEST1出现了!
完整备份后进行的操作被被恢复了。
小结:
binlog 日志在主从数据库数据同步和数据备份恢复中都可以进行使用。
1、 从服务器同步主服务器的数据,可以执行查询操作,分担主服务器的压力
2、 主服务器出现问题,可以快速切换到从服务器提供服务
3、 备份可以在从服务器上执行,避免对主服务器造成影响
主从复制的原理
流程:
master将变化记录到二进制日志binarylog简称为bin log中,slave启动一个IO线程将主库的binary log 拷贝到自己的的Relay log中,slave 重做relay log中的时间,完成和主库数据的同步。
Binary log:
1、 二进制日志,保存数据库 增删改 的所有操作记录
2、 日志文件都是以mysql-bin开头的
3、 除了用作主从数据同步外,binarylog还可以用来恢复数据,其中有一个position的概念可以指定恢复数据的范围
主从服务的配置:
主库配置:
从库配置:
使用 mysqldump +bin log完成数据恢复
mysqldump 命令可以完整备份数据库,如果在完整备份数据库之后进行了操作还没有备份,此时数据库宕机了,在备份后的操作可以使用bin log日志进行恢复。
1、使用show master status 命令查看二进制文件的状态,注意其中的position如下:
[root@node1 ~]# mysql -e 'SHOW MASTER STATUS'
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 106 | | | +------------------+----------+--------------+------------------+
2、使用mysqldump命令完整备份数据库
[root@node1 ~]# mysqldump--all-databases --lock-all-tables > backup.sql #备份数据库到backup.sql文件中
3、执行创建数据库操作
mysql> CREATE DATABASETEST1; #创建一个数据库
4、再次查看bin logs,position位置发生变化
mysql> SHOW MASTERSTATUS; #记下现在的position
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 191 | | | +------------------+----------+--------------+------------------+
5、#备份二进制文件
[root@node1 ~]# cp/var/lib/mysql/mysql-bin.000003 /root #备份二进制文件
6、模拟数据丢失
[root@node1 ~]# servicemysqld stop #停止MySQL
[root@node1 ~]# rm -rf/var/lib/mysql/* #删除所有的数据文件
[root@node1 ~]# servicemysqld start #启动MySQL,如果是编译安装的应该不能启动(需重新初始化),
如果rpm安装则会重新初始化数据库
mysql> SHOW DATABASES; #查看数据库,数据丢失!
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+
7、恢复完整备份的数据
mysql> SETsql_log_bin=OFF; #暂时先将二进制日志关闭,最新进行的回复就不会被记录了
mysql> sourcebackup.sql #恢复数据,所需时间根据数据库时间大小而定
mysql> SETsql_log_bin=ON; #开启二进制日志
8、查看
mysql> SHOW DATABASES; #数据库恢复,但是缺少TEST1
+--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | test | +--------------------+
数据库恢复的一部分,在完整备份后的新建数据库操作没有被恢复
9、从bin log 日志中恢复建表操作,可以执行position的开始和结束为止
[root@node1 ~]#mysqlbinlog --start-position=106 --stop-position=191 mysql-bin.000003 | mysqlemployees #通过二进制日志增量恢复数据
10、再次查看数据库
mysql> SHOW DATABASES; #现在TEST1出现了!
+--------------------+ | Database | +--------------------+ | information_schema | | TEST1 | | employees | | mysql | | test | +--------------------+
完整备份后进行的操作被被恢复了。
小结:
binlog 日志在主从数据库数据同步和数据备份恢复中都可以进行使用。
相关文章推荐
- MySQL 的 XA 模式下的主从复制问题
- mysql GTID 主从复制模式
- MySQL GTID模式 主从复制跳过错误事务
- 在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)
- 在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】
- Mysql主从复制_模式之日志点复制
- MySQL 5.6 GTID模式的主从复制
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)
- mysql gtid模式主从复制搭建
- MysqL主从复制_模式之GTID复制
- Mysql实现企业级主从复制和互为主从模式架构
- MySQL基于GTID模式的主从复制设置
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)
- mix和row模式下 mysql主从复制从节…
- MYSQL的主从和主主复制模式
- MySQL主从复制之传统复制与GTID模式之间切换
- MYSQL主从复制或双机互备
- 配置MySQL主从复制(Replication)
- 设置MySQL复制时,replicate-ignore-db模式下如何正常工作
- mysql主从复制及读写分离试验