mysql的主从模式
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 日志在主从数据库数据同步和数据备份恢复中都可以进行使用。