MySQL备份恢复第二篇

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: MySQL中的数据恢复功能相比Oracle来说还是要单薄一些,而Oracle中的数据恢复相对来说自动化的程度要高一些。不过Mysql的二进制日志提供的信息很丰富,而日志信息在Oracle中式完全屏蔽的,对于数据的恢复可能MySQL也很灵活。
MySQL中的数据恢复功能相比Oracle来说还是要单薄一些,而Oracle中的数据恢复相对来说自动化的程度要高一些。不过Mysql的二进制日志提供的信息很丰富,而日志信息在Oracle中式完全屏蔽的,对于数据的恢复可能MySQL也很灵活。
我们来模拟一下通过完整备份+增量备份(binlog)的方式来恢复。
首先我们来选择一个表new_test作为恢复的参考点。
mysql> select count(*)from new_test;
+----------+
| count(*) |
+----------+
|    32081 |
+----------+
1 row in set (0.02 sec)

查看一下binlog的情况,这个可以作为后续的恢复使用。
mysql> show binary logs ;
+-----------------------+-----------+
| Log_name              | File_size |
+-----------------------+-----------+
| mysql_oel1_bin.000001 |   3413422 |
| mysql_oel1_bin.000002 |       356 |
+-----------------------+-----------+
2 rows in set (0.00 sec)
mysql> \q
Bye
我们来做一个完全备份。
[mysql@oel1 full_bak]$ mysqldump -u root --lock-all-tables --master-data=2 --flush-logs --all-databases > full.sql
[mysql@oel1 full_bak]$ ll
total 1672
-rw-r--r-- 1 mysql dba 1704276 Apr 14 18:50 full.sql

做完备份,我们尝试做一些数据变更,这样模拟增量备份就更清楚了。
mysql> insert into new_test select *from new_test limit 1,5;
Query OK, 5 rows affected, 1 warning (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 1
mysql> select count(*)from new_test;
+----------+
| count(*) |
+----------+
|    32086 |
+----------+
1 row in set (0.02 sec)
可以看到在全量备份的时候指定刷新日志,日志增长了一个。
mysql> show binary logs;
+-----------------------+-----------+
| Log_name              | File_size |
+-----------------------+-----------+
| mysql_oel1_bin.000001 |   3413422 |
| mysql_oel1_bin.000002 |       408 |
| mysql_oel1_bin.000003 |       356 |
+-----------------------+-----------+
3 rows in set (0.00 sec)
这个时候我们可以备份binlog,为了更加简化,我们可以直接导出二进制日志中的sql
[mysql@oel1 data]$ mysqlbinlog  mysql_oel1_bin.000003 > /u02/mysql/bak/new_bak/new.sql
这个时候我们做了一个大胆的决定,删除所有的数据,直接到data目录下,全部删除,删删删。
[mysql@oel1 data]$ rm -rf *
这个时候直接去停Mysql都会有问题,我们来通过mysqladmin来停。
[mysql@oel1 data]$ mysqladmin -u root shutdown
[mysql@oel1 data]$ 150414 18:54:34 mysqld_safe mysqld from pid file /u02/mysql/data/oel1.pid ended
这个时候查看mysql进程的情况。
[mysql@oel1 data]$ pstree -p|grep mysql

做完破坏,任务开始了,我们来做恢复,先来尝试一下是否能启动Mysql,毫无疑问启动失败。
[mysql@oel1 mysql]$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1550 --log-bin=mysql_oel1_bin  --log-error=/u02/mysql/log/log_error.log   --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysql/log/slow_qeury.log &
[mysql@oel1 mysql]$ 150414 18:55:20 mysqld_safe Logging to '/u02/mysql/log/log_error.log'.
150414 18:55:21 mysqld_safe Starting mysqld daemon with databases from /u02/mysql/data
150414 18:55:22 mysqld_safe mysqld from pid file /u02/mysql/data/oel1.pid ended
[mysql@oel1 mysql]$ pstree -p|grep mysql
但是数据目录下生成了一些文件这是在初始化的时候创建的,但是最后无功而返。我们也不需要,可以直接删除。
[mysql@oel1 mysql]$ cd data
[mysql@oel1 data]$ ll
total 110724
-rw-rw---- 1 mysql dba       56 Apr 14 18:55 auto.cnf
-rw-rw---- 1 mysql dba 12582912 Apr 14 18:55 ibdata1
-rw-rw---- 1 mysql dba 50331648 Apr 14 18:55 ib_logfile0
-rw-rw---- 1 mysql dba 50331648 Apr 14 18:55 ib_logfile1
-rw-rw---- 1 mysql dba      120 Apr 14 18:55 mysql_oel1_bin.000001
-rw-rw---- 1 mysql dba       24 Apr 14 18:55 mysql_oel1_bin.index
[mysql@oel1 data]$ rm -rf *
这个时候我们来做初始化,就更重新弄创建MySQL一样。
[mysql@oel1 mysql]$ $MYSQL_BASE/scripts/mysql_install_db --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA  --port=1550
然后启动MySQL服务。
[mysql@oel1 mysql]$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1550 --log-bin=mysql_oel1_bin  --log-error=/u02/mysql/log/log_error.log   --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysql/log/slow_qeury.log &
启动的过程很快,从日志中看到启动成功。
[mysql@oel1 mysql]$ 150414 18:57:14 mysqld_safe Logging to '/u02/mysql/log/log_error.log'.
150414 18:57:14 mysqld_safe Starting mysqld daemon with databases from /u02/mysql/data
对应的mysql进程也都起来了。
[mysql@oel1 mysql]$ pstree -p|grep mysql
        |-mysqld_safe(20548)---mysqld(20781)-+-{mysqld}(20803)
        |                                    |-{mysqld}(20804)
        |                                    |-{mysqld}(20805)
        |                                    |-{mysqld}(20806)
        |                                    |-{mysqld}(20807)
        |                                    |-{mysqld}(20808)
        |                                    |-{mysqld}(20809)
        |                                    |-{mysqld}(20810)
        |                                    |-{mysqld}(20811)
        |                                    |-{mysqld}(20812)
        |                                    |-{mysqld}(20814)
        |                                    |-{mysqld}(20815)
        |                                    |-{mysqld}(20816)
        |                                    |-{mysqld}(20817)
        |                                    |-{mysqld}(20818)
        |                                    |-{mysqld}(20819)
        |                                    |-{mysqld}(20820)
        |                                    |-{mysqld}(20821)
        |                                    |-{mysqld}(20822)
        |                                    `-{mysqld}(20823)
这个时候来做恢复,先来恢复最初的全量备份。                
[mysql@oel1 full_bak]$ mysql -u root [mysql@oel1 full_bak]$ 
查看数据的情况,数据是最开始的状态了。
mysql> select count(*)from new_test;
+----------+
| count(*) |
+----------+
|    32081 |
+----------+
1 row in set (0.03 sec)
然后我们来部署最新的增量备份,就是二进制日志导出的sql文件
[mysql@oel1 new_bak]$ mysql -u root 数据就这样恢复了。
mysql> select count(*)from new_test;
+----------+
| count(*) |
+----------+
|    32086 |
+----------+
1 row in set (0.02 sec)
不过整个过程中,没有考虑实时的数据变化情况,对于binlog的备份就显得更为重要。要不很多最新的变更就会丢失。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
关系型数据库 MySQL 数据库
零基础带你学习MySQL—备份恢复数据库(三)
零基础带你学习MySQL—备份恢复数据库(三)
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
关系型数据库 MySQL 数据库
RDS for MySQL8.0物理备份恢复到本地自建数据库
此文章是centos7下的恢复流程。 1、安装MySQL8.0(采用yum方式安装):wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm yum localinstall mysql80-community-release-el7-1.noarch.rpm yum -y install yum-utils 默认安装的就是8.0版本yum install mysql-community-server 安装好了不要启动数据库。
|
关系型数据库 MySQL 机器人
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
|
运维 关系型数据库 MySQL
"MySQL运维精髓:深入解析数据库及表的高效创建、管理、优化与备份恢复策略"
【8月更文挑战第9天】MySQL是最流行的开源数据库之一,其运维对数据安全与性能至关重要。本文通过最佳实践介绍数据库及表的创建、管理与优化,包括示例代码。涵盖创建/删除数据库、表结构定义/调整、索引优化和查询分析,以及数据备份与恢复等关键操作,助您高效管理MySQL,确保数据完整性和系统稳定运行。
1026 0
|
SQL 监控 关系型数据库
MySQL 备份恢复
MySQL 备份恢复
|
SQL 存储 关系型数据库
mysql 中的备份恢复、分区分表、主从复制、读写分离
数据库 mysql 的灾难恢复,高并发必备知识
684 3
mysql 中的备份恢复、分区分表、主从复制、读写分离
|
关系型数据库 MySQL 测试技术
MySQL备份恢复-2
MySQL备份恢复-2
242 0
|
存储 安全 关系型数据库
MySQL备份恢复
MySQL备份恢复
248 0
|
SQL 安全 关系型数据库
RDS SQL Server 备份恢复到本地报错:Cannot find server certificate with thumbprint
RDS SQL Server 备份恢复到本地报错:Cannot find server certificate with thumbprint

推荐镜像

更多