乐趣区

关于mysql:MySQL-备份和恢复策略

备份数据

shell> mysqldump --single-transaction --flush-logs --master-data=2 \
         --all-databases --delete-master-logs > backup_sunday_1_PM.sql

–flush-logs, -F:转存数据文件前刷新 MySQL 服务日志,在数据目录生成一个新的二进制日志文件。通常与 –lock-all-tables,-master-data 或 –single-transaction 一起应用。

–master-data[=value]:使转存的数据文件蕴含 CHANGE MASTER TO 语句,该语句表明了服务器的二进制日志文件名和地位。默认值为 1,该语句不以正文的模式写入,并在从新加载转存的数据文件时执行。如果值为 2,则以正文的模式写入,从新加载转存的数据文件时不会执行。因而生成的 .sql 转存文件包含以下几行:

-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='gbichot2-bin.000007',MASTER_LOG_POS=4;

–master-data 选项会主动敞开 –lock-tables,并且关上 –lock-all-tables,除非同时指定了 –single-transaction,则在转存开始时在短时间内取得全局读锁定。

–single-transaction:对于反对事务的表如 InnoDB 表,此选项会将事务隔离级别设置为:REPEATABLE READ。并在备份前执行 START TRANSACTION 语句,让整个数据在备份过程中保障一致性,且不会锁表和阻塞其余应用程序。然而该选项不能保障 MyISAM 表和 MEMORY 表的数据一致性。

备份过程中应防止其余链接应用以下语句:ALTER TABLE,CREATE TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE,事务并不能隔离以上的语句,可能会导致备份的内容不正确或失败。

该选项与 –lock-tables 选项互斥,要备份大表,应该将 –single-transaction 选项与 –quick 选项联合应用。

–all-databases:备份所有库和表。

–delete-master-logs:执行备份操作后,向服务器发送 PURGE BINARY LOGS 语句来删除二进制日志。此选项会主动启用 –master-data。

复原数据

shell> mysql < backup_sunday_1_PM.sql
shell> mysqlbinlog gbichot2-bin.000007 gbichot2-bin.000008 | mysql
shell> mysqlbinlog gbichot2-bin.000009 ... | mysql

备份策略

  • 始终应用 –log-bin 选项或 –log-bin=log_name 选项运行 MySQL 服务器。
  • 定期应用 mysqldump 命令进行残缺备份。
  • 定期应用 FLUSH LOGS 或 mysqladmin flush-logs 命令刷新日志进行增量备份。

参考:https://dev.mysql.com/doc/mys…

退出移动版