我使用这个命令来“锁定”我的数据库、刷新日志、拍摄 LVM 快照并释放它。
测试 restore + binlogs ,似乎它不起作用。
(我在恢复过程中发现这一点,应用二进制日志会给出重复键的错误,而此时不应该存在的重复键)
我得到的行为是刷新后数据文件仍在写入。那么,这里有什么问题?我想念什么?
# echo "FLUSH TABLES WITH READ LOCK ; flush logs" | mysql -vvv
--------------
FLUSH TABLES WITH READ LOCK
--------------
Query OK, 0 rows affected (0.00 sec)
# mysql --version
mysql Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using EditLine wrapper
我不确定,但是在使用读锁刷新之后,如果我连接到任何数据库并尝试创建一个表,它应该锁定并等到 UNLOCK ,不是吗?
这不会发生,它成功创建了表。
编辑
我找到了一个文档,说要SET GLOBAL read_only = ON
在刷新和SET GLOBAL read_only = OFF
.
所有其他建议、博客、教程、手册都没有提到这是必需的。
更多疑问!!!
编辑 2
插入和更新仍然有效......
找到我的脚本失败的原因。
连接完成后释放锁。
看起来很明显,但我不记得在任何地方读过有关此行为的信息,并且由于很少有命令能够使用 mysqladmin(不是这种情况)从提示符执行,从而导致对 FLUSH 行为的错误解释。
我的第一个脚本,锁定失败的地方如下所示:
问题是在独立会话中运行的 FLUSH,当该会话关闭时它被释放。
为了解决我在独特的会话中运行所有。
这就是我重写它并正常工作的方式
在快照的短暂时间内实际关闭 mysqld 会更安全。