您的位置:首页 > 数据库 > MySQL

【MySQL】——主从模式及复制

2017-07-09 21:01 239 查看
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 日志在主从数据库数据同步和数据备份恢复中都可以进行使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: