2.2 解释数据复制信息
知道如何去寻找数据复制信息是DBA的一项重要技能。然而,解释数据复制信息有时是一项很大的挑战。理解移动的部分是如何一起作用的,以及如何查看数据复制的状态,都是管理MySQL数据库的必要步骤。在下面的章节中我们会概述数据复制的组成,以及如何使用不同的命令和工具,从而在数据复制环境中做出明智的选择。
2.2.1 二进制日志
MySQL默认数据复制中的数据复制要求启用二进制日志。也就是在开始mysqld时指定–log-bin=[base_name]或MySQL配置文件(例如my.cnf)。在二进制日志中,base_name的默认值就是正在运行的MySQL服务器的主机名称。改变二进制日志中base_name的默认名称可以避免以后改变主机名称时带来的混淆。实际的二进制日志包含基本名和后面跟随的扩展名。
MySQL也会创建一个二进制日志索引文件。这个索引文件以存储路径和二进制日志的base_name作为默认名称,并且以.index作为扩展名。可以使用log-bin-index这个配置选项来改变索引文件的名称。下面的这段代码基于某个配置文件中的预定值列出了这些文件。这个配置文件包含完整的目录。
$ MYCNF="/etc/my.cnf"
$ BINLOG='grep log-bin ${MYCNF} | cut -d'=' -f2'
$ echo ${BINLOG}
$ DIR='dirname ${BINLOG}'
$ cd ${DIR}
$ ls -lh *
$ cat *.index
/opt/mysql/binlog/mysql-bin
-rw-rw---- 1 mysql mysql 49M Apr 30 2011 mysql-bin.000001
-rw-rw---- 1 mysql mysql 1.1G May 16 06:28 mysql-bin.000002
-rw-rw---- 1 mysql mysql 772M May 29 21:50 mysql-bin.000003
-rw-rw---- 1 mysql mysql 400M Jun 5 17:29 mysql-bin.000004
-rw-rw---- 1 mysql mysql 140 May 29 21:52 log-bin.index
/opt/mysql/binlog/mysql-bin.000001
/opt/mysql/binlog/mysql-bin.000002
/opt/mysql/binlog/mysql-bin.000003
/opt/mysql/binlog/mysql-bin.000004
提示
我们推荐总是为log-bin指定base_name。这个普通的建议是为了提供与特定主机细节无关的常规名称。
二进制日志包含所有应用在MySQL服务器中的所有写入活动,比如INSERT、UPDATE、DELETE、REPALCE、CREATE、ALTER和DROP命令,而读取活动不会被记录在二进制日志中。如果想要记录所有读取与写入活动,可以使用general_log和general_log_file选项来启用常规日志(general log)。
注意
较老版本的MySQL中,常规日志可以使用--log变量来启用。这个变量在MySQL 5.1中已被废弃。
警告
当常规日志提供所有运行的SQL语句细节时,由于记录大量语句造成的性能影响,我们不推荐在生产环境中启用二进制日志。