问题的根源:在正在运行的主机上创建从机的所有说明中都需要flush tables with read lock
. 我们使用MyISAM,所以我们不能只使用--single transaction 来获得一致的表数据。
奴隶因各种“正常”原因而失败——平均每周一次。所以我关闭了站点,使用读取锁定主数据库刷新表,mysqldump(单个事务,带有主记录),推送到从属,重置主(带有日志位置),并启动从属等。
为了在不停机的情况下做到这一点,我尝试了基本相同的步骤,然后使用START SLAVE UNTIL
- 然后在运行 SELECT MASTER_POS_WAIT(); 时暂停实时数据库几秒钟;在奴隶上。我似乎无法让奴隶追上来。
为了让从数据库再次赶上主数据库,以下步骤中遗漏了什么(或不必要的)?一个简单的start slave
工作?
#!/bin/bash
##
mysqldump --allow-keywords --add-drop-table --comments --extended-insert --master-data \
--debug-info --single-transaction -u $LOCALDB_USER_NAME -p$LOCALDB_PASS $LOCALDB_NAME > $DBFILENAME
## get master position from file for use later
echo
echo "############# MASTER STATUS #############"
cat $DBFILENAME | grep "CHANGE MASTER"
echo
echo "compressing"
gzip $DBFILENAME
echo "sending to $REMOTE_SERVER"
[...]
echo "uncompresing remote db"
sudo ssh $REMOTE_SERVER_USERNAME@$REMOTE_SERVER "cd …
Run Code Online (Sandbox Code Playgroud)