MySQL主从复制本身不自带安全机制,必须通过网络层、账号权限、加密传输等多方面配置来保障复制链路的安全。核心是防止未授权访问、中间人窃听和误操作导致的数据泄露或破坏。
启用SSL加密复制通道
主从之间传输的binlog默认明文,开启SSL可防止网络嗅探。需在主库和从库分别配置证书,并在CHANGE MASTER语句中指定SSL参数。
主库my.cnf中启用:`ssl-ca=/path/ca.pem`, `ssl-cert=/path/server-cert.pem`, `ssl-key=/path/server-key.pem` 从库连接时使用:`CHANGE MASTER TO MASTER_SSL=1, MASTER_SSL_CA='/path/ca.pem', MASTER_SSL_CERT='/path/client-cert.pem', MASTER_SSL_KEY='/path/client-key.pem';` 验证是否启用成功:`SHOW SLAVE STATUS\G` 中查看 `Seconds_Behind_Master` 正常且 `SSL: Cipher in use is ...` 非空限制复制账号最小权限与访问来源
用于复制的账号(如repl_user)不能拥有过高权限,且应绑定具体IP或网段,避免被滥用。
创建专用账号并仅授复制所需权限:GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.10.%' IDENTIFIED BY 'strong_password'; 禁止通配符主机(如'%'),生产环境建议用固定内网IP或子网 防火墙层面同步限制:仅允许从库IP访问主库3306端口(或自定义端口)禁用远程root登录与弱密码策略
主从节点若存在高权限账号暴露,可能被利用绕过复制安全设置。
删除或锁定远程root:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES; 启用密码强度插件(validate_password):设置最低长度、大小写、数字、特殊字符要求 定期轮换复制账号密码,并更新从库的MASTER_PASSWORD字段(使用CHANGE MASTER TO MASTER_PASSWORD='new')开启binlog校验与只读模式加固
防止主库误写、从库误改,同时确保binlog内容未被篡改。
主库启用binlog校验:binlog_checksum=CRC32(MySQL 5.6.2+默认开启) 从库设为只读:read_only=ON(注意:对SUPER权限用户无效,需配合权限控制) 进一步加固:设置super_read_only=ON(MySQL 5.7.20+),连SUPER用户也无法写入