mysqldump 备份还原

Mysqldump

         Mysqldump客户端程序执行逻辑备份,可以生产一组SQL语句,这些语句可以执行重现原始数据库对象定义和表数据;它可以转存一个或多个数据库进行备份或者转移到其他数据库。Mysqldump命令也能生成csv文件或其他分隔符的文本,后者XML格式文件;

         Mysqldump必须有SELECT 选项for dumptable,SHOW VIEW权限for 存储视图,TRIGGER 存储触发器;

         导入dump文件的时候,你必须有这些语句的执行权限;

性能和可伸缩性考虑

         Mysqldump的优点包括查看或编辑输出前的方便和灵活性,你可以为了开发或者DBA工作克隆一个数据库,或者生产轻量级的测试数据库。对于大量的数据,即使备份花费时间少,但是恢复的时候也会花费大量时间;

调用语法

         数据量大的情况下,推荐物理备份,以原有格式备份数据文件,并且快速导入;

         如果你的表主要是InnoDB的,或者Myisam和InnoDB混合的,考虑使用Mysqlbackup命令。它为InnDB提供最小的中断性能。Mysqlbakcup也可以备份Myisam和其他引擎;

         Mysqldump现在可以一行行地获取表内容,或者获取整个表数据,获取的时候会将数据加载到内存中,数据量大的情况下,加载过多数据会发生问题,这个时候就可以--quick(--opt)选项来一行行地获取数据;

 

语法调用:

         有三种方法使用mysqldump:

         Mysqldump[option] db_name [tb1_name …]     备份库中某些表

         Mysqldump[option] --databases db_name…       备份指定数据库

         Mysqldump[option] --all-databases                      备份整个数据库

                  查看你的版本语法支持:mysqldump --help

选项-语法(字母顺序)

         --add-drop-database

         --add-drop-table

         --add-drop-trigger

         --add-locks                       对每个转存的表进行LOCK和UNLOCK操作;

         --all-databases                         备份所有数据库

         --bind-address                          指定mysql地址

         --comment                       增加注释

         --compress                       压缩所有信息

         --databases                      将所有名称参数解释为数据库名称

         --debug                              记录debug log信息

         --debug-check                          退出的时候打印debug信息

         --default-character-set  指定默认字符集

         --delete-master-logs      dump后删除所有二进制日志

         --flush-logs                       开始存储之前刷新日志文件

         --force                               及时发生错误也继续执行

         --help                                 显示帮助信息

         --host                                 连接的host地址

         --ignore-error                  忽略指定错误

         --ignore-table          忽略指定表

         --lock-all-tables      锁定所有库的所有表

         --lock-tables            dump前,锁定所有表

         --log-error                记录告警和错误

         --no-create-db                 不记录create database语句

         --no-create-info     不记录create table语句

         --no-data                          不记录表内容

         --order-by-primary 以主键或第一个唯一索引排序

         --password               当连接服务器的时候输入密码

         --port                        指定端口

         --protocol                指定协议

         --quick

         --replace                  

         --secure-auth          不以老的格式发送密码给服务器

         --set-charset            指定字符集

         --single-transaction       

         --skip-add-drop-table     每个CREATE TABKE前,跳过DROPTABLE

         --skip-add-lock                         不加锁

         --skip-comments             不加注释

         --skip-set-charset            跳过字符集设置

         --skip-trigger                    跳过触发器复制

         --ssl                            启用加密连接

         --ssl-mode                以安全模式连接

         --triggers                  复制触发器

         --user                       

         --verbose

         --where                    

         --xml                          产生xml文件

 

连接选项

         --bind-address=ip_address   连接到指定地址

    --compress, -C     压缩serverclient间发送的所有信息

    --host=host_name, -h host_name

    --password[=password], -p[password]

         --port=port_num, -P port_num

         --protocol={TCP|SOCKET|PIPE|MEMORY}

    --socket=path, -S path

    --user=user_name, -u user_name   提供用户名

    max_allowed_packet   C/S间通信支持的最大buffer,默认24M最大1G

        

选项-文件

         --defaults-file=file_name   使用file_name而不是全路径名

   

 

案例:

         备份整个数据库文件
                  shell> mysqldump db_name > backup-file.sql

         将dump文件加载到sql

shell> mysql db_name < backup-file.sql

         重新加载的另一方式:

         shell> mysql -e "source /path-to-backup/backup-file.sql"db_name

         一个命令导出几个实例

         shell> mysqldump --databases db_name1 [db_name2...] > my_databases.sql

         dump所有数据库

         shell> mysqldump --all-databases >all_databases.sql

         InnoDB中,提供在线备份

         shell> mysqldump --all-databases --master-data--single-transaction > all_databases.sql

 

mysqldump可以用于升级/降级的兼容性测试:

mysqldump--all-databases --no-data --routines --events > dump-defs.sql

因为没有导入数据,所以速度快,当验证兼容性正常的时候,再行导入数据

mysqldump--all-databases --no-create-info > dump-data.sql

 

 

 

限制

         默认情况下不会复制INFORMATION_SCHEMA,performance_schema信息

SCHEMA主要用于收集服务器性能参数,且库里表的存储引擎均为PERFORMANCE_SCHEMA

这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。

         如果想要复制这些信息,必须加上—databases选项去指定这2个库;

 

 

 

验证

Step1 做备份mysqldump--databases itdb > itdb.txt 备份itdb库

cat itdb.txt可以查看里面内容

Step2: 删除itdb库;

Step3: itdb恢复  mysql < itdb.txt

Step4: 验证