tou*_*ano 9 mysql innodb myisam database-backup
我正在为我的 mysql 服务器寻找备份解决方案,我需要尽可能少的停机时间。我有以下几点:
这个数字可能会增长,因此设置主/从复制不是一个好主意。
我认为最简单的备份方法是将 mysqldump 与诸如“automysqlbackup”之类的软件一起使用。我最重要的数据使用 InnoDB。我的 InnoDB 表很重。
问题是:如果我对服务器中的所有数据库进行 mysqldump,它会锁定我的 Innodb 表吗?
mysqldumps 与 InnoDB 和 MyISAM 一起被视为互斥。原因如下:
如果您可以在 mysqldump 正在进行时登录到 mysql,您将看到如下内容:
SELECT /* SQL_NO_CACHE */ * FROM tblname
Run Code Online (Sandbox Code Playgroud)
默认情况下,mysqldump 将执行以下操作:
这对于没有其他数据库活动的 MySQL 实例应该没问题。InnoDB 表和 MyISAM 表互不影响。
使用--single-transaction针对全InnoDB的MySQL实例创建一个检查点并转储从同一个点在时间中的所有表。一旦遇到 MyISAM 表,所有赌注都将关闭。它可能导致 MyISAM 之后的所有 InnoDB 表从不同的时间点转储。
要为 InnoDB 和 MyISAM 混合使用一致的时间点转储,您可以选择
重新启动 mysql,以便其他人无法通过 TCP/IP 登录,然后 mysqldump
service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart
Run Code Online (Sandbox Code Playgroud)
如果所有 MyISAM 表都是只读的,只需使用 --single-transaction mysqldump
如果正在写入任何 MyISAM 表,则 --single-transaction 是不够的
您将必须执行以下操作:
mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql
Run Code Online (Sandbox Code Playgroud)
mysqldump 完成后,立即登录 mysql 并执行show processlist;. 查找 query SELECT SLEEP(86400),找到进程 ID,然后运行KILL <procidnumn>;
mysqldump --single-transaction不锁定表,但不能保证 MyISAM 表具有与此选项一致的转储。最好使用mydumper,mydumper锁定 MyISAM 表并且不锁定 InnoDB,因此转储是一致的。
| 归档时间: |
|
| 查看次数: |
6618 次 |
| 最近记录: |