面试题答案
一键面试开启 binlog
在 MariaDB 配置文件(通常是my.cnf
或my.ini
)中,通过以下参数开启 binlog:
log-bin=[path/to/binlog_file_prefix]
:开启二进制日志,并指定二进制日志文件的路径和文件名前缀。例如log-bin=/var/lib/mysql/mysql-bin
,这会在指定路径下生成如mysql-bin.000001
等二进制日志文件。
选择合适的日志格式
MariaDB 支持三种 binlog 日志格式,通过binlog_format
参数设置:
- ROW(行格式):
- 作用:记录数据行的变化,每一条数据的修改都会被完整记录。优点是记录非常详细,能精确还原数据修改情况,在主从复制中能更好地保证数据一致性,尤其适合数据更新频繁的场景。缺点是日志文件可能较大,因为会记录每行数据的变化细节。
- 设置方式:在配置文件中设置
binlog_format=ROW
。
- STATEMENT(语句格式):
- 作用:记录执行的 SQL 语句。优点是日志文件相对较小,因为只记录 SQL 语句而不是每行数据变化。缺点是某些情况下在主从复制中可能导致数据不一致,比如使用了不确定函数(如
NOW()
),在主从节点执行结果可能不同。 - 设置方式:在配置文件中设置
binlog_format=STATEMENT
。
- 作用:记录执行的 SQL 语句。优点是日志文件相对较小,因为只记录 SQL 语句而不是每行数据变化。缺点是某些情况下在主从复制中可能导致数据不一致,比如使用了不确定函数(如
- MIXED(混合格式):
- 作用:结合了 ROW 和 STATEMENT 两种格式的优点,MariaDB 会根据 SQL 语句的特性自动选择使用 ROW 或 STATEMENT 格式记录日志。一般情况下使用 STATEMENT 格式以减小日志文件大小,对于可能导致主从数据不一致的语句(如含不确定函数的语句)则使用 ROW 格式。
- 设置方式:在配置文件中设置
binlog_format=MIXED
。
其他关键参数及作用
server-id
:- 作用:每个 MariaDB 实例必须有唯一的服务器 ID,用于主从复制以及区分不同节点。在主从复制环境中,主服务器和从服务器都需要设置不同的
server-id
,确保数据同步的正确性和一致性。 - 设置示例:在配置文件中设置
server-id=1
,值一般为正整数。
- 作用:每个 MariaDB 实例必须有唯一的服务器 ID,用于主从复制以及区分不同节点。在主从复制环境中,主服务器和从服务器都需要设置不同的
sync_binlog
:- 作用:控制 binlog 写入磁盘的频率。取值为 0 时,表示 MySQL 不主动将 binlog 写入磁盘,由操作系统决定何时刷新到磁盘,性能最高但可能在崩溃时丢失部分 binlog 数据;取值为 1 时,表示每次事务提交都将 binlog 写入并同步到磁盘,数据安全性最高但可能影响性能;取值为大于 1 的整数 N 时,表示每 N 次事务提交才将 binlog 同步到磁盘,在性能和数据安全之间取得平衡。
- 设置示例:在配置文件中设置
sync_binlog=1
。
expire_logs_days
:- 作用:指定二进制日志文件自动删除的天数。过期的二进制日志文件会被自动清理,有助于控制磁盘空间使用。
- 设置示例:在配置文件中设置
expire_logs_days=7
,表示 7 天后自动删除过期的 binlog 文件。