17-主从库同步维护
在某些繁忙的 OLTP(在线事务处理)系统上,由于主库更新频繁,而从库由于各种原因(比如硬件性能较差)导致更新速度较慢,从而使得主从库之间的数据差距越来越大,最终对某些应用产生影响。在这种情况下,我们就需要定期地进行主从库的数据同步,使得主从数据差距能够减到最小。常用的方法是:在负载较低时暂时阻塞主数据库的更新,强制主从数据库更新同步。具体操作步骤如下。
(1)在主库上,执行以下语句(注意,会阻塞主数据库的所有更新操作):
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000039 | 974 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
记录SHOW语句的输出的日志名和偏移量,这些是从库复制的目的坐标。
(2)在从库上,执行下面的语句,其中MASTER_POS_WAIT()函数的参数是前面步骤中得到的复制坐标值:
mysql> select MASTER_POS_WAIT('mysql-bin.000039','974');
+-------------------------------------------+
| MASTER_POS_WAIT('mysql-bin.000039','974') |
+-------------------------------------------+
| 0 |
+-------------------------------------------+
1 row in set (0.00 sec)
这个SELECT语句会阻塞直到从库达到指定的日志文件和偏移量后,返回0,如果返回-1,则表示超时退出。查询返回0时,则从库与主库同步。
(3)在主库上,执行下面的语句允许主库重新开始处理更新:
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)