MySQL 主从同步配置指南:基于 XtraBackup 的热备与快速搭建
本文详细介绍如何利用 XtraBackup 工具实现 MySQL 主库到从库的无缝数据迁移,配合 binlog 日志配置完成主从同步环境的快速搭建。通过修改 my.cnf 参数、创建同步用户及执行增量备份导入,确保生产环境下的数据一致性与服务连续性。
准备条件
在进行 MySQL 主从同步配置前,需确保主机满足以下基础环境:
- 操作系统:CentOS 5.4(或兼容的 Linux 发行版)。
- 数据库版本:MySQL 5.1.xx 及以上,建议通过 RPM 直接安装以便管理。
- 备份工具:XtraBackup 1.2.22(或更高版本的 innobackupex),用于在线热备而不锁表。
第1步:配置 Master 服务器
主库需要开启二进制日志(Binary Log)并分配唯一的服务 ID,这是记录数据变更供从库回放的基础。
修改配置文件
编辑 /etc/my.cnf,在 [mysqld] 段落下添加或确认以下关键参数:
[mysqld]
server-id = 1
log-bin
innodb_flush_log_at_trx_commit=1
sync_binlog=1
datadir=/var/lib/mysql
character-set-server=utf8
init_connect='SET NAMES utf8'
参数说明:
server-id = 1:主库的唯一标识,必须为整数且不能与其他从库冲突。log-bin:启用二进制日志文件。innodb_flush_log_at_trx_commit=1与sync_binlog=1:保证事务提交时日志刷盘,确保数据不丢失,适合对数据安全性要求高的场景。datadir:数据目录路径,需与实际安装路径一致。
修改完成后重启 MySQL 服务使配置生效。
第2步:配置 Slave 服务器
从库只需配置唯一的 Server ID,无需开启 Binlog(除非需要从库作为其它库的主库)。字符集设置应与主库保持一致。
修改配置文件
同样编辑 /etc/my.cnf:
[mysqld]
server-id=2
datadir=/var/lib/mysql
character-set-server=utf8
init_connect='SET NAMES utf8'
保存后重启从库 MySQL 服务。
第3步:在主库创建同步用户
登录主库 MySQL,创建一个专门用于复制数据的账户,赋予 REPLICATION SLAVE 权限。
GRANT REPLICATION SLAVE ON *.* TO '<slave_username>'@'<slave_ip>' IDENTIFIED BY '<slave_password>';
FLUSH PRIVILEGES;
注意:
<slave_username>和<slave_password>请替换为您实际规划的账号和密码。<slave_ip>建议填写从库的实际 IP,若配置为%则允许任何 IP 连接,存在安全风险。
第4步:使用 XtraBackup 进行主库热备
为了保证主从数据一致性且不影响主库运行,推荐使用 XtraBackup 进行在线备份。此步骤会将主库数据导出并通过 SSH 传输至从库指定目录,自动解压。
sudo innobackupex-1.5.1 --stream=tar /tmp/ | ssh <slave_host> "mkdir /tmp/db; tar xfi - -C /tmp/db/"
操作解析:
--stream=tar:将备份数据打包成 tar 流输出到标准输出。/tmp/:临时备份存放目录(实际流式传输中未落盘本地磁盘,直接管道传输)。ssh ...:通过 SSH 连接到从库服务器,远程创建/tmp/db目录并将接收到的 tar 包解压至此。
第5步:在从库恢复数据
数据传输到从库后,需要对备份数据进行预处理并恢复至 MySQL 数据目录。此过程会短暂占用磁盘空间,请确保从库有足够的剩余空间。
# 1. 准备日志(Preparation Phase)
innobackupex-1.5.1 --apply-log /tmp/db
# 2. 将数据拷贝回 mysql 数据目录
innobackupex-1.5.1 --copy-back /tmp/db
# 3. 修正目录权限,确保 mysql 用户拥有所有权
chown -R mysql.mysql /var/lib/mysql/*
风险提示:
--apply-log是必须执行的步骤,它会将未提交的事务回滚或已提交的事务重做,确保数据库引擎的一致性。--copy-back会将数据覆盖到 datadir 指向的位置,执行前请确认 datadir 为空或已有数据不重要。- 权限修正至关重要,否则 MySQL 启动时将因无权读取数据而失败。
第6步:启动主从同步
登录从库,查看备份生成的 binlog 信息,确定同步起点。
获取 Binlog 位置
打开从库上的备份目录文件 xtrabackup_binlog_info(通常位于 /tmp/db 下或解压后的对应位置):
cat /tmp/db/xtrabackup_binlog_info
记录下输出的文件名和 Position 值(例如:mysql-bin.000001 120)。
配置并启动 Slave
在从库 MySQL 命令行中执行以下命令:
CHANGE MASTER TO
MASTER_HOST='<master_host>',
MASTER_USER='<slave_username>',
MASTER_PASSWORD='<slave_password>',
MASTER_LOG_FILE='<xtrabackup_binlog_info中的文件名>',
MASTER_LOG_POS=<xtrabackup_binlog_info中的Position值>;
START SLAVE;
验证同步状态
执行 SHOW SLAVE STATUS\G; 检查输出:
Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0(或有波动但非 NULL)
若以上两项均为 Yes 且延迟时间可控,即表示主从同步已成功建立。此时可在主库插入测试数据,观察从库是否即时同步。
常见排错建议
- 权限问题:如果提示
Access denied,请检查 Step 3 创建的用户名密码是否正确,以及防火墙是否开放了从库访问主库 MySQL 端口(默认 3306)。 - Binlog 格式:建议在 Master 的 my.cnf 中显式设置
binlog_format=ROW,以避免某些语句模式复制导致的逻辑错误。 - Server ID 冲突:如果出现同步报错,确认所有节点(Master和多个Slave)的 server-id 必须互不相同。
以上就是 MySQL 主从同步配置的详细内容,更多关于数据库高可用的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













