MySQL的安装包里面提供了“mysqldump”工具,它可以执行逻辑备份,如果执行备份的对象是InnoDB存储引擎,则可以执行热备份,默认情况下,它对所有的引擎执行温备份。在大多数的运维场景中,用户利用Linux的“crontab”,或Windows的任务调度程序自动运行“mysqldump”。
“mysqldump”可以将表的内容转储为文件,具有如下特点:
-
备份全部的数据库、指定的数据库,或指定的表。
-
允许在本地或远程进行备份。
-
独立于存储引擎。
-
生成文本格式的转储文件。
-
可在不同的计算机上使用。
-
灵活的复制/移动策略。
-
适用于少量的数据导出,但不是一个完整的备份解决方案。
一个基本的使用例如下:
mysqldump --username --password=password db_name > backup.file
保证数据一致性
"mysqldump"可以通过如下选项保证数据的一致性:
-
“--master-data”:单独使用该选项,在备份期间通过“FLUSH TABLES WITH READ LOCK”锁定全部的表,如果该值设置为“2”,则能够在输出文件中包括“CHANGE MASER TO”语句,便于搭建另外一台复制的从服务器。
-
“--master-data”和“--single-transaction”:同时使用两个选项时,InnoDB无需锁表并能够保证一致性,在备份操作开始之前,取得全局锁以获得一致的二进制日志位置。当事务的隔离级别为“repeatable read”时,开启“--single-transaction”选项读取InnoDB的数据,可以获得非锁定的数据一致性。
-
“--lock-all-tables”:在转储期间,通过锁定全部的表满足一致性。
-
“--flush-logs”:开启一个新的二进制日志。
“mysqldump”用于创建对象的选项:
-
“--no-create-db”:不写入“CREATE DATABASE”语句。
-
“--no-create-info”:不写入“CREATE DATABASE”语句。
-
“--no-data”:创建数据库和表的结构,但是不包含数据。
-
“--no-tablespaces”:不写入“CREATE LOGFILE GROUP”或“CREATE TABLESPACE”。
-
“--quick”:快速从表中查询一条记录,不使用表的缓冲集。
“mysqldump”用于删除对象的选项:
“--add-drop-database”:在创建数据语句之前增加“DROP DATABASE”语句。
“--add-drop-table”:在创建表语句之前增加“DROP TABLE”语句。
此外,“mysqldump”还有一些其他的通用选项,例如,“--routines”、“--event”,“--trigger”,分别用于转储存储例程、事件调度器的事件,及触发器。“--opt”选项是以下语句的简写:“--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick--set-charset”。它提供了一个快速的转储操作,并产生一个可以快速重新加载到MySQL服务器的转储文件。
恢复数据
利用“mysql”客户端加载转储文件进行数据恢复,例如:
mysql --login-path=login-path database < backup_file.sql
也可以将一个数据库复制到另外一台服务器,例如:
mysqldump -uuser -ppassword orig-db | mysql -uuser-ppassword copy-db
利用“mysqlimport”,并使用“--tab”选项可以处理用制表符分割的数据文件。“.sql”文件包含“CREATE TABLE”语句,“.txt”文件包含表的数据。加载该表,需要更改备份路径,使用“mysql”客户端处理“.sql”文件,使用“mysqlimport”处理“.txt”文件。例如:
cd backup_dir
mysql -uuser -p password database