为什么80%的码农都做不了架构师?>>>
文本格式的备份+二进制备份
文本格式: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。