调用 "FLUSH TABLES WITH READ LOCK" 时 mysqldump 挂起
mysqldump hangs when calling "FLUSH TABLES WITH READ LOCK"
我有一个 MySQL 服务器 (Serv-B) 作为主服务器 (Serv-A) 的从服务器。
这已经配置并且运行良好(已检查复制是否正常工作)。
现在,我希望这个“从”服务器也成为另一个从服务器 (Serv-C) 的主服务器。为此,我执行与设置初始配置相同的命令:
我连接到 MySQL 服务器 Serv-B,并调用以下命令:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
在另一个终端上,我 运行 mysqldump
命令:
mysqldump -u root mydb > /home/cx42/mydb.sql
但是挂起。它会一直挂起,直到我关闭 MySQL 终端,或使用 UNLOCK TABLES;
停止“刷新”命令
我一解锁表,mysqldump 命令就会在几秒钟内完成。
似乎 FLUSH
命令以 mysqldump 无法访问它们的方式锁定了我的表,但我不知道是什么原因造成的。
Serv-B 服务器(我称之为“FLUSH ..”的服务器)具有以下配置:
server-id = 10
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 7
max_binlog_size = 100M
binlog_do_db = mydb
log_slave_updates = 1
relay-log = /var/log/mysql/mysql-relay-bin.log
怎么了?
是的,FLUSH TABLES WITH READ LOCK
获取锁是正确的。从语法上应该很明显,如果你要阅读 documentation:
FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK
Flushes and acquires read locks for the named tables.
您可以使用 UNLOCK TABLES
释放锁定,但这意味着您可能无法从 SHOW MASTER STATUS 中获得正确的读数。一旦解锁表,就可以执行更多更新,从而提高日志位置。
更好的选择是让 mysqldump 完成工作。如果您使用 --source-data
选项(或 8.0.26 之前的 --master-data
选项调用 mysqldump,转储的输出将包括二进制日志位置,因此您不必在另一个 window.
见https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_source-data
我有一个 MySQL 服务器 (Serv-B) 作为主服务器 (Serv-A) 的从服务器。 这已经配置并且运行良好(已检查复制是否正常工作)。
现在,我希望这个“从”服务器也成为另一个从服务器 (Serv-C) 的主服务器。为此,我执行与设置初始配置相同的命令:
我连接到 MySQL 服务器 Serv-B,并调用以下命令:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
在另一个终端上,我 运行 mysqldump
命令:
mysqldump -u root mydb > /home/cx42/mydb.sql
但是挂起。它会一直挂起,直到我关闭 MySQL 终端,或使用 UNLOCK TABLES;
我一解锁表,mysqldump 命令就会在几秒钟内完成。
似乎 FLUSH
命令以 mysqldump 无法访问它们的方式锁定了我的表,但我不知道是什么原因造成的。
Serv-B 服务器(我称之为“FLUSH ..”的服务器)具有以下配置:
server-id = 10
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 7
max_binlog_size = 100M
binlog_do_db = mydb
log_slave_updates = 1
relay-log = /var/log/mysql/mysql-relay-bin.log
怎么了?
是的,FLUSH TABLES WITH READ LOCK
获取锁是正确的。从语法上应该很明显,如果你要阅读 documentation:
FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK
Flushes and acquires read locks for the named tables.
您可以使用 UNLOCK TABLES
释放锁定,但这意味着您可能无法从 SHOW MASTER STATUS 中获得正确的读数。一旦解锁表,就可以执行更多更新,从而提高日志位置。
更好的选择是让 mysqldump 完成工作。如果您使用 --source-data
选项(或 8.0.26 之前的 --master-data
选项调用 mysqldump,转储的输出将包括二进制日志位置,因此您不必在另一个 window.
见https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_source-data