要FTWRL
在您还运行系统命令并且它们相互依赖的上下文中运行,表明您要刷新,然后快照,然后在释放表锁之前根据该决定做什么。
您需要在同一个脚本中执行此操作以确保它们一起工作,并且您正在尝试在 SQL 脚本中执行此操作。相反,通过从系统脚本内部运行 SQL 脚本,这样做要容易得多,因为您是根据 shell 条件而不是 SQL 条件做出决策。
这是我的做法(在 Perl 中):
#!/usr/bin/perl -w
use DBI;
my $d = DBI->connect('dbi:mysql:mysql','root','***');
$d->do('FLUSH TABLES WITH READ LOCK') or die ("Can't flush tables in MySQL");
# Here's the important bit: Capture the status in $s and branch on the result
my $s = system('lvm lvcreate -s -n lv_datadirbackup -L 4G /dev/VG_MYSQL/lv_datadir');
if($s == 0) {
print ("Snapshot created.\n");
$d->do('UNLOCK TABLES') or die("Can't unlock tables");
... # etc
这样,您可以创建表锁以获取快照,并使用您的脚本根据快照状态控制接下来发生的事情。