MySQL备份有逻辑备份与物理备份
逻辑备份有MySQL自带的mysqldump工具
物理备份有开源的Xtrabackup(免费版 ibbackup 热备份)
今天总结一下,mysqldump
dump 整个库(包含函数、存储过程、触发器等) | mysqldump -uroot -pxxxx --all-databases --single-transaction --triggers --routines --events -P3306 |gzip >test.tar.gz |
dump 整个库 | mysqldump -uusername -ppassword --all-databases --single-transaction |gzip >test.tar.gz |
dump 多个DB-带数据 | mysqldump -uusername -ppassword --single-transaction --databases db1 db2 > db1db2.sql |
dump 单个DB-不带数据 | mysqldump 数据库名 -uroot -p > xxx.sql |
dump 单张表 | mysqldump -uusername -ppassword db1 table1 > tb1tb2.sql |
dump 多张表 | mysqldump -uusername -ppassword db1 table1 table2 > tb1tb2.sql |
dump 表的部分数据,带where条件 | mysqldump -uroot -proot --databases db1 --tables a1 --where='id=1' >/tmp/a1.sql |
dump 字段是字符串,并且导出的sql中不包含drop table,create table | mysqldump -uroot -proot --no-create-info --databases db1 --tables a1 --where="id='a'" >/tmp/a1.sql |
dump 表结构,不带数据 | mysqldump -uroot -proot --no-data --databases db1 >/tmp/db1.sql |
dump 数据 | mysqldump -t 数据库名 -uroot -p > xxx.sql |
dump 跨服务器(将h1服务器中的db1数据库的所有数据导入到h2中的db2数据库中,db2的数据库必须存在否则会报错) | mysqldump --host=h1 -uroot -proot -C --databases db1 |mysql --host=h2 -uroot -proot db2 (-C代表压缩) |
参数--single-transaction |
该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎(它不显示加锁通过判断版本来对比数据),仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。 |
参数--quick, -q |
不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。 |