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 压缩server和client间发送的所有信息
--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: 验证