【linux下mysql主从复制操作流程】

linux下mysql主从复制操作流程

在Linux下实现MySQL主从复制(Master-Slave Replication)是一个常见的需求,用于读写分离、数据备份等场景。以下是一个详细的操作流程,包括每个步骤、注意事项以及总结。

一、准备环境

  1. 安装MySQL

    • 确保主服务器(Master)和从服务器(Slave)都已经安装了MySQL。
    • 可以通过包管理工具安装,例如:sudo apt-get install mysql-server(Debian/Ubuntu)或sudo yum install mysql-server(CentOS/RHEL)。
  2. 配置网络连通性

    • 确保主服务器和从服务器之间可以通过网络相互通信。

二、配置主服务器(Master)

  1. 编辑MySQL配置文件

    • 打开MySQL配置文件(通常是/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf)。

    • 添加或修改以下内容:

      ini 复制代码
      [mysqld]
      server-id = 1
      log-bin = mysql-bin
      binlog-do-db = your_database  # 仅复制特定的数据库,可选
    • server-id:每个服务器的唯一标识符,主服务器和从服务器不能相同。

    • log-bin:启用二进制日志。

    • binlog-do-db:仅复制特定的数据库,如果希望复制所有数据库,可以省略此行。

  2. 重启MySQL服务

    • 重启MySQL服务以使配置生效:

      sh 复制代码
      sudo systemctl restart mysql
  3. 创建复制用户

    • 登录到MySQL:

      sh 复制代码
      mysql -u root -p
    • 创建一个用于复制的用户,并授予必要的权限:

      sql 复制代码
      CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
      FLUSH PRIVILEGES;
  4. 锁定表并获取二进制日志位置

    • 为了确保数据一致性,锁定表并获取当前二进制日志文件名和位置:

      sql 复制代码
      FLUSH TABLES WITH READ LOCK;
      SHOW MASTER STATUS;
    • 记录下FilePosition的值,稍后从服务器上会用到。

  5. 备份数据库

    • 使用mysqldump备份数据库,并传输到从服务器:

      sh 复制代码
      mysqldump -u root -p --all-databases --master-data=2 > all_databases.sql
    • 将生成的all_databases.sql文件复制到从服务器。

  6. 解锁表

    • 在主服务器上解锁表:

      sql 复制代码
      UNLOCK TABLES;

三、配置从服务器(Slave)

  1. 编辑MySQL配置文件

    • 打开MySQL配置文件(路径同上)。

    • 添加或修改以下内容:

      ini 复制代码
      [mysqld]
      server-id = 2
      relay-log = mysql-relay-bin
    • server-id:确保与主服务器不同。

    • relay-log:定义中继日志文件名。

  2. 重启MySQL服务

    • 重启MySQL服务以使配置生效:

      sh 复制代码
      sudo systemctl restart mysql
  3. 导入主服务器的备份

    • 将之前在主服务器上生成的all_databases.sql文件导入到从服务器:

      sh 复制代码
      mysql -u root -p < all_databases.sql
  4. 配置从服务器以连接到主服务器

    • 登录到从服务器的MySQL:

      sh 复制代码
      mysql -u root -p
    • 配置从服务器:

      sql 复制代码
      CHANGE MASTER TO
        MASTER_HOST='master_server_ip',
        MASTER_USER='replica_user',
        MASTER_PASSWORD='replica_password',
        MASTER_LOG_FILE='mysql-bin.000001',  # 使用SHOW MASTER STATUS得到的File值
        MASTER_LOG_POS= 12345;  # 使用SHOW MASTER STATUS得到的Position值
  5. 启动复制

    • 在从服务器上启动复制进程:

      sql 复制代码
      START SLAVE;
  6. 检查复制状态

    • 检查从服务器状态:

      sql 复制代码
      SHOW SLAVE STATUS \G;
    • 确保Slave_IO_RunningSlave_SQL_Running都为Yes,并且没有错误。

四、注意事项

  1. 防火墙和网络

    • 确保MySQL端口(默认3306)在主服务器和从服务器之间开放。
  2. 数据一致性

    • 在主服务器上进行备份和获取二进制日志位置时,确保没有写入操作,或者选择适当的备份策略(如使用Percona XtraBackup等工具)。
  3. 权限和安全性

    • 复制用户应仅授予必要的权限,并且密码应足够复杂。
    • 使用SSL加密复制连接以增加安全性。
  4. 监控和故障排查

    • 定期监控复制状态,及时发现并解决问题。
    • 使用工具如pt-table-checksumpt-table-sync来检查和修复数据不一致。

五、总结

MySQL主从复制是一个强大且灵活的功能,可以显著提高数据库的可用性和可扩展性。通过遵循上述步骤,您可以轻松地在Linux下实现MySQL的主从复制。重要的是,要仔细规划配置,确保网络连通性和安全性,以及定期监控复制状态以维护数据一致性。

相关推荐
皓月盈江1 小时前
Linux Deepin深度操作系统应用商店加载失败,安装星火应用商店
linux·debian·deepin·国产操作系统·深度操作系统·星火应用商店·deepin应用商店加载失败
Linux技术芯2 小时前
#Linux内存管理# 详细介绍madvise函数的工作原理
linux
Hey! Hey!3 小时前
在 Ubuntu 22.04 上运行 cAdvisor 时遇到 mountpoint for cpu not found 错误
linux·运维·ubuntu
渡我白衣3 小时前
Linux网络编程:基于UDP 的聊天室雏形
linux·网络·udp
还是鼠鼠4 小时前
tlias智能学习辅助系统--SpringAOP-进阶-通知顺序
java·后端·mysql·spring·mybatis·springboot
飞翔的佩奇4 小时前
基于SpringBoot+MyBatis+MySQL+VUE实现的名城小区物业管理系统(附源码+数据库+毕业论文+开题报告+部署教程+配套软件)
数据库·vue.js·spring boot·mysql·毕业设计·mybatis·小区物业管理系统
gnawkhhkwang4 小时前
io_getevents 和 io_pgetevents 系统调用及示例
linux·c语言·开发语言
朱小弟cs64 小时前
Orange的运维学习日记--23.Linux计划任务详解
linux·运维·学习
小白不想白a4 小时前
【MySQL】MySQL的安全风险与安装安全风险
linux·数据库·mysql·安全
charlee445 小时前
PandasAI连接LLM对MySQL数据库进行数据分析
mysql·数据分析·nlp·pandasai·deepseek