文章目录
- 1、原题
- 1.1、英文原题
- 1.2、答案
- 2、题目解析
- 2.1、题干解析
- 2.2、选项解析
- 3、知识点
- 3.1、知识点1:--defaults-file、 --defaults-extra-file选项
- 3.2、知识点2:log-bin和skip-log-bin系统变量
- 4、实验
- 4.1、实验1
- 4.1.1、实验目的
- 4.1.2、实验前准备
- 4.1.3、实验步骤
- 4.1.4、实验结论
- 5、总结
1、原题
1.1、英文原题
1.2、答案
D
2、题目解析
2.1、题干解析
本题主要考察MySQL启动时读取选项文件的原理、二进制日志启停的方法。
2.2、选项解析
因为指定了–defaults-file,所以只从–defaults-file的选项文件中读取配置,所以读取的配置是skip-log-bin这个系统变量。skip-log-bin系统变量意味着停用二进制日志。所以选项D正确。
3、知识点
3.1、知识点1:–defaults-file、 --defaults-extra-file选项
–defaults-file服务器选项
- 如果使用本选项,则必须是命令行上的第一个选项,但如果服务器是以–defaults-file和–install(或–install-manual)选项启动的,则–install(或–install-manual)必须是第一个。
- 如果使用本选项,则只读取在选项值中给定的选项文件。如果该文件不存在或无法访问,则发生错误。如果file_name不是一个绝对路径,将被解释为相对路径。
- 即使使用-defaults-file,客户程序也会读取.mylogin.cnf。
–defaults-extra-file服务器选项
- 如果使用了本选项,会在全局选项文件之后,但在用户选项文件之前读取这个选项文件。
- 如果该文件不存在或无法访问,则发生错误。如果file_name不是一个绝对路径,将被解释为相对路径。
3.2、知识点2:log-bin和skip-log-bin系统变量
- skip-log-bin系统变量:如果想禁用二进制日志,可在启动时指定–skip-log-bin或-disable-log-bin选项。当二进制日志被禁用时,log_bin系统变量被设置为OFF。
- log-bin系统变量
- 本选项会启用二进制日志记录。启用二进制日志后,服务器会将所有改变数据的语句记录到二进制日志中,该日志用于备份和复制。二进制日志是一个具有基本名称和数字扩展的文件序列。
- 如果你为-log-bin选项提供一个值,该值将被用作二进制日志文件序列的基本名称。服务器通过在基本名称上添加数字后缀来依次创建二进制日志文件。在MySQL 5.7中,基名默认为host_name-bin,使用主机的名称。建议你指定一个基本名称,这样你就可以继续使用相同的二进制日志文件名称,而不考虑对默认名称的更改。
- 二进制日志文件的默认位置是数据目录。你可以使用 --log-bin 选项来指定一个替代的位置,通过在基本名称中添加一个领先的绝对路径名称来指定一个不同的目录。
- 如果你指定了-log-bin选项而没有同时指定server_id系统变量,服务器就不允许启动。
4、实验
4.1、实验1
4.1.1、实验目的
- 如何通过mysqld启动MySQL服务器,并指定选项文件。
- 验证defaults-file和defaults-extra-file的作用。
4.1.2、实验前准备
已安装MySQL5.7并正常运行。
4.1.3、实验步骤
- 在服务器创建第一个选项文件:my.cnf,其中部分选项如下,注意一定要在[mysqld]中定义user=mysql,否则无法用mysqld启动。
[mysqld]
user=mysql
......
#log-bin=mysql-bin
#binlog_format=ROW
server-id=1
skip-log-bin
......
- 在服务器创建第二个选项文件:my2.cnf,两个文件的server_id不同,由此等会可以看出哪个文件生效了。
log-bin=mysql-bin
binlog_format=ROW
server-id=2
- 使用mysqld启动,同时使用defaults-file和defaults-extra-file
$ mysqld --defaults-file=/etc/my.cnf --defaults-extra-file=/etc/my2.cnf
- 打开一个会话,用mysql登录,然后查看server_id为1,说明defaults-file生效了。
mysql> SHOW VARIABLES LIKE 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
- 另外,做任何数据增删改,会发现binlog日志不发生任何改变,说明binlog日志未生效。查看log_bin变量,如下所示,说明defaults-extra-file未生效。
mysql> SHOW VARIABLES LIKE '%log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
- 在mysql会话中用shutdown关闭服务器
mysql> shutdown
- 然后只使用defaults-extra-file启动服务器
$ mysqld --defaults-extra-file=/etc/my2.cnf
- 打开一个新会话,用mysql登录,然后查看server_id为2,说明defaults-extra-file生效了。
mysql> SHOW VARIABLES LIKE 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
- 另外,做任何数据增删改,会发现binlog日志都会增加变,说明binlog日志已生效。查看log_bin变量,如下所示。
mysql> SHOW VARIABLES LIKE '%log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | ON |
4.1.4、实验结论
本实验说明,当存在defaults-file时,只有defaults-file生效。当没有defaults-file时,defaults-extra-file可以生效。
5、总结
- MySQL服务器启动时可以通过–defaults-file、 --defaults-extra-file选项指定读取选项文件,两者区别在于
- 如果使用了–defaults-file选项文件,则只读取这个选项指定的选项文件(如果有.mylogin.cnf,还会读取.mylogin.cnf),不会读取默认选项文件了。也不会读取–defaults-extra-file选项了。
- 如果只使用了–defaults-extra-file选项,则会在读取默认配置文件之后,再读取–defaults-extra-file选项中指定的选项文件。
- skip-log-bin系统变量表示停用二进制日志。
- log-bin系统变量表示启用二进制日志,如果后面有值,则这个值就是二进制日志文件序列的基本名称,二进制日志文件会在后面加数字形成文件名。