MySQL(64)如何进行主从复制?

主从复制(Master-Slave Replication)是数据库的一种数据备份和数据冗余技术,它可以在多个数据库实例之间复制数据,从而提高数据库的可靠性和读写性能。在主从复制中,主数据库(Master)处理所有的写操作,而从数据库(Slave)负责从主数据库同步数据并处理读操作。

下面是详细的主从复制配置步骤和代码示例,假设使用的是 MySQL 数据库。

1. 主从复制的基本概念

  • 主数据库(Master):负责处理所有的写操作(INSERT、UPDATE、DELETE),并记录这些操作到二进制日志(Binary Log)中。
  • 从数据库(Slave):从主数据库读取二进制日志并重放这些日志,以保持与主数据库的数据一致。

2. 主从复制配置步骤

2.1 主数据库配置
  1. 修改主数据库配置文件my.cnfmy.ini):
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = your_database_name  # 将 'your_database_name' 替换为实际的数据库名
  1. 重启主数据库
sudo systemctl restart mysql
  1. 在主数据库上创建复制用户
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
  1. 获取二进制日志信息
SHOW MASTER STATUS;

记下 FilePosition 的值,将在配置从数据库时使用。

2.2 从数据库配置
  1. 修改从数据库配置文件my.cnfmy.ini):
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
  1. 重启从数据库
sudo systemctl restart mysql
  1. 在从数据库上设置复制
CHANGE MASTER TO
    MASTER_HOST='master_host_ip',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='replica_password',
    MASTER_LOG_FILE='mysql-bin.000001',  # 替换为获取的 File 值
    MASTER_LOG_POS=123;  # 替换为获取的 Position 值
START SLAVE;
  1. 检查复制状态
SHOW SLAVE STATUS\G;

确保 Slave_IO_RunningSlave_SQL_Running 均为 Yes

3. 检查和维护主从复制

3.1 检查复制状态

在从数据库上运行以下命令以检查复制状态:

SHOW SLAVE STATUS\G;

关键字段解释:

  • Slave_IO_RunningSlave_SQL_Running:应为 Yes
  • Seconds_Behind_Master:从数据库落后于主数据库的时间,通常应为 0 或接近 0。
  • Last_Error:最近一次复制错误的详细信息。
3.2 停止和启动复制

如果需要停止或启动复制,可以使用以下命令:

-- 停止复制
STOP SLAVE;

-- 启动复制
START SLAVE;
3.3 处理复制错误

如果复制过程中出现错误,可以通过以下步骤进行处理:

  1. 查看错误信息
SHOW SLAVE STATUS\G;
  1. 跳过错误(不建议长期使用,最好找到并解决根本问题):
-- 跳过当前错误
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
  1. 重新同步从数据库(如果错误无法解决,可以考虑重新初始化从数据库):
  • 停止从数据库的复制:
STOP SLAVE;
  • 在主数据库上锁表并创建数据快照:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
  • 复制主数据库的数据文件到从数据库(可以使用 mysqldump 工具):
mysqldump -u root -p --all-databases --master-data > master_data_dump.sql
  • 解锁主数据库表:
UNLOCK TABLES;
  • 在从数据库上导入数据:
mysql -u root -p < master_data_dump.sql
  • 恢复从数据库的复制:
CHANGE MASTER TO
    MASTER_HOST='master_host_ip',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='replica_password',
    MASTER_LOG_FILE='mysql-bin.000001',  # 替换为获取的 File 值
    MASTER_LOG_POS=123;  # 替换为获取的 Position 值
START SLAVE;

4. 自动故障转移和负载均衡

在生产环境中,考虑使用自动故障转移和负载均衡工具,如 MHA(Master High Availability)、Orchestrator 或 ProxySQL。

4.1 使用 Orchestrator 进行主从复制管理

Orchestrator 是一个开源的 MySQL 高可用和复制管理工具。

  • 安装 Orchestrator

参考 Orchestrator 官方文档 进行安装和配置。

  • 配置 Orchestrator

配置文件示例:

InstanceDBFile = "/usr/local/orchestrator/orchestrator.sqlite3"
MySQLTopologyUser = "orchestrator"
MySQLTopologyPassword = "orchestrator_password"
  • 启动 Orchestrator
orchestrator -c discover -i master_host_ip

通过 Web 界面管理主从复制拓扑。

小结

实施主从复制可以显著提高数据库系统的可靠性和性能。通过详细的配置步骤和示例代码,您可以轻松地设置 MySQL 主从复制。在实际生产环境中,推荐使用自动化工具(如 Orchestrator)来简化复制管理和故障处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辞暮尔尔-烟火年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值