一 ,数据备份与恢复

步骤一:使用mysqldump进行逻辑备份

1)备份MySQL服务器上的所有库

将所有的库备份为mysql-all.sql文件:

  1. [[email protected] ~]# mysqldump -u root -p --all-databases > /root/alldb.sql
  2. Enter password:                                              //验证口令
  3. [[email protected] mysql]# file /root/alldb.sql         //确认备份文件类型

查看备份文件alldb.sql的部分内容:

# grep -vE '^/|^-|^$' /root/alldb.sql  | head -20

Mysql的数据备份与恢复---------

2)只备份指定的某一个库

将userdb库备份为userdb.sql文件:

  1. [[email protected] ~]# # mysqldump -u root -p jingcaiwang > jingcaiwang.sql
  2. Enter password:                                 //验证口令

查看备份文件userdb.sql的部分内容:

Mysql的数据备份与恢复---------

3)同时备份指定的多个库

同时备份mysql、userdb库,保存为mysql+userdb.sql文件:

  1. [[email protected] ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql
  2. Enter password:                                 //验证口令
  3. Mysql的数据备份与恢复---------

查看备份文件userdb.sql的部分内容:

  1. [[email protected] ~]# grep '^CREATE DATA' /root/mysql+userdb.sql

 

 

步骤二:使用mysql命令从备份中恢复数据库、表

以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。

1)创建名为userdb2的新库

mysql> create database userdb2;

Mysql的数据备份与恢复---------

 

2)导入备份文件,在新库中重建表及数据

  1. [[email protected] ~]# mysql -u root -p userdb2 < /root/userdb.sql
  2. Enter password:                                 //验证口令

eg:

# mysql -uroot -p jingcaiwang < /root/jingcaiwang-v2.sql                              //使用备份数据导入

Mysql的数据备份与恢复---------

3)确认新库正常,启用新库

  1. mysql> USE userdb2;                             //切换到新库
  2. mysql> show tables;

Mysql的数据备份与恢复---------

4)废弃或删除旧库

  1. mysql> DROP DATABASE userdb;

-----------------------------------------------------------------------------------------------------------

二 ,使用binlog日志

步骤一:启用binlog日志

1)调整/etc/my.cnf配置,并重启服务

  1. [[email protected] ~]# vim /etc/my.cnf
  2. [mysqld]
  3. .. ..
  4. log-bin-index=mysql-bin                             //启用二进制日志,并指定前缀
  5. server_id=1
  6. binlog_format=STATEMENT
  7. //在Mysql5.7中,binlog日志格式默认为ROW,但它不记录sql语句上下文相关信息。需要将binlog日志格式修改为STATEMENT
  8. .. ..
  9. [[email protected] ~]# systemctl restart mysqld.service

2)确认binlog日志文件

新启用binlog后,每次启动MySQl服务都会新生成一份日志文件:

  1. [[email protected] ~]# ls /var/lib/mysql/mysql-bin.*
  2. /var/lib/mysql/mysql-bin.000001 /var/lib/mysql/mysql-bin.index

Mysql的数据备份与恢复---------

Mysql的数据备份与恢复---------

 

步骤二:利用binlog日志重做数据库操作

1)执行数据库表添加操作

创建db1·库tb1表,表结构自定义:

  1. mysql> CREATE DATABASE db1;
  2.  
  3. mysql> USE db1;
  4. Database changed
  5. mysql> CREATE TABLE tb1(
  6. -> id int(4) NOT NULL,name varchar(24)
  7. -> );

Mysql的数据备份与恢复---------

Mysql的数据备份与恢复---------

步骤三:通过binlog日志恢复表记录

binlog会记录所有的数据库、表更改操作,所以可在必要的时候重新执行以前做过的一部分数据操作,但对于启用binlog之前已经存在的库、表数据将不适用。

根据上述“恢复被删除的3条表记录”的需求,应通过mysqlbinlog工具查看相关日志文件,找到删除这些表记录的时间点,只要恢复此前的SQL操作(主要是插入那3条记录的操作)即可。

1)查看mysql-bin.000002日志内容

Mysql的数据备份与恢复---------

Mysql的数据备份与恢复---------

Mysql的数据备份与恢复---------

2) 执行指定Pos节点范围内的sql命令恢复数据

根据上述日志分析,只要恢复从2014.01.12 20:12:14到2014.01.12 20:13:50之间的操作即可。可通过mysqlbinlog指定时间范围输出,结合管道交给msyql命令执行导入重做:

  1. [[email protected] ~]# mysqlbinlog \
  2. --start-datetime="2017-04-12 12:06:55" \
  3. --stop-datetime="2017-04-12 12:07:23" \
  4. /var/lib/mysql/mysql-bin.000002 | mysql -u root -p
  5. Enter password:                                  //验证口令

 

Mysql的数据备份与恢复---------

相关文章:

  • 2021-12-13
  • 2022-01-03
  • 2021-12-19
  • 2021-12-14
  • 2021-05-29
猜你喜欢
  • 2021-12-19
  • 2022-01-31
  • 2022-01-31
  • 2021-06-24
  • 2021-10-03
相关资源
相似解决方案