热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

主主复制_MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制相关的知识,希望对你有一定的参考价值。


  DBMS数据库管理系统的三层模型:物理层,逻辑层以及视图层。

  物理层:决定数据的存储形式。

  逻辑层:是一张有一张的表,一行行的数据记录。

  视图层:让用户看起来更方便,可有可无。

  存储引擎:使逻辑层中sql语句转换成能在磁盘上存储的物理形式,连接逻辑层与物理层。

  常用mysql存储引擎:

    MyISAM:

      最经典的MySQL存储引擎,但如果数据库一旦崩溃,再重启时需要对表进行修复,但MyISAM

    存储引擎无法保证安全修复,且其不支持事务的进行。支持表级锁。

    Innodb:

      Innodb存储引擎,支持事务,数据库的存储,是以表空间的方式存储,支持MVCC的高并发,

    支持四种隔离级别,read-uncommitted读未提交,read-committed读提交,repeatable-read幻读

    serializable串行化。支持行级锁,间隙锁。

    Aria:

      Aria存储引擎数据库一旦崩溃,能够对数据库安全修复增强版MyISAM存储引擎。

    Memory:

      内存级存储引擎,支持自适应hash索引,查询能力十分强大。

    MRG_MyISAM:

      将多张表逻辑层连接在一起,使用户就像使用一张表一样。

    PERFORMANCE_SCHEMA:

      展示数据库运行时的状态参数和统计数据。

    CSV:

      基于文件的文件存储数据存储引擎。

    ARCHIVE:

      归档存储引擎,通常用于做数据仓库。

  

  MySQL的日志:

  ①查询日志:

     general_log {ON|OFF} :查询日志是否开启关闭。

     general_log_file hostname.log :该变量的生效,需要在log_output为FILE时才能生效。

     log_output  FILE:

      FILE:表示将日志记录于文件系统中的文件;

      TABLE:表示将日志记录于MySQL中指定的表;

      NONE:表示不将日志记录输出出去;

  ②慢查询日志:

     运行时间超过某指定时长的操作。

     定义查询超时时长的变量:

       long_query_time   10.000000

     慢查询日志是否开启:

      log_slow_queries    OFF    

     

     slow_query_log_file hostname.log :该变量的生效,需要在log_output为FILE时才能生效。

     log_output  FILE:

      FILE:表示将日志记录于文件系统中的文件;

      TABLE:表示将日志记录于MySQL中指定的表;

      NONE:表示不将日志记录输出出去;

  ③错误日志

      log_error:保存了错误日志的文件路径;

      log_warnings  {ON|OFF}:是否将mysqld运行过程中产生的"Warning"类的信息一并记录到错误日志中;

  ④二进制日志

     用于记录引起数据库改变的SQL语句,可以通过备份二进制日志中的指定内容来达到数据库备份,还原的目的

   这一部分操作,在后边有示例。

     需要在/etc/my.cny配置文件中设置log_bin路径。

     mysql>show master|binary logs:显示当前数据库中所有二进制日志列表。

     mysql>show master status:显示当前数据库中正在使用的数据库列表,可以对指定日志的position,datetime进行备份还原。

     mysql>show binlog events in '日志path':显示对应二进制日志文件的内容。

  数据库备份方式:

    数据库备份作为一种重要的数据保存手段,需要根据不同环境采取不同的备份操作,最大限度保证数据的安全,毕竟数据

  才是一个企业生存的根本

  ①LVM实现MYSQL物理备份,恢复

   首先,在主机中加入一块硬盘充当MYSQL的数据存放的逻辑卷,以及备份数据的存储源

   #fdisk /dev/sdb

   因实验需要,所以只配置了一个扩展分区,及一个逻辑分区,将逻辑分区类型更改为8e即可;

   创建逻辑卷:

     #pvcreate /dev/sdb5

     #vgcreate myvg /dev/sdb5

     #lvcreate -L 5G -n mylv myvg

   对逻辑卷进行格式化:

     #mke2fs -t ext4 /dev/myvg/mylv

   创建数据库存放的路径

     #mkdir -pv  /mysql/data

   修改数据库配置文件/etc/my.cnf

    技术分享图片

    并在当前启动mysql用户家目录下创建.my.cnf文件,否则无法正常启动mysql

    技术分享图片

    

   到这里mysql服务就会在我们指定的逻辑卷中运行,lvm的备份方式主要是温备份,但

   也可以说是几乎热备份,只要对数据库加锁,解锁的过程够快,一般几秒钟即可,就

   不会引起数据的错乱;

   对所有表进行加锁操作:

   MariaDB [hellodb]> flush tables with read lock;

   

   紧接着拍摄快照,针对于该逻辑卷:

   [[email protected] ~]# lvcreate -L 5G -s -n snap /dev/myvg/mylv


   再对数据库中的表进行解锁操作:

   MariaDB [hellodb]> unlock tables;

   

   对二进制日志进行备份操作,备份当前运行的位置

   mysql -e "show master status" > /path

   (这样在需要还原数据时可以得知在备份那个时间段后我们执行了哪些操作,从二进制日志文件可以看出,从而进行还原)


   速度够快的话就不会产生多大的数据损失,紧接着将快照卷挂载到指定目录下,对数据进行打包压缩,卸载快照卷即可将数据库备份;

   技术分享图片

   

  ②select语句进行逻辑备份

    创建一个同classes表中数据结构一样的表;

    技术分享图片

    使用select将数据保存在文件中,并导入到test表当中对数据库进行备份

    技术分享图片

     技术分享图片


  ③使用mysqldump对数据库进行备份

      mysqldump -uroot -p password 数据库名 --lock-tables --flush-logs --master-data=2 > /path.sql

      使用上述方式对指定数据库中的所有表进行加锁,--flush-logs对二进制日志文件仅刷新一次,而不是重复刷新

      --master-data将二机制日志文件名和其所用到的时间的位置标识,追加到备份文件中,1为不注释,2为注释;

     

      保存在/path.sql路径下后,只需要进入指定备份的数据库,并使用source /path.sql即可还原备份数据;

      

      注意:上述方式需要事先创建同名数据库,然后进入该数据库执行source操作;

      可使用另一种musqldump格式,可将数据库的数据格式也备份下来,这样就无需创建数据库进行还原

      如:

         mysqldump -uroot -p password --database 数据库名 --lock-tables --flush-logs --master-data=2 > /path.sql


      对二进制日志进行备份操作,备份当前运行的位置

        mysql -e "show master status" > /path

      (这样在需要还原数据时可以得知在备份那个时间段后我们执行了哪些操作,从二进制日志文件可以看出,从而进行还原)


  ④percona xtrabackup实现数据库备份

       xtrabackup是一款由percona提供的世界上唯一一款开源实现innodb数据库热备份的工具

     其备份过程快速可靠,不会打断正在执行的事务,还原速度快,能够实现自动检验;

     MYISAM完全备份

     MYISAM因为不不支持事务,所以只能实现温备份,即在只读不可写的状况下的数据库备份,无法进行增量备份

     只能进行完全备份

     热备份:可读可写;

     温备份:只读不可写;

     冷备份:不可读不可写;

     安装xtrabackup,在阿里云中的epel源中

     #yum install -y percona xtrabackup

    

     使用innobackupex进行备份

       --user:指定备份数据库所用的用户;

       --password:备份数据库用户所用的密码;

       --host:备份数据库所在的主机;

       --socket:指定备份数据库所用的socket路径;

       如:

       技术分享图片

         因为之前有更改过数据库文件的默认路径,所以需要指定socket

       最后的路径为完全备份存储的路径,innobackex命令如果不特别指定格式的话,会以日期的形式将完全备份

       存储在该目录下

        #mkdir -pv /mysql/backup2

        #chown mysql:mysql /mysql/backup2

       技术分享图片

        进行还原准备操作,因为数据库在进行还原时,需要考虑在备份数据库时是否有事务在进行却尚未提交,是否有事务

      已经提交,但尚未同步到数据库当中,我们需要针对这类型的数据进行一致化操作,"准备"的主要作用正是通过回滚

      未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

      技术分享图片

       备份存储好之后,将数据全部删除,验证备份数据

       使用--copy-back选项即可,不管是完全备份,还是完全备份+增量备份的还原都是该选项进行

       技术分享图片

       

      注意:备份还原操作,需要在原数据库文件全部删除,mysqld进程不在运行的条件下执行

      且备份后的数据库文件权限均为root,需要更改为mysql

      技术分享图片

      启动服务,数据库完好无损。


      INNODB完全备份+增量备份

      Innodb存储引擎支持事务,其可支持温备份以及热备份;这也是innobackupex的一大特点;

      增量备份是基于上一次备份后产生的数据差别进行的备份;

      首先将数据库进行几次修改,并逐一进行完全备份,增量备份操作

      首次完全备份

      技术分享图片

      增量备份:

      技术分享图片

      技术分享图片

      准备操作:

      技术分享图片

      技术分享图片

      技术分享图片

      --redo-only:在最后一次增量备份时不使用

      技术分享图片

      准备结束后就可执行还原操作,删除原数据库内容,关闭数据库服务

      技术分享图片

      技术分享图片

     采用增量备份的方式,分两次添加了ClassID9,10数据

      技术分享图片

     

  MySQL主从复制:

    在MySQL中,支持单项,异步复制,而主从复制,则是由至少两台MySQL服务器实现,由一台MySQL

  作为主服务器,进行写入操作,而由另一台MySQL服务器作为从服务器进行读操作,主数据库中的数据

  会自动备份到从服务器,可以进行读写分离操作,以增强数据库的读写性能。而两台服务器之间使用不同

  的硬盘,当主服务器的硬盘损坏时,从服务器的数据就保留下来,进行数据恢复。

    主从服务器搭建的原理是,从服务器开启数据库线程sql_thread,io_thread并在/etc/my.cnf中构建中继

  日志,用于存放从主服务器复制过来的数据,io_thread线程是向主服务器之间搭建数据复制的桥梁,当主

  服务器中数据库的数据改变时,会写入二进制日志当中,由io_thread读取,并复制,需要由主服务器指定

  执行复制操作的数据库用户,并授权,在从服务器配置相关master,指定主服务器IP,复制数据库用户的

  账号,密码,由哪一个二进制日志文件开始复制,从该二进制文件当中的哪个位置开始复制等。当io_thread

  取回复制的数据库内容后,就存放在从服务器的中继日志当中,由sql_thread线程将中继日志中的数据写入

  到执行存储引擎,备份成功!

    主服务器配置:IP,172.16.25.101

    配置二进制文件,设置server_id

    技术分享图片

    

    对用户进行授权,设置用户复制权限

    技术分享图片

    

    主从复制需要将主服务器中的数据库完全备份到从服务器,否则会报错,无法进行主从复制

     主服务器:

     技术分享图片

     从服务器:

     技术分享图片

     

    从服务器配置:

      配置 relay_log中继日志,server_id在/etc/my.cnf中

   技术分享图片

   配置从服务器中的master指向

   技术分享图片

  master_host:主服务器IP.

  master_user:主服务器上进行复制的数据库用户。

  master_password:主服务器上进行复制的数据库用户密码。

  master_log_file:从主服务器上的哪个二进制日志文件开始复制。这里我选定的是最后一个二进制日志。

  master_log_pos:从主服务器上的指定二进制日志文件的哪个位置开始复制。


  这个时候可以使用show slave status\G查看

  技术分享图片

  两个线程均没有开启,现在开启线程则主从复制启用

  技术分享图片

  

  在主服务器数据库中插入一条数据,在查看从哪个服务器看是否进行了复制操作

  主服务器:

  技术分享图片

  从服务器:

  查看数据是否复制:

  技术分享图片

 

  MySQL主从复制之半同步:

    半同步复制,在对主从复制的基础上进行延伸,如主从复制时,主服务器在向从服务器传输数据时,从服务器

  突然宕机,则数据的传输会有两种情况,

     1.事务还未发送到从服务器上。

     2.事务已发到从服务器上,但客户端会接受到事务传送失败的消息,重新发送事务。

    所以针对于以上情况,MySQL数据库推出了全新的半同步机制,在从服务器宕机后,会有一段延迟时间让主服

  务器去联系从服务器,若没有联系上就写入主服务器自身,待从服务器联系上了再写入从服务器,这种异步加同

  步的操作就称之为半同步。

     半同步需要对主从服务器加载特殊的插件,插件保存在/usr/lib64/mysql/plugin中

   技术分享图片

   主服务器/etc/my.cnf

   技术分享图片

   从服务器/etc/my.cnf

   技术分享图片

   半同步复制则需要semisync_master.so,semisync_slave.so两种插件,分别加载到主从服务器

   主:

   技术分享图片

   从:

   技术分享图片

   将主从服务器的同步机制开启:

     技术分享图片

     技术分享图片

     将从服务器进行授权,指定master

     技术分享图片

     在从服务器上设置只读,read_only开启,并开启另一个MySQL会话并执行

     mysql>flush tables with read lock;

     只要该会话不关闭则读锁一直存在。

     

   如何查看半同步是否成功:

   rpl_semi_sync_master_clients为1

   技术分享图片

   看nakahcehur在主服务器处进行写操作查看是否同步到从服务器上

     技术分享图片

     从服务器:

     技术分享图片

    当关闭从服务器线程时

    主服务器再次写入数据,延迟十秒

    技术分享图片

    这是因为主服务器上的同步延迟设置为十秒,当十秒内无法联系上从服务器,就写入自身,如:

    技术分享图片

    timeout设置为10000毫秒,即为10s

    

    

  MySQL主主复制:

    主主复制,至少两台的数据库服务器 ,都作为主服务器,每一台服务器既是主服务器,也是对面主服务器

  的从服务器,实现原理同上,不同的是每一台服务器都需要有中继日志和二进制日志,因为每一台服务器都

  作为主服务器以及从服务器。主主复制相较于主从复制来说,多了一个mysql入口,相当于mysql的高可用

  但却需要考虑ID增长的问题。

    主主复制相对于主从复制,需要注意的是

    1.数据不一致,比如,一台服务器在进行更新操作,将35岁包括以上人的工资上调3000元,当数据库复制

    到另一台服务器,数据进行重写,写入到这台服务器时,如果这台服务器执行了给每一个员工增加1岁时

    这样刚巧有些人从34岁到了35岁的年龄的话,该数据就会不一致。目前只能使用一些数据恢复软件来进

    行排错.

    2.主键,当两台服务器同时都插入数据时,一些自动增长的如ID的属性可能会重合,这样会导致冲突,数

    据插入删除修改也将会失败。所以需要设置auto_incremental_incremental以及auto_incremental_offset

    用于设置每次自动增长的量,以及初次增长的基数。一般设置为奇数偶数相对应,这样就不会重合。

    

  主主服务器配置:

    主服务器1:IP 172.16.25.101

    /etc/my.cnf

    技术分享图片

    设置为奇数增长,针对于那些auto_increment的字段


    授权,指定master为172.16.25.102

    技术分享图片

    技术分享图片

    

    主服务器2:IP 172.16.25.102

    /etc/my.cnf

    技术分享图片

    

    授权,指定master为172.16.25.101

    技术分享图片

    技术分享图片

   

   分别为两台服务器开启线程

   mysql>start slave;

  

   分别从两台服务器进行读写操作:

   主服务器1插入一条数据到classes中

    技术分享图片

    因为设置的是奇数增长所以由11增长到13

  

    到主服务器2进行查看,并插入一条数据:

    技术分享图片

    由图可知复制成功,再在主服务器2中插入一条数据,并在主服务器1中可见。

    主主复制成功!

   

 

  

   

   

     







   

   

   


推荐阅读
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
author-avatar
手机用户2502856555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有