物理备份 ,

冷备 cp 、tar

首先需要两台PC: mysql   121.40.25.207 
                                   mysql02   47.98.104.114
                               (  mysql 主机有mysql服务,且已有库表等数据,mysql02 为全新的主机。)
    1、mysql主机操作步骤:
        查看数据库目录:
            ls /var/lib/mysql
        拷贝数据库目录:
            cp -r /var/lib/mysql  /root/mysql.bak
        查看备份的数据库目录:
            ls /root/mysql.bak
        压缩数据库目录进行备份:
            tar -zcf /root/mysql.tar.gz /var/lib/mysql/*
        查看备份的数据库目录压缩包:    
            ls /root
        将主机1 的数据库目录传至主机2上:     
            scp -r /root/mysql.bak root@47.98.104.114:/opt/
            
    2、mysql02主机操作步骤:
        查看MySQL数据库端口是否启动:
            netstat -lntup | grep 3306
        如果在运行中,需先暂停数据库服务:
            systemctl stop mysqld
        删除数据库服务:
            rm -rf /var/lib/mysql
        将SCP过来的数据拷贝至/var/lib/mysql路径下:
            cp -r /opt/mysql.bak/ /var/lib/mysql
        查看拷贝后的目录:
            ls -l /var/lib/mysql
        更改属主属组,将root改为mysql:
            chown -R mysql:mysql /var/lib/mysql
        再次查看,主要确认更改后的属主属组是否正确:
            ls -l /var/lib/mysql
        查看MySQL数据库端口是否启动:(此时应该已启动)
            netstat -lntup | grep 3306
        登录数据库:

mysql -uroot -p

(此时加载的是主机mysql拷贝过来的授权库,则主机mysql管理员信息就记录在主机mysql的数据库中mysql库中的user表里, 所以此时密码应该输入的是主机mysql管理员的密码进行登录)
        
        查看数据库所有库,发现与主机mysql的数据是一致的:
            show databases;

热备 Xtrabackup

使用这个工具可以实现物理全备及 增量备份.

逻辑备份 mysqldump

中小企业全量备份策略的首选,备份策略一般是每日进行全量备份,备份会选择在流量低谷时执行,备份时可以选择锁表或者采用事务方式备份。

使用软件自带的备份程序(备份命令)对数据做备份,在执行备份命令时,会根据已有的数据生成对应的命令,把命令存放到指定的备份文件里。恢复时,执行备份文件里的命令恢复数据。
    数据备份策略:
        完全备份 : 备份所有数据
        增量备份 : 备份上次备份后,所有新产生的数据
        差异备份 : 备份完全备份后,所有新产生的数据

1、全量备份:

备份的格式:mysqldump  -uroot -p 密码 库名 > 目录/xxx.sql
            备份单个库:
                数据库名
            备份所有库:
                -all-databases 或 -a 
            备份单张表:
                数据库名 表名
            备份多个库:
                -b 数据库1 数据库2 
            
        恢复的格式: mysql -uroot -p 密码 库名 < 目录/xxx.sql
    
            
            例如:
            首先建立一个目录用来存放备份数据:
                mkdir /mybak
            其次,进行复制:
                mysqldump -uroot -p'admin@123' -A >/mybak/alldb.sql
                mysqldump -uroot -p'admin@123' l1 >/mybak/l1.sql
                mysqldump -uroot -p'admin@123' l1 t2 >/mybak/l1_t2.sql
                mysqldump -uroot -p'admin@123' -B l1 l2 >/mybak/twodb.sql
            测试,删除数据库中的库表数据:
                drop database l1;
                drop  database l2;
            最后进行数据恢复:
                mysql -uroot -p'admin@123' l1 </mybak/l1.sql
                mysql -uroot -p'admin@123' l2 </mybak/l2.sql
            恢复多个库时不需要提前创建相对应的库,备份文件中有建立库表的sql语句。
                mysql -uroot -p'admin@123' </mybak/alldb.sql

2、 增量备份 binlog

使用binlog日志实现数据的增量备份与恢复
        
        binlog日志:
            也叫二进制日志,是mysql服务日志的一种,默认是没有开启的。
            用于记录除查询之外的所有SQL命令
            也可以用来数据备份与恢复
            配置mysql主从同步的必要条件
        启用binlog日志
                vim /etc/my.cnf
                    [mysqld]
                    server_id=207
                    log_bin    #默认在 /var/lib/mysql,默认命名主机名-bin。随机六位数

systemctl restart mysqld
                #查看日志
                mysql> show master status;
                ls /var/lib/mysql
            
                #创建自定义目录,这个目录需要提前建立好,并且mysql用户要对这个文件有写入权限
                mkdir /mylog
                #修改配置:
                vim /etc/my.cnf
                    [mysqld]
                    server_id=207  
                    log_bin=/mylog/ly

chown mysql /mylog
                systemctl restart mysqld
                #查看日志
                mysql> show master status;  #查看日志名称是否发生变化
                 日志名称发生了变化:之前:mysql-bin.000001 
                                     之后:ly.000001 
                
        每次重启服务,都会产生一个新的二进制文件。
               刷新日志: flush logs;
               查看日志:ls /mylog

删除已有的binlog日志:
            清理日志:
                删除指定编号之前的binlog日志文件
                  格式:purge master logs to “binlog文件名”; 
                     purge master logs to "ly.000001";
                删除所有的binlog日志,重建新日志
                     reset master;
                此时,就会重头开始统计:
                        show master logs;
        查看binlog日志的内容:    
                mysql> show master status;
                +-----------+----------+--------------+------------------+-------------------+
                | File      | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
                +-----------+----------+--------------+------------------+-------------------+
                | ly.000001 |      154 |              |                  |                   |
                +-----------+----------+--------------+------------------+-------------------+
                1 row in set (0.00 sec)
            添加数据:
                insert into l1.t1 values("jim",26,"B180605","stu5@163.com");
                insert into l1.t1 values("xiaoming",27,"B180606","stu6@163.com");
                insert into l1.t1 values("xiaobai",23,"B180607","stu7@163.com");
            再次查看binlog日志内容,发现偏移量发生改变。
                mysql> show master status;
                +-----------+----------+--------------+------------------+-------------------+
                | File      | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
                +-----------+----------+--------------+------------------+-------------------+
                | ly.000001 |     1012 |              |                  |                   |
                +-----------+----------+--------------+------------------+-------------------+
                1 row in set (0.00 sec)
            查看binlog文件内容:
                # mysqlbinlog /mylog/ly.000001

使用binlog日志恢复数据:
            命令格式:
                mysqlbinlog /路径/日志文件 | mysql -uroot -p'admin@123'
        使用binlog日志恢复指定数据:
            格式:
                通过修改日志格式类型,可以看到sql语句,来决定那些需要备份,哪些不需要备份。
            日志格式类型:
                statement 报表模式
                row 行模式
                mixed 混合模式
            查看行模式:mysql> show variables like "binlog_format";
                        +---------------+-------+
                        | Variable_name | Value |
                        +---------------+-------+
                        | binlog_format | ROW   |
                        +---------------+-------+
                        1 row in set (0.01 sec)
            修改日志记录格式:
                vim /etc/my.cnf
                    [mysqld]
                    添加:
                    binlog_format=“mixed"
                systemctl restart mysqld
                清空日志:
                     reset master
                登录数据库,查看binlog,插入数据,在日志文件中能看到刚写入的数据:
                    mysql> show master status;
                        +-----------+----------+--------------+------------------+-------------------+
                        | File      | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
                        +-----------+----------+--------------+------------------+-------------------+
                        | ly.000001 |      154 |              |                  |                   |
                        +-----------+----------+--------------+------------------+-------------------+
                        1 row in set (0.00 sec)

mysql> insert into l1.t1 values("luo",28,"B180608","stu8@163.com");
                        Query OK, 1 row affected (0.01 sec)

mysql> show master status;
                        +-----------+----------+--------------+------------------+-------------------+
                        | File      | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
                        +-----------+----------+--------------+------------------+-------------------+
                        | ly.000001 |      454 |              |                  |                   |
                        +-----------+----------+--------------+------------------+-------------------+
                        1 row in set (0.00 sec)

mysql> system mysqlbinlog /mylog/ly.000001 | grep -i insert
                    insert into l1.t1 values("luo",28,"B180608","stu8@163.com")

日志文件通过 偏移量、时间点 区分记录的多条命令
                格式: 
                    mysqlbinlog 选项 /路径/日志文件 | mysql -uroot -p 密码
                    
                指定偏移量:
                    –start-position=偏移量开始值 --stop-position=偏移量结束值
                指定时间点:
                    –start-datetime=“yyyy-mm-dd hh:mm:ss” --stop-datetime=“yyyy-mm-dd hh:mm:ss”
                
                例如:
                删除刚才添加的那条数据:
                mysql> delete from l1.t1 where name="luo";
                Query OK, 1 row affected (0.01 sec)
                
                查看命令是否写入成功:
                # mysqlbinlog /mylog/ly.000001 | grep -i delete
                delete from l1.t1 where name="luo"
                
                日志文件传输,mysql主机拷贝至mysql02主机上:
                # scp /mylog/ly.000001 root@47.98.104.114:/tmp
                root@47.98.104.114's password:
                ly.000001                                                            100%  729    96.2KB/s   00:00
                
                在mysql02主机上查看:
                [root@mysql02 ~]# mysqlbinlog /tmp/ly.000001
                 展示执行sql的binlog信息,截取如下:
            
                # at 454
                #221027 18:17:33 server id 207  end_log_pos 519 CRC32 0x32cd22b1        GTID [commit=yes]
                SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
                # at 519
                #221027 18:17:33 server id 207  end_log_pos 594 CRC32 0x10f9b1f4        Query   thread_id=3     exec_time=0    error_code=0
                SET TIMESTAMP=1666865853/*!*/;
                BEGIN
                /*!*/;
                # at 594
                #221027 18:17:33 server id 207  end_log_pos 698 CRC32 0x205df697        Query   thread_id=3     exec_time=0    error_code=0
                SET TIMESTAMP=1666865853/*!*/;
                delete from l1.t1 where name="luo"
                /*!*/;
                # at 698
                #221027 18:17:33 server id 207  end_log_pos 729 CRC32 0x576de941        Xid = 29
                COMMIT/*!*/;
                DELIMITER ;
                # End of log file
                ROLLBACK /* added by mysqlbinlog */;
                /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
                /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
            
            上述注释:# at 519  为开始偏移量
                      #221027  为系统时间
                      # at 698  为语句偏移量698
                      COMMIT  为提交

这里我们使用的是开始偏移量和语句提交后的偏移量(提交后语句才会生效)

总结:

物理备份与逻辑备份的区别:

MySQL 的物理备份、逻辑备份、增量备份相关推荐

  1. MySQL-日志、完全备份恢复和增量备份恢复

    MySQL-日志.完全备份恢复和增量备份恢复 一.MySQL日志管理 1.MySQL日志文件 错误日志 二进制日志 中继日志 慢查询日志 二.查看日志状态命令 三.备份的重要性 1.造成数据丢失的原因 ...

  2. oracle每天一次差异备份,Oracle的差异增量备份和累积增量备份(zt)

    在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份 ...

  3. 达梦V8累积增量备份和差异增量备份

    累积增量备份和差异增量备份差异 BACKUP DATABASE INCREMENT CUMULATIVE(累积) 累积增量备份的基备份,只是一个完全的备份集, 简单理解:从数据库全备起,到当前时刻所有 ...

  4. oracle 每天 增量备份,Oracle的差异增量备份和累积增量备份

    在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份 ...

  5. 累计增量备份策略_RMAN增量备份中的差异增量和累积增量

    RMAN 增量备份中的差异增量和累积增量 1 .概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份上级备 ...

  6. Oracle 中关于差异增量备份与累积增量备份原理与区别

     Rman 一个强大的功能是支持增量备份,增量备份中心思想就是减少备份的数据量,使用增量备份后就可以不用从头开始备份了,只需要备份自上次已备份之后的数据块开始进行数据备份. 关于Oracle 增量备份 ...

  7. mysql数据库常规备份还原 (常用增量备份)2018_lcf

    数据库的资料对于一个企业来说,是一个极其重要的资源, 所以做好数据备份是至关重要的. 下面是主要讲常规备份还原方式, 至于保用第三方专用备份工具会单独写个篇幅. 1-->常见数据备份方式 • 物 ...

  8. mysql备份工具Xtrabackup增量备份还原图解

    Xtrabackup增量备份还原图解 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. XtraBackup是Percona 提供的免费 ...

  9. mysql的增量备份方法_Mysql 增量备份,全部备份实现方法以及自动化脚本

    前情摘要 自己作死干了一件特别蠢的事情(具体略) 然后开始研究如何进行增量备份 增量备份 原理 mysql 有个 binlog 的功能,会记录所有的用户的操作,可以依靠这个,配合全备份,将数据库回滚到 ...

  10. Mysql 备份工具XtraBackup增量备份

    安装:[url]http://donald-draper.iteye.com/admin/blogs/2314832[/url] 全量备份:[url]http://donald-draper.itey ...

最新文章

  1. 嵌入式处理器分类现状
  2. Unbuntu 自动重启MySQL
  3. echarts 地图自定义图标_DMKB08:Echarts 分段设色
  4. JavaSelenium处理页面Table以及Table中随机位置的数据
  5. sql与nosql_SQL Server JSON函数:NoSQL与关系世界之间的桥梁
  6. nfs挂载hdfs,实现云存储
  7. Visio—如何画矩形虚线边框?
  8. linux/unix 上那些炫酷的命令行工具(一)
  9. 自创解决键盘最后退出的问题
  10. 一个号支持多个移动运营商
  11. java外文文献_spring框架外文文献 PDF 下载
  12. 【计算机基础】防火墙
  13. 地下室计算机房冷量,34平米用多大风管机
  14. 做电商网站php开发的流程,如何开发电商平台-电商开发第一步
  15. 微积分中几个重要的不等式:Jensen不等式、平均值不等式、Holder不等式、Schwarz不等式、Minkovski不等式 及其证明
  16. windows7装机必备软件及设置
  17. BLAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )-SLAM不学无术小问题
  18. javascript中getmonth()的问题
  19. cyk的小学数学题 小学数学
  20. npm yarn 包管理机制

热门文章

  1. 2021-05-28 新唐M051芯片--串口0,定时器
  2. GIt部署到linux服务器
  3. nodejs笔记2——使用绝对路径来获取上级目录文件
  4. 学成在线 第1天 讲义-项目概述 CMS接口开发 三
  5. NCC多尺寸模板匹配MATLAB
  6. Vue首屏加载速度优化,我用这几个技巧提升80%以上
  7. 虹软android工程师,虹软人脸识别技术公开课开讲!AI工程师如何快速进阶
  8. Java查找字符串中子串
  9. 通达信公式编程:反包及其原理
  10. Unity网络(二)-Unity3D中的网络