• mysql逻辑备份与还原工具mysqldump


    (一)mysqldump介绍

    mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份:

    • 实例下的所有数据库
    • 某个或某几个数据库
    • 某个数据库中的表
    • 某个数据库中的表的某些记录

    mysqldump的备份结果集有两种文件:一种是将数据转换为标准的SQL语句,另一种是按照指定的分隔符,输出为特定格式的平面文件。

    (二)mysqldump的用法

    可以直接使用mysqldump命令查看mysqldump的用法

    [root@mysqlserver ~]# mysqldump
    Usage: mysqldump [OPTIONS] database [tables]
    OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
    OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
    For more options, use mysqldump --help

    mysqldump参数众多,如果要查看所有参数信息,可以使用命令:

    [root@mysqlserver ~]# mysqldump --help
    mysqldump  Ver 10.13 Distrib 5.7.27, for el7 (x86_64)
    ...

    (三)mysqldump参数

    mysqldump参数众多,常用参数如下:

    类型 参数 作用
    帮助参数 -? [--help] 显示帮助信息
    连接参数 -u  [--user] 指定连接的数据库用户
      -p  [--password] 指定用户的密码
      -S  [--socket] 指定socket文件连接数据库,只能用于本地连接
      -h  [--host] 指定要连接的主机名称或者IP
      -P  [--port] 指定连接数据库的端口
    字符集参数 --default-character-set 字符集参数,默认字符集utf-8
    导出数据控制参数 -A  [--all-databases] 导出所有数据库
      -B  [--databases] 导出指定的某个或某几个数据库
      --tables 参数值的格式为“db_name table_name”
      -w [--where] 导出符合条件的数据
      -n [--no-create-db] 不生成建库的脚本,即使指定--all-databases或--databases参数
      --ignore-table 指定表不导出,参数值格式为“--ignore-table=db_name.table_name”,每次只能指定一个值,如果要指定多个值,需多次使用--ignore-table参数
      -d  [--no-data] 只导出表结构,不导行数据
      -t  [--no-create-info] 只导行数据,不导表结构
    锁控制参数 -l   [--lock-tables] 对象在导出期间,会锁定该对象,此时其它会话无法对该表执行写入操作,默认启用
      --single-transaction

    在导出数据时会创建一致性的快照,在保证保证数据导出一致性的情况下,还不会阻塞其它会话的读写操作。
    但会影响alter table、drop table、rename table、truncate table等DDL语句

    该参数会创建一致性的备份,是十分重要的参数。备份的是在执行mysqldump这一时刻的数据库的状态,后续数据库变化不会备份

     其它参数 --force 在导出导入过程中,如果遇到错误,继续执行
      --master-data 这将导致二进制日志位置和文件名附加到输出文件中。如果等于1,则将其作为更改主命令打印;如果等于2,则将其作为注释打印。此选项将启用--lock-all-tables,除非也指定了--single-transaction(在这种情况下,全局读取锁定只在转储开始时占用很短的时间)。在任何情况下,日志上的任何操作都将在转储的确切时刻发生。选项自动关闭锁定表。

    (四)备份样例

    初始数据库信息:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | testdb             |
    +--------------------+

    (4.1)执行全库备份

    mysqldump -uroot -p123456 -h192.168.10.15 -P3306 --all-databases --single-transaction --force > all_db.sql

    注:information_schema是特殊的数据库,即使全备,也不会备份该数据库。

    (4.2)备份多个数据库

    # 备份多个数据库:mysql和testdb
    mysqldump -uroot -p123456 -h192.168.10.15 -P3306 --databases mysql testdb --single-transaction --force > multi_db.sql

    (4.3)备份单个数据库

    根据是否使用“--databases”参数,单个数据库的备份有2种方法。

    #方法1:备份单个数据库:testdb,使用--
    databases参数
    mysqldump -uroot -p123456 -h192.168.10.15 -P3306 --databases testdb --single-transaction --force > testdb_method1.sql
    
    # 方法2:备份单个数据库:testdb,不使用
    --
    databases参数
    mysqldump -uroot -p123456 -h192.168.10.15 -P3306 testdb --single-transaction --force > testdb_method2.sql

    两者的区别在于添加“--database”参数,则会在导出语句中包含建库语句。

    [root@mysqlserver mysqlbackup]# cat testdb_method1.sql |grep "CREATE DATABASE"
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */;
    
    [root@mysqlserver mysqlbackup]# cat testdb_method2.sql |grep "CREATE DATABASE"

    (4.4)导出数据库的某些表

    # 导出testdb的表test01,test02,目前来看,只能针对单个数据库的表进行导出
    mysqldump -uroot -p123456 -h192.168.10.15 -P3306 --tables testdb test01 test02  --single-transaction --force > tables.sql

    (五)还原样例

    还原操作相对来说较为简单,直接执行.sql文件即可。

    (5.1)执行全库还原,发现sys,和performance_schema没还原

    删除全部数据库

    mysql> show databases ;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | testdb             |
    +--------------------+
    5 rows in set (0.02 sec)
    
    mysql> drop database mysql;
    Query OK, 31 rows affected (0.02 sec)
    
    mysql> drop database performance_schema;
    Query OK, 87 rows affected (0.01 sec)
    
    mysql> drop database sys;
    Query OK, 101 rows affected (0.10 sec)
    
    mysql> drop database testdb;
    Query OK, 3 rows affected (0.01 sec)

    执行还原操作

    [root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 < all_db.sql

    查看还原结果:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | testdb             |
    +--------------------+

    (2)执行testdb数据库还原

    对于使用“--databses”参数创建的备份,直接执行sql语句,如果没有testdb数据库,则自动创建testdb数据库,再导入数据,如果有testdb数据库,则直接导入数据

    mysql> drop database testdb;
    Query OK, 3 rows affected (0.02 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    +--------------------+
    2 rows in set (0.03 sec)
    
    # 恢复数据
    [root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 < testdb_method1.sql 
    mysql: [Warning] Using a password on the command line interface can be insecure.
    
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | testdb             |
    +--------------------+
    3 rows in set (0.03 sec)

    对于没有使用“--databases”参数创建的备份,必须先创建数据库,再执行导入,导入时须指定数据库名称。

    # 如果没有创建数据库 或者 不指定数据库名称,则还原报错
    [root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 < testdb_method2.sql 
    mysql: [Warning] Using a password on the command line interface can be insecure.
    ERROR 1046 (3D000) at line 22: No database selected
    
    # 指定数据库名称,还原正常
    [root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 testdb< testdb_method2.sql 
    mysql: [Warning] Using a password on the command line interface can be insecure.

    【完】

  • 相关阅读:
    C#动态编译计算表达式的值 拓荒者
    Microsoft AJAX Library对 Error的扩展 拓荒者
    在分布式事务(MSDTC)中使用OLE DB数据库连接访问数据 拓荒者
    【转】ExtJS DateField 日期控件Format格式化 拓荒者
    自定义 Web 服务器控件 拓荒者
    Microsoft AJAX Library对 Array的扩展 拓荒者
    (转载)IE 浏览器的创新
    XUnit配置Resharper快捷键
    表现层模式MVC
    读Clean Code 数据结构和对象
  • 原文地址:https://www.cnblogs.com/lijiaman/p/12219603.html
Copyright © 2020-2023  润新知