文本格式的备份+二进制备份文本格式:mysqldump二进制格式:mysqlhotcopy、cp、rsync
mysqldump程序把数据表的内容写到文本文件中,默认情况下mysqldump将输出写入一个文件中。mysqldump导出的文件只能用mysql命令来导入。如果使用了--tab选项,则会生成两个文件,创建语句被放置到一个文件,数据被放置到另一个文件,mysqldump有以下三种运行方式: mysqldump [OPTIONS] database [tables] mysqldump将dump指定数据库的指定表,如果没有指定表,则dump所有的表 mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] mysqldump将所有的参数都解释为数据库名,然后依次dump所有库里面的所有表 mysqldump [OPTIONS] --all-databases [OPTIONS] mysqldump将dump所有数据库里面的所有表 以下仅列出一些常用的mysqldump参数: -A, --all-databases dump所有的数据库 -Y, --all-tablespaces dump所有的表空间 -y, --no-tablespaces 不dump表空间 --add-drop-database 在执行create databases语句前先执行DROP DATABASE语句 --add-drop-table 在执行create table之前先执行DROP TABLE语句 --character-sets-dir=name --compatible=name 这个选项导致mysqldump对导出的结果进行必要的修改,以便于其他数据库类型进行兼容 --compact 生成简洁的输出 -C, --compress Use compression in server/client protocol. -B, --databases 将所有参数都解释为数据库名 --default-character-set=name 设置默认字符集,是utf8 -E, --events 把事件也dump到文件里 -e, --extended-insert 在导出文件里同时插入多个数据行的insert语句,比使用只插入单个数据行的insert效率高 -F, --flush-logs 在导出开始前先清空log日志。 -f, --force 即使在dump过程中出现错误也要dump -h, --host=name 远程dump时使用,设置远程数据库机器的名称 --ignore-table=name 不对指定的表进行dump -l, --lock-tables 在dump前先锁表,对于myisam引擎有用 -p, --password[=name] 指定连接数据库时的密码 -P, --port=# 指定数据库的端口 -q, --quick 不使用缓存,dump出来的数据直接写入文件中 --single-transaction 在dump innodb库时采用该参数,会当作一个事务运行的 -S, --socket=name 通过socket连接数据库
一般都是一个库后面跟几个表来备份,如果要要备份多个库,则需要使用--databases参数,mysqldump会把你在命令行上的所有名字都解释为库名,如果要备份所有库,则使用--all-databases参数即可,后面不用跟库名。
如果在备份innodb表时,加上--single-transaction参数,会把备份操作放在一个事物中进行。如果数据库包含存储历程、触发器、事件,可以使用--routines、--triggers、--events参数明确的把他们包括到备份输出里面,默认情况下只有触发器被包括在备份输出里面。
例如:
单表备份 mysqldump -uroot -p dbname tab1 > xxx.sql多表备份 mysqldump -u root -p daname tb1 tb2 > xxx.sql
在备份的同时进行压缩 mysqldump -uroot -pxxx db table | gzip > xxx可以在备份的时候直接转储到另一台mysql服务器
mysqldump --databases xxx | mysql -hxxx -uroot --compress database_name
二进制备份 mysqlhotcopy是一个制作数据库备份的perl脚本,他比mysqldump要快,他直接复制数据表文件,不过只能用来复制myisam。