一、为什么要备份数据

在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种.

  • 硬件故障

  • 软件故障

  • 自然灾害

  • 黑客攻击

  • 误操作 (占比最大)

所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据, 备份数据的策略要根据不同的应用场景进行定制, 大致有几个参考数值, 我们可以根据这些数值从而定制符合特定环境中的数据备份策略

  • 能够容忍丢失多少数据

  • 恢复数据需要多长时间

  • 需要恢复哪一些数据

二、数据的备份类型

数据的备份类型根据其自身的特性主要分为以下几组

  • 完全备份

  • 部分备份

    完全备份指的是备份整个数据集( 即整个数据库 )、部分备份指的是备份部分数据集(例如: 只备份一个表)

而部分备份又分为以下两种

  • 增量备份

  • 差异备份

    增量备份指的是备份自上一次备份以来(增量或完全)以来变化的数据; 特点: 节约空间、还原麻烦 
    差异备份指的是备份自上一次完全备份以来变化的数据 特点: 浪费空间、还原比增量备份简单

示意图如下:

三、MySQL备份数据的方式

MySQl中我们备份数据一般有几种方式

  • 热备份

  • 温备份

  • 冷备份

    热备份指的是当数据库进行备份时, 数据库的读写操作均不是受影响 
    温备份指的是当数据库进行备份时, 数据库的读操作可以执行, 但是不能执行写操作 
    冷备份指的是当数据库进行备份时, 数据库不能进行读写操作, 即数据库要下线

MySQL中进行不同方式的备份还要考虑存储引擎是否支持

    • MyISAM

      热备 ×

      温备 √

      冷备 √

    • InnoDB

      热备 √

      温备 √

      冷备 √

      我们在考虑完数据在备份时, 数据库的运行状态之后还需要考虑对于MySQL数据库中数据的备份方式

      物理备份一般就是通过tar,cp等命令直接打包复制数据库的数据文件达到备份的效果 
      逻辑备份一般就是通过特定工具从数据库中导出数据并另存备份(逻辑备份会丢失数据精度)

      • 物理备份

      • 逻辑备份

四、备份需要考虑的问题

定制备份策略前, 我们还需要考虑一些问题

我们要备份什么?

一般情况下, 我们需要备份的数据分为以下几种

  • 数据

  • 二进制日志, InnoDB事务日志

  • 代码(存储过程、存储函数、触发器、事件调度器)

  • 服务器配置文件

备份工具

这里我们列举出常用的几种备份工具 
mysqldump : 逻辑备份工具, 适用于所有的存储引擎, 支持温备、完全备份、部分备份、对于InnoDB存储引擎支持热备 
cp, tar 等归档复制工具: 物理备份工具, 适用于所有的存储引擎, 冷备、完全备份、部分备份 
lvm2 snapshot: 几乎热备, 借助文件系统管理工具进行备份 
mysqlhotcopy: 名不副实的的一个工具, 几乎冷备, 仅支持MyISAM存储引擎 
xtrabackup: 一款非常强大的InnoDB/XtraDB热备工具, 支持完全备份、增量备份, 由percona提供

五、设计合适的备份策略

针对不同的场景下, 我们应该制定不同的备份策略对数据库进行备份, 一般情况下, 备份策略一般为以下三种

  • 直接cp,tar复制数据库文件

  • mysqldump+复制BIN LOGS

  • lvm2快照+复制BIN LOGS

  • xtrabackup

以上的几种解决方案分别针对于不同的场景

  1. 如果数据量较小, 可以使用第一种方式, 直接复制数据库文件

  2. 如果数据量还行, 可以使用第二种方式, 先使用mysqldump对数据库进行完全备份, 然后定期备份BINARY LOG达到增量备份的效果

  3. 如果数据量一般, 而又不过分影响业务运行, 可以使用第三种方式, 使用lvm2的快照对数据文件进行备份, 而后定期备份BINARY LOG达到增量备份的效果

  4. 如果数据量很大, 而又不过分影响业务运行, 可以使用第四种方式, 使用xtrabackup进行完全备份后, 定期使用xtrabackup进行增量备份或差异备份

六、实战演练

1.使用cp进行备份

#查看数据库信息

  1. mysql> SHOW DATABASES; #查看当前的数据库, 我们的数据库为employees
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | monkey |
  7. | mysql |
  8. | test |
  9. +--------------------+
  10. rows in set (0.00 sec)

mysql> use monkey
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables
-> ;
+------------------+
| Tables_in_monkey |
+------------------+
| locations |
| pseudohash |
| t1 |
| t2 |
| unsent_emails |
+------------------+
5 rows in set (0.00 sec)

mysql> select * from t1;
+----+-------+-----+
| id | name | age |
+----+-------+-----+
| 1 | Jelly | 28 |
| 2 | Jerry | 30 |
+----+-------+-----+
2 rows in set (0.00 sec)

mysql>

#向数据库施加读锁

  1. mysql> FLUSH TABLES WITH READ LOCK; #向所有表施加读锁
  2. Query OK, rows affected (0.00 sec)

#备份数据文件

  1. [root@A04-Test- ~]# mkdir /root/backup #创建文件夹存放备份数据库文件
  2. [root@A04-Test- ~]# cp -a /usr/local/mysql/* /root/backup/ #保留权限的拷贝源数据文件
  3. [root@A04-Test-172 ~]# ls /root/backup #查看目录下的文件
  4. total 122916
  5. -rw-r----- 1 mysql mysql 56 Jan 5 17:03 auto.cnf
  6. -rw-r----- 1 mysql mysql 373 Jan 24 14:15 ib_buffer_pool
  7. -rw-r----- 1 mysql mysql 12582912 Feb 5 11:08 ibdata1
  8. -rw-r----- 1 mysql mysql 50331648 Feb 5 11:08 ib_logfile0
  9. -rw-r----- 1 mysql mysql 50331648 Jan 5 17:03 ib_logfile1
  10. -rw-r----- 1 mysql mysql 12582912 Feb 5 11:08 ibtmp1
  11. drwxr-x--- 2 mysql mysql 4096 Feb 5 11:08 monkey
  12. drwxr-x--- 2 mysql mysql 4096 Jan 5 17:03 mysql
  13. -rw-r----- 1 mysql mysql 6 Jan 24 14:15 mysqld.pid
  14. drwxr-x--- 2 mysql mysql 4096 Jan 5 17:03 performance_schema
  15. drwxr-x--- 2 mysql mysql 12288 Jan 5 17:03 sys

#模拟数据丢失并恢复

  1. [root@A04-Test- ~]# rm -rf /usr/local/mysql/data/* #删除数据库的所有文件
  2. [root@A04-Test-172 ~]# service mysqld restart #重启MySQL, 如果是编译安装的应该不能启动, 如果rpm安装则会重新初始化数据库
  3. mysql> show databases; #发现数据丢失了
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | information_schema |
  8. | mysql |
  9. | performance_schema |
  10. | sys |
  11. +--------------------+
  12. 6 rows in set (0.00 sec)
  13. [root@A04-Test-172 backup]# cp -a /root/mysqldumpbackup/backup.sql /usr/local/mysql/data/ #将备份数据拷贝回去
  14. [root@A04-Test-172 ~]# service mysqld restart #重启MySQL,
  15. mysql> show databases; #查看数据是否恢复
  16. +--------------------+
  17. | Database |
  18. +--------------------+
  19. | information_schema |
  20. | TEST1 |
  21. | monkey |
  22. | mysql |
  23. | performance_schema |
  24. | sys |
  25. +--------------------+
  26. 6 rows in set (0.00 sec)
  27.  
  28. mysql> use monkey
  29. Reading table information for completion of table and column names
  30. You can turn off this feature to get a quicker startup with -A
  31.  
  32. Database changed
  33. mysql> show tables
  34. -> ;
  35. +------------------+
  36. | Tables_in_monkey |
  37. +------------------+
  38. | locations |
  39. | pseudohash |
  40. | t1 |
  41. | t2 |
  42. | unsent_emails |
  43. +------------------+
  44. 5 rows in set (0.00 sec)
  45.  
  46. mysql> select * from t1;
  47. +----+-------+-----+
  48. | id | name | age |
  49. +----+-------+-----+
  50. | 1 | Jelly | 28 |
  51. | 2 | Jerry | 30 |
  52. +----+-------+-----+
  53. 2 rows in set (0.00 sec)
  54.  
  55. mysql>

2.使用mysqldump+复制BINARY LOG备份

我们通过mysqldump进行一次完全备份, 再修改表中的数据, 然后再通过binary log进行恢复。

二进制日志需要在mysql配置文件中添加 log_bin=on 开启。

  1. [root@A04-Test- backup]# more /etc/my.cnf
  2. [client]
  3. port =
  4. socket = /tmp/mysql.sock
  5.  
  6. [mysqld]
  7. user=mysql
  8. port =
  9. server_id =
  10. socket=/tmp/mysql.sock
  11. basedir =/usr/local/mysql
  12. datadir =/usr/local/mysql/data
  13. pid-file=/usr/local/mysql/data/mysqld.pid
  14. log-error=/usr/local/mysql/log/mysql-error.log
  15. log-bin=on #开启二进制日志

mysqldump命令介绍

mysqldump是一个客户端的逻辑备份工具, 可以生成一个重现创建原始数据库和表的SQL语句, 可以支持所有的存储引擎, 对于InnoDB支持热备。

  1. #基本语法格式
  2.  
  3. shell> mysqldump [options] db_name [tbl_name ...] 恢复需要手动CRATE DATABASES
  4. shell> mysqldump [options] --databases db_name ... 恢复不需要手动创建数据库
  5. shell> mysqldump [options] --all-databases 恢复不需要手动创建数据库
  6.  
  7. 其他选项:
  8. -E, --events: 备份事件调度器
  9. -R, --routines: 备份存储过程和存储函数
  10. --triggers: 备份表的触发器; --skip-triggers
  11. --master-date[=value]
  12. : 记录为CHANGE MASTER TO 语句、语句不被注释
  13. : 记录为注释的CHANGE MASTER TO语句
  14. 基于二进制还原只能全库还原
  15.  
  16. --flush-logs: 日志滚动
  17. 锁定表完成后执行日志滚动

查看数据库信息

  1. mysql> SHOW DATABASES;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | monkey |
  7. | mysql |
  8. | performance_schema |
  9. | sys |
  10. +--------------------+
  11. rows in set (0.00 sec)
  12. mysql> use monkey;
  13. Reading table information for completion of table and column names
  14. You can turn off this feature to get a quicker startup with -A
  15.  
  16. Database changed
  17. mysql> SHOW TABLES;
  18. +------------------+
  19. | Tables_in_monkey |
  20. +------------------+
  21. | locations |
  22. | pseudohash |
  23. | t1 |
  24. | t2 |
  25. | unsent_emails |
  26. +------------------+
  27. rows in set (0.00 sec)
  28.  
  29. mysql> SELECT COUNT(*) FROM t1;
  30. +----------+
  31. | COUNT(*) |
  32. +----------+
  33. | |
  34. +----------+
  35. row in set (0.00 sec)

使用mysqldump备份数据库

  1. [root@A04-Test- data]# mysql -uroot -p -e 'SHOW MASTER STATUS' #查看二进制文件的状态,并记录Position中的数字
  2. Enter password:
  3. +-----------+----------+--------------+------------------+-------------------+
  4. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  5. +-----------+----------+--------------+------------------+-------------------+
  6. | on. | | | | |
  7. +-----------+----------+--------------+------------------+-------------------+
  1. [root@A04-Test- mysqldumpbackup]# mysqldump -uroot -p --all-databases --lock-all-tables > backup.sql #备份数据库到backup.sql文件中
  2. [root@A04-Test- mysqldumpbackup]# ll
  3. total
  4. -rw-r--r-- root root Mar : backup.sql
  1. [root@A04-Test- mysqldumpbackup]# mysql -uroot -p
  2. Enter password:
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is
  5. Server version: 5.7.-log MySQL Community Server (GPL)
  6.  
  7. Copyright (c) , , Oracle and/or its affiliates. All rights reserved.
  8.  
  9. Oracle is a registered trademark of Oracle Corporation and/or its
  10. affiliates. Other names may be trademarks of their respective
  11. owners.
  12.  
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  14.  
  15. mysql> CREATE DATABASE TEST1; #创建一个数据库
  16. Query OK, row affected (0.02 sec)
  17.  
  18. mysql> SHOW MASTER STATUS; #记录下现在的Position
  19. +-----------+----------+--------------+------------------+-------------------+
  20. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  21. +-----------+----------+--------------+------------------+-------------------+
  22. | on. | 45 | | | |
  23. +-----------+----------+--------------+------------------+-------------------+
  24. row in set (0.00 sec)
  25.  
  26. mysql>
  1. [root@A04-Test-172 mysql-bin]# cp -a /usr/local/mysql/log/mysql-bin. /root/mysqldumpbackup/mysql-bin #复制二进制日志文件到备份目录下
  1. [root@A04-Test-172]# service mysql.server stop #停止MySQL
    [root@A04-Test-172 data]# rm -rf /usr/local/mysql/data/* #删除所有数据文件
  1. #启动MySQL, 如果是编译安装的应该不能启动(需重新初始化), 如果rpm安装则会重新初始化数据库
  1. #再次清除/usr/local/mysql/data目录下的文件,执行数据库初始化,初始化的密码在日志文件中(/usr/local/mysql/log/mysql-error.log)
    [root@A04-Test-172 mysql]# bin/mysqld --initialize --user=mysql #初始化MySQL
  2.  
  3. #启动mysql
    [root@A04-Test-172 tmp]# service mysql.server start
  1. #登录MySQL
    [root@A04-Test-172 tmp]# mysql -uroot -p
  2.  
  3. #重置MySQL密码

mysql> set password for root@localhost = password('mysql');
  Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> flush privileges;
  Query OK, 0 rows affected (0.03 sec)

  1.  
  2. mysql> SHOW DATABASES; #查看数据是否丢失
  3. +--------------------+
  4. | Database |
  5. +--------------------+
  6. | information_schema |
  7. | mysql |
  8. | performance_schema |
  9. | sys |
  10. +--------------------+
  11. rows in set (0.00 sec)

mysql> SET sql_log_bin=OFF;        #暂时关闭二进制
Query OK, 0 rows affected (0.00 sec)

mysql>source /root/mysqldumpbackup/backup.sql

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql> SET sql_log_bin=ON;                 #开启二进制日志
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW DATABASES;                     #查看数据是否恢复,可以看到mysql已经恢复了,但缺少TEST1
+--------------------+
| Database |
+--------------------+
| information_schema |
| monkey |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

  1. #通过二进制日志增量恢复数据
  1. [root@A04-Test- mysqldumpbackup]# mysqlbinlog -uroot -p --start-position=154 --stop-position=456 mysql-bin.000009
  2. Enter password:
  3. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
  4. /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
  5. DELIMITER /*!*/;
  6. # at
  7. # :: server id end_log_pos CRC32 0x7bbbba85 Start: binlog v , server v 5.7.-log created :: at startup
  8. # Warning: this binlog is either in use or was not closed properly.
  9. ROLLBACK/*!*/;
  10. BINLOG '
  11. e2unWg8BAAAAdwAAAHsAAAABAAQANS43LjE4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  12. AAAAAAAAAAAAAAAAAAB7a6daEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
  13. AYW6u3s=
  14. '/*!*/;
  15. # at
  16. # :: server id end_log_pos CRC32 0xb59c4546 Anonymous_GTID last_committed= sequence_number=
  17. SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
  18. # at
  19. # :: server id end_log_pos CRC32 0xe7b92856 Query thread_id= exec_time= error_code=
  20. SET TIMESTAMP=/*!*/;
  21. SET @@session.pseudo_thread_id=/*!*/;
  22. SET @@session.foreign_key_checks=, @@session.sql_auto_is_null=, @@session.unique_checks=, @@session.autocommit=/*!*/;
  23. SET @@session.sql_mode=/*!*/;
  24. SET @@session.auto_increment_increment=, @@session.auto_increment_offset=/*!*/;
  25. /*!\C utf8 *//*!*/;
  26. SET @@session.character_set_client=,@@session.collation_connection=,@@session.collation_server=/*!*/;
  27. SET @@session.lc_time_names=/*!*/;
  28. SET @@session.collation_database=DEFAULT/*!*/;
  29. FLUSH TABLES
  30. /*!*/;
  31. # at
  32. # :: server id end_log_pos CRC32 0xa7afc716 Anonymous_GTID last_committed= sequence_number=
  33. SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
  34. # at
  35. # :: server id end_log_pos CRC32 0x6a6a4762 Query thread_id= exec_time= error_code=
  36. SET TIMESTAMP=/*!*/;
  37. SET @@session.sql_mode=/*!*/;
  38. CREATE DATABASE TEST1
  39. /*!*/;
  40. SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
  41. DELIMITER ;
  42. # End of log file
  43. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
  44. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
  45.  
  46. 另一种方法,将解析后的二进制日志文件保存到一个txt文件中,然后进行导入操作!

[root@A04-Test-172 mysqldumpbackup]# mysqlbinlog --start-position=154 --stop-position=456 mysql-bin.000009 > mysqlbinlog.txt
[root@A04-Test-172 mysqldumpbackup]# mysql -uroot -pmysql
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.18-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> source /root/mysqldumpbackup/mysqlbinlog.txt
Query OK, 0 rows affected (0.00 sec)

#查看是否恢复

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TEST1 |
| monkey |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)

mysql>

3.使用lvm2快照备份数据

LVM快照简单来说就是将所快照源分区一个时间点所有文件的元数据进行保存,如果源文件没有改变,那么访问快照卷的相应文件则直接指向源分区的源文件,如果源文件发生改变,则快照卷中与之对应的文件不会发生改变。快照卷主要用于辅助备份文件。 这里只简单介绍。

具体可参见:http://www.360doc.com/content/13/0522/16/11801283_287305129.shtml

4. Xtrabackup

使用xtrabackup使用InnoDB能够发挥其最大功效, 并且InnoDB的每一张表必须使用单独的表空间, 我们需要在配置文件中添加 innodb_file_per_table = ON 来开启.

(1)安装Xtrabackup

  1. yum -y install perl-DBD-MySQL
  2. rpm -ivh libev-4.03-.el6.x86_64.rpm
  3. rpm -ivh percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm

依赖包下载地址:https://pan.baidu.com/s/1HF_FyrZAv4PZio8mJiOXpQ

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

  1. 备份过程快速、可靠;

  2. 备份过程不会打断正在执行的事务;

  3. 能够基于压缩等功能节约磁盘空间和流量;

  4. 自动实现备份检验;

  5. 还原速度快;

我们这里使用xtrabackup的前端配置工具innobackupex来实现对数据库的完全备份

使用innobackupex备份时, 会调用xtrabackup备份所有的InnoDB表, 复制所有关于表结构定义的相关文件(.frm)、以及MyISAMMERGECSVARCHIVE表的相关文件, 同时还会备份触发器和数据库配置文件信息相关的文件, 这些文件会被保存至一个以时间命名的目录.。

  1. mkdir /root/xtrabackup #新建备份目录
  2. innobackupex --user=root --password=mysql xtrabackup/ #开始备份
  1. #备份时显示的信息
    180319 :: Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
  2. xtrabackup: The latest check point (for incremental): ''
  3. xtrabackup: Stopping log copying thread.
  4. . :: >> log scanned up to ()
  5.  
  6. :: Executing UNLOCK TABLES
  7. :: All tables unlocked
  8. :: [] Copying ib_buffer_pool to /root/xtrabackup/--19_11--/ib_buffer_pool
  9. :: [] ...done
  10. :: Backup created in directory '/root/xtrabackup/2018-03-19_11-18-43/'
  11. MySQL binlog position: filename 'mysql-bin.000014', position ''
  12. :: [] Writing /root/xtrabackup/--19_11--/backup-my.cnf
  13. :: [] ...done
  14. :: [] Writing /root/xtrabackup/--19_11--/xtrabackup_info
  15. :: [] ...done
  16. xtrabackup: Transaction log of lsn () to () was copied.
  17. :: completed OK!

[root@A04-Test-172 xtrabackup]# ll
total 4
drwxr-x--- 7 root root 4096 Mar 19 11:18 2018-03-19_11-18-43

[root@A04-Test-172 xtrabackup]# pwd
/root/xtrabackup

一般情况, 备份完成后, 数据不能用于恢复操作, 因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此, 此时的数据文件仍不一致, 所以我们需要”准备”一个完全备份。

  1. #开始完全备份
    [root@A04-Test- ~]# innobackupex --apply-log --user=root --password=mysql /root/xtrabackup/--19_11--/
  1. xtrabackup: starting shutdown with innodb_fast_shutdown =
  2. InnoDB: FTS optimize thread exiting.
  3. InnoDB: Starting shutdown...
  4. InnoDB: Shutdown completed; log sequence number
  5. InnoDB: Number of pools:
  6. xtrabackup: using the following InnoDB configuration for recovery:
  7. xtrabackup: innodb_data_home_dir = .
  8. xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
  9. xtrabackup: innodb_log_group_home_dir = .
  10. xtrabackup: innodb_log_files_in_group =
  11. xtrabackup: innodb_log_file_size =
  12. InnoDB: PUNCH HOLE support available
  13. InnoDB: Mutexes and rw_locks use GCC atomic builtins
  14. InnoDB: Uses event mutexes
  15. InnoDB: GCC builtin __sync_synchronize() is used for memory barrier
  16. InnoDB: Compressed tables use zlib 1.2.
  17. InnoDB: Number of pools:
  18. InnoDB: Using CPU crc32 instructions
  19. InnoDB: Initializing buffer pool, total size = 100M, instances = , chunk size = 100M
  20. InnoDB: Completed initialization of buffer pool
  21. InnoDB: page_cleaner coordinator priority: -
  22. InnoDB: Setting log file ./ib_logfile101 size to MB
  23. InnoDB: Setting log file ./ib_logfile1 size to MB
  24. InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
  25. InnoDB: New log files created, LSN=
  26. InnoDB: Highest supported file format is Barracuda.
  27. InnoDB: Log scan progressed past the checkpoint lsn
  28. InnoDB: Doing recovery: scanned up to log sequence number (%)
  29. InnoDB: Doing recovery: scanned up to log sequence number (%)
  30. InnoDB: Database was not shutdown normally!
  31. InnoDB: Starting crash recovery.
  32. InnoDB: Removed temporary tablespace data file: "ibtmp1"
  33. InnoDB: Creating shared tablespace for temporary tables
  34. InnoDB: Setting file './ibtmp1' size to MB. Physically writing the file full; Please wait ...
  35. InnoDB: File './ibtmp1' size is now MB.
  36. InnoDB: redo rollback segment(s) found. redo rollback segment(s) are active.
  37. InnoDB: non-redo rollback segment(s) are active.
  38. InnoDB: 5.7. started; log sequence number
  39. xtrabackup: starting shutdown with innodb_fast_shutdown =
  40. InnoDB: FTS optimize thread exiting.
  41. InnoDB: Starting shutdown...
  42. InnoDB: Shutdown completed; log sequence number
  43. :: completed OK!
  1. [root@A04-Test- --19_11--]# ll #查看备份文件
  2. total
  3. -rw-r----- root root Mar : backup-my.cnf
  4. -rw-r----- root root Mar : ib_buffer_pool
  5. -rw-r----- root root Mar : ibdata1
  6. -rw-r----- root root Mar : ib_logfile0
  7. -rw-r----- root root Mar : ib_logfile1
  8. -rw-r----- root root Mar : ibtmp1
  9. drwxr-x--- root root Mar : monkey
  10. drwxr-x--- root root Mar : mysql
  11. drwxr-x--- root root Mar : performance_schema
  12. drwxr-x--- root root Mar : sys
  13. drwxr-x--- root root Mar : TEST1
  14. -rw-r----- root root Mar : xtrabackup_binlog_info
  15. -rw-r----- root root Mar : xtrabackup_checkpoints
  16. -rw-r----- root root Mar : xtrabackup_info
  17. -rw-r----- root root Mar : xtrabackup_logfile

恢复数据:

  1. #删除MySQL数据目录下的文件
    [root@A04-Test- --19_11--]# rm -rf /usr/local/mysql/data/*
  1. #开始恢复数据,不用启动该数据库也可以还原
    [root@A04-Test- --19_11--]# innobackupex --copy-back --user=root --password=mysql /root/xtrabackup/--19_11--/
  1. :: [] ...done
  2. :: [] Copying ./performance_schema/global_status.frm to /usr/local/mysql/data/performance_schema/global_status.frm
  3. :: [] ...done
  4. :: [] Copying ./performance_schema/replication_applier_configuration.frm to /usr/local/mysql/data/performance_schema/replication_applier_configuration.frm
  5. :: [] ...done
  6. :: [] Copying ./performance_schema/events_transactions_summary_by_thread_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_transactions_summary_by_thread_by_event_name.frm
  7. :: [] ...done
  8. :: [] Copying ./performance_schema/events_waits_summary_by_user_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_waits_summary_by_user_by_event_name.frm
  9. :: [] ...done
  10. :: [] Copying ./performance_schema/events_transactions_history.frm to /usr/local/mysql/data/performance_schema/events_transactions_history.frm
  11. :: [] ...done
  12. :: [] Copying ./performance_schema/events_stages_current.frm to /usr/local/mysql/data/performance_schema/events_stages_current.frm
  13. :: [] ...done
  14. :: [] Copying ./performance_schema/events_statements_summary_by_user_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_statements_summary_by_user_by_event_name.frm
  15. :: [] ...done
  16. :: [] Copying ./performance_schema/memory_summary_by_host_by_event_name.frm to /usr/local/mysql/data/performance_schema/memory_summary_by_host_by_event_name.frm
  17. :: [] ...done
  18. :: [] Copying ./performance_schema/events_waits_history.frm to /usr/local/mysql/data/performance_schema/events_waits_history.frm
  19. :: [] ...done
  20. :: [] Copying ./performance_schema/socket_summary_by_event_name.frm to /usr/local/mysql/data/performance_schema/socket_summary_by_event_name.frm
  21. :: [] ...done
  22. :: [] Copying ./performance_schema/session_variables.frm to /usr/local/mysql/data/performance_schema/session_variables.frm
  23. :: [] ...done
  24. :: [] Copying ./performance_schema/events_statements_summary_by_thread_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_statements_summary_by_thread_by_event_name.frm
  25. :: [] ...done
  26. :: [] Copying ./performance_schema/events_transactions_summary_by_host_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_transactions_summary_by_host_by_event_name.frm
  27. :: [] ...done
  28. :: [] Copying ./performance_schema/events_statements_history_long.frm to /usr/local/mysql/data/performance_schema/events_statements_history_long.frm
  29. :: [] ...done
  30. :: [] Copying ./performance_schema/events_statements_summary_global_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_statements_summary_global_by_event_name.frm
  31. :: [] ...done
  32. :: [] Copying ./TEST1/db.opt to /usr/local/mysql/data/TEST1/db.opt
  33. :: [] ...done
  34. :: completed OK!
  1. [root@A04-Test- data]# ll #查看MySQL数据目录下是否数据已恢复
  2. total
  3. -rw-r----- root root Mar : ib_buffer_pool
  4. -rw-r----- root root Mar : ibdata1
  5. -rw-r----- root root Mar : ib_logfile0
  6. -rw-r----- root root Mar : ib_logfile1
  7. -rw-r----- root root Mar : ibtmp1
  8. drwxr-x--- root root Mar : monkey
  9. drwxr-x--- root root Mar : mysql
  10. drwxr-x--- root root Mar : performance_schema
  11. drwxr-x--- root root Mar : sys
  12. drwxr-x--- root root Mar : TEST1
  13. -rw-r----- root root Mar : xtrabackup_info
  14. [root@A04-Test- data]# pwd
  15. /usr/local/mysql/data
  16.  
  17. #修改data目录所属用户和组
  18. [root@A04-Test- data]# chown -R mysql:mysql /usr/local/mysql/data
  1. [root@A04-Test- data]# mysql -uroot -p
  2. Enter password:
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is
  5. Server version: 5.7.-log MySQL Community Server (GPL)
  6.  
  7. Copyright (c) , , Oracle and/or its affiliates. All rights reserved.
  8.  
  9. Oracle is a registered trademark of Oracle Corporation and/or its
  10. affiliates. Other names may be trademarks of their respective
  11. owners.
  12.  
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  14.  
  15. mysql> show databases; #查看数据是否恢复
  16. +--------------------+
  17. | Database |
  18. +--------------------+
  19. | information_schema |
  20. | TEST1 |
  21. | monkey |
  22. | mysql |
  23. | performance_schema |
  24. | sys |
  25. +--------------------+
  26. rows in set (0.00 sec)

增量备份

  1. #新建两个数据库TEST1和TEST2
  2.  
  3. mysql> CREATE DATABASE TEST2;
  4. Query OK, row affected (0.02 sec)
  5.  
  6. mysql> show databases;
  7. +--------------------+
  8. | Database |
  9. +--------------------+
  10. | information_schema |
  11. | TEST1 |
  12. | TEST2 |
  13. | monkey |
  14. | mysql |
  15. | performance_schema |
  16. | sys |
  17. +--------------------+
  18. rows in set (0.00 sec)
  19.  
  20. mysql>
  1. #开始增量备份
    [root@A04-Test- ~]# innobackupex --user=root --password=mysql --incremental /root/xtrabackup/ --incremental-basedir=/root/xtrabackup/2018-03-19_11-18-43/
  1. :: [] ...done
  2. :: [] Copying ./performance_schema/session_variables.frm to /root/xtrabackup/--19_13--/performance_schema/session_variables.frm
  3. :: [] ...done
  4. :: [] Copying ./performance_schema/events_statements_summary_by_thread_by_event_name.frm to /root/xtrabackup/--19_13--/performance_schema/events_statements_summary_by_thread_by_event_name.frm
  5. :: [] ...done
  6. :: [] Copying ./performance_schema/events_transactions_summary_by_host_by_event_name.frm to /root/xtrabackup/--19_13--/performance_schema/events_transactions_summary_by_host_by_event_name.frm
  7. :: [] ...done
  8. :: [] Copying ./performance_schema/events_statements_history_long.frm to /root/xtrabackup/--19_13--/performance_schema/events_statements_history_long.frm
  9. :: [] ...done
  10. :: [] Copying ./performance_schema/events_statements_summary_global_by_event_name.frm to /root/xtrabackup/--19_13--/performance_schema/events_statements_summary_global_by_event_name.frm
  11. :: [] ...done
  12. :: [] Copying ./TEST1/db.opt to /root/xtrabackup/--19_13--/TEST1/db.opt
  13. :: [] ...done
  14. :: Finished backing up non-InnoDB tables and files
  15. :: [] Writing /root/xtrabackup/--19_13--/xtrabackup_binlog_info
  16. :: [] ...done
  17. :: Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
  18. xtrabackup: The latest check point (for incremental): ''
  19. xtrabackup: Stopping log copying thread.
  20. . :: >> log scanned up to ()
  21.  
  22. :: Executing UNLOCK TABLES
  23. :: All tables unlocked
  24. :: [] Copying ib_buffer_pool to /root/xtrabackup/--19_13--/ib_buffer_pool
  25. :: [] ...done
  26. :: Backup created in directory '/root/xtrabackup/2018-03-19_13-29-21/'
  27. MySQL binlog position: filename 'mysql-bin.000015', position ''
  28. :: [] Writing /root/xtrabackup/--19_13--/backup-my.cnf
  29. :: [] ...done
  30. :: [] Writing /root/xtrabackup/--19_13--/xtrabackup_info
  31. :: [] ...done
  32. xtrabackup: Transaction log of lsn () to () was copied.
  33. :: completed OK!
  1. #查看备份文件

[root@A04-Test-172 xtrabackup]# ll
total 8
drwxr-x--- 8 root root 4096 Mar 19 13:03 2018-03-19_11-18-43         #全量备份
drwxr-x--- 8 root root 4096 Mar 19 13:29 2018-03-19_13-29-21         #第一次增量备份

  1. [root@A04-Test- --19_13--]# ll
  2. total
  3. -rw-r----- root root Mar : backup-my.cnf
  4. -rw-r----- root root Mar : ib_buffer_pool
  5. -rw-r----- root root Mar : ibdata1.delta
  6. -rw-r----- root root Mar : ibdata1.meta
  7. drwxr-x--- root root Mar : monkey
  8. drwxr-x--- root root Mar : mysql
  9. drwxr-x--- root root Mar : performance_schema
  10. drwxr-x--- root root Mar : sys
  11. drwxr-x--- root root Mar : TEST1
  12. drwxr-x--- root root Mar : TEST2
  13. -rw-r----- root root Mar : xtrabackup_binlog_info
  14. -rw-r----- root root Mar : xtrabackup_checkpoints
  15. -rw-r----- root root Mar : xtrabackup_info
  16. -rw-r----- root root Mar : xtrabackup_logfile

BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/root/xtrabackup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。

另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。

需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

整理增量备份:

  1. # 2018-03-19_11-18-43为全量备份目录
  1. [root@A04-Test- ~]# innobackupex --user=root --password=mysql --apply-log --redo-only /root/xtrabackup/--19_11--43
  2. xtrabackup: Using bytes for buffer pool (set by --use-memory parameter)
  3. InnoDB: PUNCH HOLE support available
  4. InnoDB: Mutexes and rw_locks use GCC atomic builtins
  5. InnoDB: Uses event mutexes
  6. InnoDB: GCC builtin __sync_synchronize() is used for memory barrier
  7. InnoDB: Compressed tables use zlib 1.2.
  8. InnoDB: Number of pools:
  9. InnoDB: Using CPU crc32 instructions
  10. InnoDB: Initializing buffer pool, total size = 100M, instances = , chunk size = 100M
  11. InnoDB: Completed initialization of buffer pool
  12. InnoDB: page_cleaner coordinator priority: -
  13. InnoDB: Highest supported file format is Barracuda.
  14.  
  15. xtrabackup: starting shutdown with innodb_fast_shutdown =
  16. InnoDB: Starting shutdown...
  17. InnoDB: Shutdown completed; log sequence number
  18. InnoDB: Number of pools:
  19. :: completed OK!
  1. # 2018-03-19_13-29-21为增量备份目录
  1. [root@A04-Test- ~]# innobackupex --user=root --password=mysql --apply-log --redo-only /root/xtrabackup/--19_11-- --incremental-dir=/root/xtrabackup/--19_13--
  2.  
  3. :: [] ...done
  4. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_transactions_history.frm to ./performance_schema/events_transactions_history.frm
  5. :: [] ...done
  6. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_stages_current.frm to ./performance_schema/events_stages_current.frm
  7. :: [] ...done
  8. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_statements_summary_by_user_by_event_name.frm to ./performance_schema/events_statements_summary_by_user_by_event_name.frm
  9. :: [] ...done
  10. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/memory_summary_by_host_by_event_name.frm to ./performance_schema/memory_summary_by_host_by_event_name.frm
  11. :: [] ...done
  12. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_waits_history.frm to ./performance_schema/events_waits_history.frm
  13. :: [] ...done
  14. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/socket_summary_by_event_name.frm to ./performance_schema/socket_summary_by_event_name.frm
  15. :: [] ...done
  16. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/session_variables.frm to ./performance_schema/session_variables.frm
  17. :: [] ...done
  18. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_statements_summary_by_thread_by_event_name.frm to ./performance_schema/events_statements_summary_by_thread_by_event_name.frm
  19. :: [] ...done
  20. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_transactions_summary_by_host_by_event_name.frm to ./performance_schema/events_transactions_summary_by_host_by_event_name.frm
  21. :: [] ...done
  22. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_statements_history_long.frm to ./performance_schema/events_statements_history_long.frm
  23. :: [] ...done
  24. :: [] Copying /root/xtrabackup/--19_13--/performance_schema/events_statements_summary_global_by_event_name.frm to ./performance_schema/events_statements_summary_global_by_event_name.frm
  25. :: [] ...done
  26. :: [] Copying /root/xtrabackup/--19_13--/TEST1/db.opt to ./TEST1/db.opt
  27. :: [] ...done
  28. :: [] Copying /root/xtrabackup/--19_13--//xtrabackup_binlog_info to ./xtrabackup_binlog_info
  29. :: [] ...done
  30. :: [] Copying /root/xtrabackup/--19_13--//xtrabackup_info to ./xtrabackup_info
  31. :: [] ...done
  32. :: completed OK
  1. [root@A04-Test- ~]# rm -rf /usr/local/mysql/data/* #删除数据目录下文件
  2.  
  3. #开始恢复
  1. #2018-03-19_11-18-43为全量备份目录
  1. [root@A04-Test-172 ~]# innobackupex --copy-back /root/xtrabackup/2018-03-19_11-18-43
    name.frm
    180319 15:00:30 [01] ...done
    180319 15:00:30 [01] Copying ./performance_schema/events_waits_history.frm to /usr/local/mysql/data/performance_schema/events_waits_history.frm
    180319 15:00:30 [01] ...done 180319 15:00:30 [01] Copying ./performance_schema/socket_summary_by_event_name.frm to /usr/local/mysql/data/performance_schema/socket_summary_by_event_name.frm
    180319 15:00:30 [01] ...done 180319 15:00:30 [01] Copying ./performance_schema/session_variables.frm to /usr/local/mysql/data/performance_schema/session_variables.frm
    180319 15:00:30 [01] ...done 180319 15:00:30 [01] Copying ./performance_schema/events_statements_summary_by_thread_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_statements_summary_by_thread_by_event_name.frm
    180319 15:00:30 [01] ...done 180319 15:00:30 [01] Copying ./performance_schema/events_transactions_summary_by_host_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_transactions_summary_by_host_by_event_name.frm
    180319 15:00:30 [01] ...done 180319 15:00:30 [01] Copying ./performance_schema/events_statements_history_long.frm to /usr/local/mysql/data/performance_schema/events_statements_history_long.frm
    180319 15:00:30 [01] ...done
    180319 15:00:30 [01] Copying ./performance_schema/events_statements_summary_global_by_event_name.frm to /usr/local/mysql/data/performance_schema/events_statements_summary_global_by_event_name.frm
    180319 15:00:30 [01] ...done
    180319 15:00:30 [01] Copying ./TEST1/db.opt to /usr/local/mysql/data/TEST1/db.opt 180319 15:00:30 [01] ...done
    180319 15:00:30 completed OK!
  2.  
  3. #修改data数据目录所属用户和组
    [root@A04-Test-172 mysql]# chown -R mysql:mysql /usr/local/mysql/data
  1. #杀掉僵尸进程
    [root@A04-Test- data]# ps -ef|grep mysql
  2. root : pts/ :: tail -f /usr/local/mysql/log/mysql-error.log
  3. root : pts/ :: /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysqld.pid
  4. mysql : pts/ :: /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/log/mysql-error.log --pid-file=/usr/local/mysql/data/mysqld.pid --socket=/tmp/mysql.sock --port=
  5. root : pts/ :: tail -f mysql-error.log
  6. root : pts/ :: grep mysql
  7. [root@A04-Test- data]# kill -
  8. [root@A04-Test- data]# ps -ef|grep mysql
  9. root : pts/ :: tail -f /usr/local/mysql/log/mysql-error.log
  10. root : pts/ :: tail -f mysql-error.log
  11. root : pts/ :: grep mysql
  12.  
  13. #启动数据库
  14. [root@A04-Test- data]# service mysql.server start
  15. Starting MySQL.[ OK ]
  1. #查看数据是否已恢复
    mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | TEST1 |
  7. | TEST2 |
  8. | monkey |
  9. | mysql |
  10. | performance_schema |
  11. | sys |
  12. +--------------------+
  13. rows in set (0.00 sec)
  14.  
  15. mysql> exit

七、总结

备份方法 备份速度 恢复速度 便捷性 功能 一般用于
cp 一般、灵活性低 很弱 少量数据备份
mysqldump 一般、可无视存储引擎的差异 一般 中小型数据量的备份
lvm2快照 一般、支持几乎热备、速度快 一般 中小型数据量的备份
xtrabackup 较快 较快 实现innodb热备、对存储引擎有要求 强大 较大规模的备份

八、常见问题解答

1.启动mysql时报错:

  1. [root@A04-Test- ~]# service mysql.server start
  2. Starting MySQL..The server quit without updating PID file (/usr/local/mysql/data/mysqld.pid).[FAILED]

【解决方法】

(1)查看MySQL日志,报错如下:

  1. .
  2. 2018-03-19T05:12:30.839470Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
  3. 2018-03-19T05:12:30.839551Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
  4. 2018-03-19T05:12:30.839569Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
  5. 2018-03-19T05:12:31.440444Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
  6. 2018-03-19T05:12:31.440568Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
  7. 2018-03-19T05:12:31.440587Z 0 [ERROR] Failed to initialize plugins.
  8. 2018-03-19T05:12:31.440596Z 0 [ERROR] Aborting
  9.  
  10. --19T05::.440618Z [Note] Binlog end
  11. --19T05::.440745Z [Note] Shutting down plugin 'CSV'
  12. --19T05::.441182Z [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

(2)根据上述错误信息,加上百度之。判断是/usr/local/mysql/data目录没有写权限。经核查,/usr/local/mysql/data目录的所属用户和组均为root.故授权之。

  1. chown -R mysql:mysql /usr/local/mysql/data

(3)查看是否有僵尸进程,有则kill -9

ps -ef|grep mysql

(4)重新启动数据库,完美启动

  1. [root@A04-Test- backup]# service mysql.server start
  2. Starting MySQL..[ OK ]

【MySQL】MySQL备份和恢复的更多相关文章

  1. mysql 数据库备份,恢复。。。。

    mysql 数据备份,恢复,恢复没写,这里只写了备份... 先暂作记录吧! 备份:表结构和数据完全分开,默认有一个文件会记录所有表的结构,然后表中数据的备份 如果超过分卷的大小则会分成多个文件,不然则 ...

  2. MySQL的备份和恢复

    MySQL的备份和恢复 备份数据:mysqldump –uroot –p123456 dbname table [option] > dbname.sql mysqldump常用参数option ...

  3. MySQL的备份和恢复-基于LVM快照的备份(lvm-snapshot)

    MySQL的备份和恢复-基于LVM快照的备份(lvm-snapshot) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是快照卷 如上图所示,原卷和快照卷可以不一样大,因为 ...

  4. MySQL的备份和恢复-mysqldump

    MySQL的备份和恢复-mysqldump 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么需要备份 1>.做灾难恢复 天有不测风云嘛,如果你的服务器被黑客攻击了(比 ...

  5. mysql 完整备份和恢复

    mysql 完整备份和恢复   一.MySQL完整备份操作 1.直接打包数据库文件夹 创建数据库auth: MariaDB [(none)]> create database auth;Quer ...

  6. JSP 实现 之 调用java方法实现MySQL数据库备份和恢复

    package cn.qm.db; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.IOEx ...

  7. MySQL没有备份怎么恢复被drop的表(利用undrop-for-innodb)

    介绍:     也许大家都难以理解,这么重要的数据为啥不备份(或者备份不可用)?而且还任性的drop table了.显然有备份是最好的,但是它们并不总是可用的.这种情况令人恐惧,但并非毫无希望.在许多 ...

  8. innobackupex做MySQL增量备份及恢复【转】

    创建备份用户 mysql> grant process,reload,lock tables,replication client on *.* to 'backup'@'localhost' ...

  9. mysql 数据库备份和恢复

    物理备份对比逻辑备份 物理备份是指直接复制包含数据的文件夹和文件.这种类型的备份适用于大数据量且非常重要,遇到问题需要快速回复的数据库. 逻辑备份保存能够代表数据库信息的逻辑结构(CREATE DAT ...

  10. Linux下mysql定时备份及恢复

    备份 1.数据库定时备份工作脚本:(日期时间作为名称的压缩文件,解压开是sql脚本) /root/backup/script/backup_mysql.sh 2.备份输出路径: /root/backu ...

随机推荐

  1. 疯狂使用 leancloud (投稿文章)

    疯狂使用 leancloud 本文章是投稿文章,已在 leancloud 微信公众号发表. 这里是原文,内容有调整. 3年,从工程师到创始人 觉得不错可以点这里进行 leancloud 注册 项目背景 ...

  2. babel7中 corejs 和 corejs2 的区别

    babel7中 corejs 和 corejs2 的区别 最近在给项目升级 webpack4 和 babel7,有一些改变但是变化不大.具体过程可以参考这篇文章 webpack4:连奏中的进化.只是文 ...

  3. window.open()弹出窗口参数说明及居中设置

    window.open()可以弹出一个新的窗口,并且通过参数控制窗口的各项属性. 最基本的弹出窗口代码 window.open('httP://codeo.cn/'); window.open()各参 ...

  4. MySQL-基本概念

    一.Mysql逻辑架构 引用自<高性能Mysql> 二.并发控制 读写锁:读锁是共享的,写锁是排他的,会阻塞其他的写锁和读锁. 锁粒度:表锁.行级锁 三.事务 事务(ACID特性):原子性 ...

  5. SharpSvn操作 -- 获取Commit节点列表

    /// <summary> /// 获取工作目录的所有节点,包括子目录 /// </summary> /// <param name="workingCopyD ...

  6. 3D模型预处理(格式转换:obj转换为gltf)

    在cesium中导入模型需要的是gltf或glb格式的文件,cesium官方提供了obj转gltf文件的工具,一个obj2gltf的库,地址为https://github.com/Analytical ...

  7. 在DataGridView控件中显示下拉列表

    实现效果: 知识运用: DataGridViewComboBoxColumn类 //通过该类可以创建下拉列表样式的列 实现代码: private void Form1_Load(object send ...

  8. Bootstrap历练实例:带列表组的面板

    带列表组的面板 我们可以在任何面板中包含列表组,通过在 <div> 元素中添加 .panel 和 .panel-default 类来创建面板,并在面板中添加列表组.您可以从 列表组 一章中 ...

  9. JS数据结构及算法(一) 堆栈

    最近在看<学习JavaScript数据结构与算法>这本书,感觉自己又涨知识了 哈哈... 现在将自己看的做个总结,也是巩固理解. 栈:先进后出,新添加和待删除的元素都保存在栈顶.可以用数组 ...

  10. paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(二段式)

    1.Two always block style with combinational outputs(Good Style) 对应的代码如下: 2段式总结: (1)the combinational ...